SQL ステートメントにはテーブルの完全修飾名(データベース名を含む名前)を使用します。
ステートメントの各テーブル名には常にデータベース名を明示的に指定します(メインデータベースの場合は「main」を使用します)。例えば、次のコードには、明示的なデータベース名
main
が含まれます。
SELECT employeeId
FROM main.employees
データベース名を明示的に指定すると、一致するテーブルを見つけるためにランタイムが各接続データベースをチェックする必要がなくなります。間違ったデータベースが選択される可能性もなくなります。SQLConnection が接続されているデータベースが 1 つしかない場合でもこのルールに従ってください。SQLConnection は、SQL ステートメントからアクセスできる一時データベースにも背後で接続されています。
SQL の
INSERT
および
SELECT
ステートメントでは明示的な列名を使用します。
明示的な列名の使用例を次に示します。
INSERT INTO main.employees (firstName, lastName, salary)
VALUES ("Bob", "Jones", 2000)
SELECT employeeId, lastName, firstName, salary
FROM main.employees
前の例と次の例を比較してください。この形式のコードは使用しないでください。
-- bad because column names aren't specified
INSERT INTO main.employees
VALUES ("Bob", "Jones", 2000)
-- bad because it uses a wildcard
SELECT *
FROM main.employees
明示的な列名を指定しないと、列名を特定するために追加の処理が実行されます。
SELECT
ステートメントで明示的な列ではなくワイルドカードを使用すると、余分なデータを取得する処理が発生します。この余計なデータには追加の処理が必要であり、必要ではない余計なオブジェクトインスタンスが作成されます。
テーブルをそれ自体と比較する場合を除き、1 つのステートメント内で同じテーブルの結合を複数回使用しないでください。
SQL ステートメントが長くなると、意図せずに 1 つのデータベーステーブルを複数回クエリに結合してしまうことがあります。そのようなステートメントを見直すと、当該テーブルを 1 回使用するだけで同じ結果を得られることが少なくありません。同じテーブルを複数回結合する操作は、ビューを 1 つまたは複数使用しているクエリで発生しがちです。例えば、テーブルをクエリに結合し、さらに、そのテーブルのデータが含まれるビューにも結合してしまうことがあります。この 2 つの操作により、複数の結合が発生することになります。
|
|
|