「WITH句やCASE句って文が長くてよくわからない・・・」
「行の更新や追加がイメージしづらい!」
そんな思いを抱える方は、ぜひ記事をご覧ください!
前回の記事はこちらからどうぞ。
データ操作言語の基礎知識⑧ WITH句とCASE式
WITH句とCASE式は、どちらも複雑かつ、SQL文全体が長くなってしまいがちなので、解きにくいと感じやすい部分です。解き方のパターンをしっかり覚えて、対応ができるようにしましょう!
WITH
WITH句は、一時的に仮の表を作成するときに使用します。そのSQL文の中で、同じ表を何回も作る必要があるときに便利です
WITH 部員人数(部活番号, 所属人数) AS(SELECT 部活番号, COUNT(*) FROM 学生表 GROUP BY 部活番号) SELECT 部活番号, 所属人数 FROM 部員人数 WHERE 所属人数 = (SELECT MAX(所属人数) FROM 部員人数)
WITH 仮の表の名前(仮の表の列名)AS (どんな表を作るか)
このように、太字の部分で「部員人数」という表を作り、SQL内でそれを何度も使っています。
太字の部分を簡単に説明すると、学生表の部活番号ごとに、行の数(1人1行なので、行の数=人数)を数え、それを部活番号ごとに一時的に記録している形です。そして、部活番号と人数がペアになった表の中で、人数が最も多い行を抽出しているのが下のSQL文です。
つまり、この入り組んだSQL文は、名前や所属している部活などが書いてある学生表から、部員がいちばん多い部活を求めるものになります。
CASE
CASE式は、「〇〇ならこう、××ならこう」と複数の条件と結果を一気に指定していくことができる式です。
SELECT 名前, CASE
WHEN 年齢 < 18 THEN '学生'
WHEN 年齢 >= 19 AND 年齢 < 59 THEN '大人'
ELSE 'シニア'
END AS 年代
FROM 顧客表
太字になっている部分がCASE式です。長いですが、「18歳未満なら学生、19~59歳までは大人、それ以上はシニア」と年代に表示してねという意味です。
データ操作言語の基礎知識⑨ データ更新
これまでは、「すでにある表」を結合したり抽出したりという式、演算子をまとめていきました。しかし、「データ更新」で紹介するものは、「すでにある表」を書き換えたい!というときに使えます。
INSERT
「INSERT」文は、表に行を挿入することができます。
INSERT INTO 学生表(出席番号, 名前) VALUES (6, '田中太郎')
INSERT INTO 学生表(出席番号, 名前) SELECT 出席番号, 名前, 部活番号 FROM 新入生名簿 WHERE 出席番号 = 6
「INSERT」には、「VALUES」を使って情報を直打ちする場合と、「SELECT」で問合わせをして情報を取り出す場合があります。よく出てくるのは「VALUES」のほうですが、問合わせを使う場合も午後問題に出てきた例がありますので、両方押さえておきましょう。
また、値を挿入したい列と、空にしておきたい列がある場合は、太字になっている列の指定を省略せずに書く必要があります。指定されていない列は基本的に空値(NULL)になります。逆に、すべての列に値を挿入する場合は、列の指定を省略することが可能です。
UPDATE
「UPDATE」は、表にある行を編集することができます。
UPDATE 学生表 SET 学年 = 2 WHERE 学年 = 1
SET句には変更したい値を「列名 = 変更値」で指定しますが、カンマで区切ることで複数の列を一気に変更することも可能です。また、WHERE句を省略することで、表の中のすべてのデータを一気に書き換えることもできます。
また、変更値の部分には、副問合わせ(抽出される値が1つ)やCASE式を使う場合もあります。
いろいろなパターンがありますが、しっかり対応できるようにしましょう。
DELETE
「DELETE」文は、表の行を削除することができます。
DELETE FROM 学生表 WHERE 学年 = 3
上記のSQLは、学年が3年の行を学生表から削除することができるものです。
WHERE句を省略すると表の行をすべて削除することができますが、表自体は残ります。表自体を削除するのは「DROP」文です。
データ操作言語の基礎知識⑩ 参照動作指定
参照動作指定は、参照される側の表の行を削除・変更するとき、どのような制約で動作するのかを指定することです。
例えば、「学生表」の主キー「学生番号」を外部キーに持つ「学生部活表」という2つの表があったとして、学生表のある学生番号を削除してしまうと、学生部活表の行も削除しないとつじつまが合わなくなってしまいます。
そういったときに、どのような処理をするのか指定するのが参照動作指定ということです。
NO ACTION
「NO ACTION」は、削除や変更を実行するが、その結果、参照していた行が残って整合性が保てなくなった場合は削除・変更処理を取り消します。
RESTRICT
「RESTRICT」は、削除や変更をするとき、「この行は誰かに参照されてないかな?」と調べ、参照されてた場合は削除や変更ができないという制約です。
CASCADE
「CASCADE」は、どのような状態でも削除や変更を行います。その後、もしもその行を参照している行があれば、その行も削除や変更を行います。
つまり、削除や変更が連鎖するということです。
SET DEFAULT
「SET DEFAULT」は、どのような状態でも削除や変更を行います。その後、もしもその行を参照している行があれば、その行の外部キーを前もって決めた値に変更します。
SET NULL
「SET NULL」は、どのような状態でも削除や変更を行います。その後、もしもその行を参照している行があれば、その行の外部キーを空値(NULL)に変更します。
まとめ
これで、SQLの基礎知識はすべてまとめ終わりました!3つの記事にまたがってしまいましたが、今までの知識をしっかり固めておけば、午後問題も解けるようになるはずです。わからなくなった際にもぜひ参考にしてくださいね!



コメント