目次
1. はじめに
2. 今回のゴール
3. 詰まったところと原因
3-1. シングルクォーテーションとダブルクォーテーションが曖昧
復習:部分検索
3-2. テーブルに入っているデータ同士を比較する方法を知らない
3-3. UPDATEの基本構文が曖昧
4. おわりに
1.はじめに
現在、基本的なSQL文が書けるように下記の書籍を進めています。
各章に練習問題があり、詰まったところをまとめていきたいと思います。
▼①はこちら
2.今回のゴール
「なぜ間違えたのか」を理解して落とし込むこととします。
3.詰まったところと原因
3-1.シングルクォーテーションとダブルクォーテーションが曖昧
部分検索のSQL文を考える問題がありました。
リテラルにダブルクォーテーションを使用したところ、エラーとなりました。
SELECT * FROM 家計簿
-- "%購入%"とするとエラーになる
WHERE メモ LIKE '%購入%'
ダブルクォーテーションを使用する場合もあるようですが、基本的にシングルクォーテーションを使うようです。
復習:部分検索
項目 | 内容 |
---|---|
_(アンダースコア) | 任意の1文字 |
% | 任意の0文字以上の文字列 |
'%購入%' | 文字列を含むもの |
'%購入' | 最後に文字列を含むもの(今回だと「〜購入」など) |
'購入%' | 最初に文字列を含むもの(今回だと「購入〜」) |
3-2.テーブルに入っているデータ同士を比較する方法を知らない
以下のような成績表のテーブルがあるとします。
名前 | 英語の点数 | 数学の点数 |
---|---|---|
太郎くん | 80 | 80 |
花子さん | 70 | 92 |
これまで「太郎くんの英語の点数は70点より高いか低いか」というような 「テーブル内のデータと指定されたデータの比較」 をする問題はありました。
しかし、今回の成績表テーブルにおける「英語と数学の点数が一致しているデータ」というような 「データ同士の比較」 をしたことがなく戸惑いました。
一致するデータ、一致しないデータを取得するSQL文は以下のようになります。
-- 一致するデータ
SELECT *
FROM 成績表
WHERE 英語 = 数学 -- 太郎くんのデータが取得できる
-- 一致しないデータ
SELECT *
FROM 成績表
WHERE 英語 <> 数学 -- 花子さんのデータが取得できる
3-3.UPDATEの基本構文が曖昧
前回の記事と同じ見出しになってしまいますが、またUPDATEのところで詰まってしまいました…
基本構文は以下です。
UPDATE テーブル名
SET 列名1 = 値1, 列名2 = 値2 ...
(WHERE 修飾)
複数の列に対して同じ値を更新する場合はIN句を使用します。
▼例:値1と値2を含むデータのA列の値を一括でBにする場合
UPDATE テーブル名
SET 列名A = 値B
WHERE 式(列名が来ることもある) IN (値1, 値2) --カッコ内に列挙した複数の値のいずれかにデータが合致するか判定
4.おわりに
今回も前回に引き続き、参考書を進める中で詰まった3箇所について復習していきました。
原因を掴んで理解することが、上達への近道ではないかと思います。実務では複雑なものもあったりするので、自己学習で一つずつ紐解きながら積み上げていきたいと思います。
読んでいただき、ありがとうございました。