Access学習メモ 7-3. SQL基礎学習③

Access学習メモ 7-3. SQL基礎学習③

コンテンツ
学び
FROM句の対象テーブルから
SELECT句で選び取ったフィールド(列)表示
ここまでが既存の学習メモ内容

今回は、選択済みフィールド情報の中から特定のレコード(行)のみ抽出
だんだんややこしくなってきてる(゚д゚lll)

SELECT
M_配信リスト.[話数],
M_配信リスト.[タイトル], 
M_配信リスト.[放送日], 
M_配信リスト.[Season]
FROM
M_配信リスト
WHERE
M_配信リスト.[フィールド名]=抽出条件;   ←【New】

7-3.SOL基礎学習 クエリSeason3.png

1. SQLの構造
SELECT~FROM~に加え「WHERE句」が仲間入り。

SELECT 句 
SELECT 
M_配信リスト.[話数], 
M_配信リスト.[タイトル], 
M_配信リスト.[放送日], 
M_配信リスト.[Season]

役割:どの列(フィールド)のデータを取得するかを指定
詳細:
テーブル名「M_配信リスト」の内、
[話数][タイトル][放送日][Season]フィールドを表示。
具体的なフィールド名をカンマ(,)で区切って
「どのテーブルの、どの項目か」を正確に指定する。

FROM 句 
FROM M_配信リスト;

役割:データの取得元となるテーブルを指定
詳細:
「M_配信リスト」テーブルからデータを取るように指定。
これまでと違う点:
テーブル名の後につける;(セミコロン)は、この後に続くWHERE句が引き継ぐため、今回は不要。

WHERE 句
WHERE
M_配信リスト.Season = 3;

役割:データの取得元となるテーブルから、必要なレコードのみ抽出。
詳細:
「M_配信リスト」テーブルの内、[Season]フィールドに
「3」と入ったレコードのみ表示するように指定。
本SQLの締めくくりはWHERE句となるため、
命令の末尾を示す;(セミコロン)で閉じる。

※クエリデザイン設計後、SQLビューで確認したAccess自動形成文
 フィールド名に[]ありと[]なしが混在し、WHERE句には大量のカッコ
7-3.SOL基礎学習改行なし.png

2. 本SQLの役割
「M_配信リスト」テーブルに格納されたすべてのレコード(行)から
指定したフィールド(列)を抽出し・・・・・垂直の選択
その中のレコード(行)を絞り込む・・・・・水平の選択【New】
(⁰▿⁰)WHERE句は、Excelのフィルタリング機能と同じ役目を果たす

SQLの意味を理解しようとする際、まず英単語を日本語のイメージに置き換えてみるが...
①SELECT = 選ぶ:対象フィールド選択・・・・・わかる
②FROM = 出身:データの引用元・・・・・これもわかる
③WHERE = どこ:どこ情報・・えっ?また最初から説明?

てな感じで、直感的にイメージがつきやすいSELECTやFROMと比べ
WHEREだけ異次元のややこしさを覚えた。

この場合のWHEREは直訳の「どこ」というより「探す」とイメージした方が腑に落ちる。
ユーザーの指定条件に従いデータを探し出してくれる役割を持つ。
探す必要なし、つまり全レコードを拾って問題なければ、WHERE句は不要。いわばプルダウン機能のないExcelシート。

迷子の子猫ちゃんに「お家はどこ?」と訊くが手掛かりなし。
犬のおまわりさんは困り果てるけど、ないている子猫ちゃんを見捨てるわけにもいかず、とりあえず交番で把握する全世帯を1軒目から調べるしかない。
その内、子猫ちゃんが名前や住所を思い出し始めたら、その内容に従ってリストを徐々に絞り込んでいく。それがWHERE句の役目だろう。

3. Accessが自動形成するWHERE句のカッコ ((())) について
AccessのクエリデザインからSQLを生成すると、上記イラストの如く、
WHERE句に ((( ))) と多くのカッコが付いた。
Accessなりに「計算や条件の優先順位を間違えないように」と気遣ってくれているのだろうか。
ひとつずつ()を減らして試した結果、今回のSQLは()がなくても問題ないことが分かった。

7-3.SOL基礎学習改行ありカッコふたつ.png

7-3.SOL基礎学習改行ありカッコひとつ.png

7-3.SOL基礎学習改行ありカッコなし.png

7-3.SOL基礎学習改行ありカッコ全消し.png

4. WHERE句において、数値には引用符が不要/文字列には引用符が必要
今回の条件「Season:3」のように数字を条件にする場合、
フィールドのデータ型が数値なら「=3」と囲みなしで記入可。
「'(シングルクォーテーション)」や「" "(ダブルクォーテーション)」で囲まずそのまま記述できる。
データ型が文字列の場合は、囲みが必要となる。

5. データベースにとって、数値と文字列は全く別物
数値を抽出条件(WHERE句)とする場合
数値(3): 
計算可能なデータとして扱われ、裸のまま記入しても、データベースは「これは数値の3だ」と即座に理解できる。
文字列を抽出条件(WHERE句)とする場合
文字列('Season3'): 
文字列の場合は必ず ' '(シングルクォーテーション)などで囲み、「ここからここまでがデータとしての文字である」という境界線をデータベースに伝えなくてはならない。

6. 「名前の境界線」と「データの境界線」も全く別物
[](角カッコ): 
「フィールド名」や「テーブル名」が、予約語や命令句(SELECTなど)と混同されないための名前の境界線。
' '(引用符): 
フィールドの中に入っている「具体的なテキストデータ」を示すためのデータの境界線。



サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す