遅れている荷物はどれか
あなたは大阪の物流会社「浪速ロジ」で、問い合わせ窓口を担当しています。
朝礼で、課長から指示がありました。「遅れている荷物の届け先に、先に連絡してください」。
今日の荷物は8件なので、目で探せます。年末には一日に数千件になります。そこで、データベースに「遅延の行だけ」を出してもらいます。
このレッスンのゴール
メモ
SQLを使って、条件に合う行を取り出すことができる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| テーブル | 行と列でデータを保存する表です。 | shipments |
| 行 | ひとまとまりの記録です。ここでは荷物1件です。 | |
| 列 | どの行にもある項目です。 | status |
| クエリ | データベースへの問いかけです。 | |
| SQL | クエリを書くための言語です。 | |
| 条件 | 行ごとに合うか合わないかを決める式です。 | status = '遅延' |
学生が入力するセルは、このプレビューでは空白です。
SELECTは列を選ぶ
クエリは、ほとんどが SELECT から始まります。後ろに、見たい列を書きます。
FROM の後ろには、テーブルの名前を書きます。* は「すべての列」という意味です。
テーブルや列の名前は、職場でも英語で付けることが多いです。海外のメンバーやツールでも読めるからです。ここでも shipments や status を使います。
試そう: 列を選ぶ
-- すべての列を表示します。
SELECT * FROM shipments;
-- 届け先と市だけを表示します。
SELECT customer, city FROM shipments;
-- 2つ目のクエリに status を足して、もう一度実行してください。
WHEREは行を選ぶ
WHERE は FROM の後ろに書き、条件を付けます。
データベースは、1行ずつ条件を調べます。合う行だけを残し、合わない行は出しません。
文字はシングルクォートで囲みます。例えば '遅延' です。数は囲みません。例えば weight_kg > 10 です。比べる記号には =、>、<、>=、<= があります。
試そう: 遅延だけを出す
-- 遅延している荷物だけを取り出します。
-- 文字は、シングルクォートで囲みます。
SELECT id, customer, city
FROM shipments
WHERE status = '遅延';
-- '遅延' を '配達済み' に変えて、もう一度実行してください。
例: 1行ずつ条件を調べる
| 荷物 | 重さ | weight_kg > 10 か | 結果 |
|---|---|---|---|
| 1 丸山商店 | 12kg | はい | 残る |
| 2 北浜クリニック | 3kg | いいえ | 出さない |
| 3 堺刃物工房 | 25kg | はい | 残る |
| 4 カフェ六甲 | 8kg | いいえ | 出さない |
| 5 京町家ホテル | 40kg | はい | 残る |
学生が入力するセルは、このプレビューでは空白です。
ANDとORで条件をつなぐ
AND でつなぐと、2つの条件の両方に合う行だけが残ります。
OR でつなぐと、どちらか一方に合えば残ります。
次のブロックを実行して、2つの結果を比べてください。AND のほうが条件が厳しいので、行は少なくなります。
試そう: 2つの条件
-- 大阪市あての、10kgより重い荷物です。
SELECT id, customer, weight_kg
FROM shipments
WHERE city = '大阪市' AND weight_kg > 10;
-- 神戸市あて、または奈良市あての荷物です。
SELECT id, customer, city
FROM shipments
WHERE city = '神戸市' OR city = '奈良市';
よくある間違い
注意
「神戸市と奈良市の荷物」と言われると、AND で書きたくなります。これは間違いです。1件の荷物の届け先が、2つの市であることはありません。だから AND では0行になります。どちらかの市に合う行がほしいときは、OR を使います。