Access学習メモ 7-4. SQL基礎学習④

Access学習メモ 7-4. SQL基礎学習④

コンテンツ
学び
テーブル上の特定レコードの全フィールドを表示させる案
SELECT テーブル名.*
FROM テーブル名
WHERE テーブル名.[フィールド名]=抽出条件;

クエリデザイン(=メカ).png

☆学習メモ7-1で用いた、データベースの中身を全確認したいときの標準的なデータ取得SQL
SELECT テーブル名.*
FROM テーブル名;

☆学習メモ7-3で用いた、選択済みフィールド情報(列)の中から特定のレコード(行)抽出SQL
WHERE テーブル名.[フィールド名]=抽出条件;

ふたつの☆の合わせ技で、タイトルに「メカ」とついたレコードを表示させようとした。

クエリデザイン画面を使う場合の操作手順:
選択クエリ画面にテーブルを置き、
*(アスタリスク)をダブルクリックする。
あるいは
*(アスタリスク)をフィールドグリッドにドラッグする。
 ↓
テーブル内「タイトル」フィールドをダブルクリックする。
あるいは
テーブル内「タイトル」フィールドをフィールドグリッドにドラッグする。
 ↓
「タイトル」フィールドグリッドの「抽出条件」に「メカ」と直打ち。
(Accessは賢いので、文字列と判断し"メカ"と変換してくれる。)
クエリデザイン(=メカ)賢いので囲んでくれる.png

 ↓
データシートビューでクエリ実行結果を確認する。
※「!(実行)」ボタンは不要。
・・・
 ↓

1件もヒットしない。

そんなバカな( ´゚д゚`)

Accessが自動形成してくれたSQLで、ヒントを見つけていこう。
 ↓
SELECT M_配信リスト.*, M_配信リスト.[タイトル]
FROM M_配信リスト
WHERE (((M_配信リスト.[タイトル])="メカ"));
クエリデザイン(=メカ)SQL.png

読みにくいのでWHERE句の((()))を消去。※効果は変わらない。
 ↓
SELECT M_配信リスト.*, M_配信リスト.[タイトル]
FROM M_配信リスト
WHERE M_配信リスト.[タイトル]="メカ";

抽出条件がイコール(=)だから、タイトル「メカ」と完全一致したレコードしか探せない。
そのようなタイトルは存在しない。抽出結果は正しい。

比較演算子
「メカ」を「含む」タイトルのレコードを探したいのであれば、抽出条件はイコール(=)としてはならない。
一致する文字列がテキストの一部分であっても
候補の結果をすべて抽出したい場合は
演算子はイコール(=)ではなく、ライク(LIKE)とワイルドカード(*)を使用。

検索したいキーワードの前後をアスタリスク(*)で囲むと
「そのキーワードをどこかに含む」という意味になる。
囲み方によって一致条件が違うので注意。

LIKE
'メカ*':前方一致(メカで始まるタイトル)
'*メカ':後方一致(メカで終わるタイトル)
'*メカ*':部分一致(メカをどこかに含むタイトル)

あいまい検索機能としてよく用いられるのは部分一致だろう。
今回は部分一致機能にて、タイトルに「メカ」が含まれるレコードを全部探し出そう。

1.SQLの構造
SELECT 句 (SELECT M_配信リスト.*)
役割:どの列(フィールド)のデータを取得するかを指定
詳細:
テーブル名「M_配信リスト」
末尾の *(アスタリスク)は「すべての列」を意味し、「M_配信リスト」テーブルにあるすべての項目を取得できる。
テーブル名と *(アスタリスク)の間には「.(ドット)」がちょこんと入る。
これを省略するとAccessはSQLの指示内容を読み取ることができず、「演算子エラー」となり、クエリ実行が中断するので注意。

FROM 句 (FROM M_配信リスト;)
役割:データの取得元となるテーブルを指定
詳細:「M_配信リスト」テーブルからデータを取るように指定。
末尾の ;(セミコロン)は、SQL文の終わりにのみ表示。今回は消す。

WHERE 句
WHERE
M_配信リスト.[タイトル]
LIKE
'*メカ*';
役割:データの取得元となるテーブルから
条件に部分一致するレコードを抽出。
詳細:
「M_配信リスト」テーブルにて[タイトル]フィールドにメカの文字が含まれたレコードを表示するように指定。
本SQLの締めくくりはWHERE句となるため
命令の末尾を示す;(セミコロン)で閉じる。

2.本SQLの役割
「M_配信リスト」テーブルに格納されたすべてのレコード(行)と、条件に一致する項目(列)を抽出して表示

操作手順:
選択クエリ画面にテーブルを置き、
*(アスタリスク)をダブルクリックする。
あるいは
*(アスタリスク)をフィールドグリッドにドラッグする。

 ↓
テーブル内「タイトル」フィールドをダブルクリックする。
あるいは
テーブル内「タイトル」フィールドをフィールドグリッドにドラッグする。

 ↓
「タイトル」フィールドグリッドの「抽出条件」にLIKE'*メカ*'と直打ち。
(この場合の「タイトル」フィールドは表示目的ではないため、お好みで非表示としてもよい)

 ↓
データシートビューでクエリ実行結果を確認する。
※「!(実行)」ボタンは不要。
抽出結果.png


3.クエリデータシート上のWHERE句フィールド名について
比較演算子フィールドを表示させる場合、名称が「フィールド0」とデフォルト表記されてしまう。
計算式が入った時点で、元フィールドとは別扱いされるため。
もともと表記された名称「タイトル」を「抽出結果:タイトル」とすることで
データシート表示上のフィールド名を「抽出結果」とし、意味を通わせることができる。
フィールドのタイトル.png


こうした読み替え機能をAS関数という。
SELECT句とFROM句の間に、下記が追加される。

M_配信リスト.[タイトル] AS 抽出結果
SQL文は以下となる。
SELECT M_配信リスト.*, 
M_配信リスト.[タイトル] AS 抽出結果
FROM M_配信リスト
WHERE M_配信リスト.[タイトル] Like '*メカ*';
ASを含めた全文.png

Accessのクエリデザイン機能を用いると、プログラミングの心得がなくてもある程度のSQLを完成させられる。
私自身、ずっと見よう見まねで活用してきた。
ただ、テーブルの条件が変われば、便利機能はあっさり崩壊することがある。デザインビューから編集をおこないたくても開くことすらできなくなるケースがある。
そういう状況下で残る方法としてはSQLビューからのデータ復元だが、コードを理解していなければ太刀打ちできない。

「知識や経験が及ばずともプログラマーっぽくこなせる機能が充実している」事実と、それがユーザー個人や企業の将来性に貢献するかは別次元。自身の頭と手を動かしてこつこつ努力することが大切。
人間自身が制御しきれない機能への過度な依存にリスクが伴うことは、歴史が教えてくれているはずです。


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