以下は2つのスクリプトです
select *
select count(*)
1つ目はエラーになりますが、2つ目はエラーになりません。
以下はSQLサーバーによって与えられたエラーです
メッセージ263、レベル16、状態1、行1選択するテーブルを指定する必要があります。
理由を教えてください。
注:テーブル名は指定されていません。
前もって感謝します。
以下は2つのスクリプトです
select *
select count(*)
1つ目はエラーになりますが、2つ目はエラーになりません。
以下はSQLサーバーによって与えられたエラーです
メッセージ263、レベル16、状態1、行1選択するテーブルを指定する必要があります。
理由を教えてください。
注:テーブル名は指定されていません。
前もって感謝します。
動作する理由select count(*)
は、デフォルトでmaster
データベースに設定されているためです
他の回答で述べられているように、テーブル名を指定する必要があります。
SELECT *
完全なクエリではありません
そのはず
SELECT * from MyTableName
select count(*)
count
は関数であり、スカラー値を返すために機能します。from
句はオプションであるため、正常に実行されますが*
、関数もスカラー値も実行されないため、実行に失敗します。
SELECTから
[ WITH <common_table_expression>]
SELECT select_list [ INTO new_table ]
[ FROM table_source ] [ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]
SELECTステートメントの句の順序は重要です。オプション句のいずれかを省略できますが、オプション句を使用する場合は、適切な順序で表示する必要があります。
したがって、selectの後に任意のスカラー値が実行されます。つまり、select 1、select'*'
最初のクエリfrom
では、それを完了するために、句を定義する必要があります。
SELECT * FROM <Table_Name>
2番目のクエリでは、選択するテーブルを指定しない場合、1回の選択で1つの行のみが返されるため、count(*)は1を返します。
このFROM
句はオプションであり、常にこのように機能します。したがって、テーブルを必要とせずに、などを"SELECT 1"
行うことができます。"SELECT @val"
他のデータベースシステムでは、次の"DUAL"
ようなSELECTステートメントを実行するために使用される1つの行で呼び出されるダミーテーブルがあります。"SELECT 1 FROM dual;"