データベースのテーブル全フィールドの内、特定フィールドを表示したいときに用いられる、標準的なデータ取得SQLです。
SELECT
テーブル名.[1つ目の指定フィールド名],
テーブル名.[2つ目の指定フィールド名],
テーブル名.[3つ目の指定フィールド名]
FROM テーブル名;
1. SQLの構造
7-1.SQL基礎学習①と同じく、ここでもふたつの「句」が登場する。
SELECT 句:
SELECT
M_配信リスト.[話数],
M_配信リスト.[タイトル],
M_配信リスト.[放送日],
M_配信リスト.[Season]
役割:どの列(フィールド)のデータを取得するかを指定
詳細:
テーブル名「M_配信リスト」
前回のように全フィールドを一括取得する場合、*(アスタリスク)を用いた命令句が成立するが、一部のフィールドのみ取得する場合においては、具体的なフィールド名をカンマ(,)で区切って「どのテーブルの、どの項目か」を正確に指定する必要がある。
今回はテーブル名「M_配信リスト」の内、[タイトル][放送日][Season]フィールドを表示。
FROM 句:
FROM M_配信リスト;
役割:データの取得元となるテーブルを指定
詳細:
「M_配信リスト」テーブルからデータを取るように指定。
末尾の ;(セミコロン)は、SQL文の終わりを示す。
2. 本SQLの役割
「M_配信リスト」テーブルに格納されたすべてのレコード(行)の内、指定した項目(列)を抽出して表示。
補足:「フィールド名」の[](角かっこ)の意味
「プログラムの命令(予約語)の内、ここからここまでが名称」と固有名詞の存在をAccessに伝えるための境界線。
一方、クエリのデザイングリッドでSQLを組む場合、Accessが自動形成してくれるコードにはフィールド名に[]が含まれていなかったり、あるいは[]ありと[]なしが混在しているケースがある。
Accessが「命令の一部なのか、名称なのか区別がつかない箇所」を検出し最適化が行われた結果、必要と判断された部分にのみ角カッコが付与される様子。
試しにフィールド名[放送日]を[放送日(西暦)]とし、※括弧を入れる
新たなフィールド名[Select]を追加してみた。※予約語と重複した名称
AccessにSQLを自動形成させると
フィールド名;話数とSeason以外には、すべて[]が自動付与された模様。
SELECT M_配信リスト.話数,
M_配信リスト.[タイトル],
M_配信リスト.[放送日(西暦)],
M_配信リスト.Season, M_配信リスト.[Select]
FROM M_配信リスト;
[]が必要になりやすいフィールド名の例
名前にスペースや記号が含まれる場合: [円 税込][円(税込)]
名前が数字から始まる場合: [2026年度売上]
「予約語」と同じ名前の場合:[Select]
3. カンマ(,)のルール
複数フィールドを並べる時は、必ず間にカンマを入れる。
ただし、末尾のフィールドの後ろにはカンマを残さないよう注意。
OK: フィールドA, フィールドB
NG: フィールドA, フィールドB , ←ここ
4. 改行の必要性
Accessクエリ自動形成による改行なしバージョンと改行を施したバージョンで比較したが、命令句の効果は変わらない。
改行なし
改行あり(ついでに角カッコ付与)
5.VBAコードの中でSQLを用いる場合
VBAにとってSQLは「単なる文字列」として扱われるため注意は必要だが、
SQLとしてのルールは共通。
①SQL単独使い:
SELECT ID FROM Table
②VBA内のSQL:
strSQL = "SELECT ID FROM Table"
①②どちらも正常に動作する。
VBAに入れた瞬間に文法が変わるわけではない。
ではなぜ、VBA内SQLでは角カッコ付き名称が定番なのか?
予約語との衝突リスク:
VBAでSQLを扱う際に特有の「デバッグ(間違い探し)の難しさ」がある。
角カッコがないことで、「SQLのフィールド名」なのか「VBA自身への命令(予約語)」なのかをAccessが読み間違える可能性が高くなる。
文字列結合による混乱:
strSQL = "SELECT " & myField & " FROM ..." のように、VBA上では「変数」を組み合わせたSQLを用いるケースも多い。
【例】myField = "[タイトル]"
※上記「myField」を「変数」と呼ぶ。
strSQL = "SELECT " & myField & " FROM M_配信リスト"
変数(myField)の中身を書き換えるだけで、取得フィールドを[タイトル]から[放送日]に変更するなど、プログラムを動かしつつ柔軟な対処が可能になる。
変数はいわばデータを格納するための箱であり、""など文法が複雑化する。可読性の意味でも、あらかじめ角カッコを付けておくことで、変数の中身(""内)にスペースが混在しプログラムが停止するようなトラブルを回避しやすい。
AccessクエリによるSQL自動形成に頼らず自身でVBAコードを書く際は、
フィールド名には一貫して角カッコを付けるほうが安全。