【SQL】『スッキリわかるSQL入門』7章の読書メモ

f:id:hira98:20190530154131j:plain

【結論】

  • SQLでは2つ以上のSELECT文をまとめて書くことができる。

  • 1つ目のSELECTの実行結果を、2つ目のSELECTの検索条件に使用したい場合に使用する。

  • このように、ネスト構造で書かれたSELECT文を「副問い合わせ」という。

【目次】

副問い合わせとは

集計結果と比較した結果を出力したい場合など、2つ以上のSELECT文を実行しないと取得できない結果を取得したい時に利用されます。

【副問い合わせを使わない場合】

/* (1)SQL1:1日の平均視聴時間を求める */
SELECT AVG(Youtube視聴時間) FROM Youtube視聴時間記録表;

/* (2)平均視聴時間を超えた日とその視聴時間を求める */
SELECT 月日, Youtube視聴時間
 WHERE Youtube視聴時間 > (1)のSQL文の実行結果;

【副問い合わせを使う場合】

SELECT 月日, Youtube視聴時間
 WHERE Youtube視聴時間 > (SELECT AVG(Youtube視聴時間)
                           FROM Youtube視聴時間記録表);

SELECT文の実行結果の分類

SELECT文のの実行結果は3つに分類することができます(下図参照)。

f:id:hira98:20190609144320p:plain

※副問い合わせでは、検索条件に使用するSELECT文がどのような結果を返すかが重要になってきます。

結果から確実にNULLを除外する方法

次の2つの方法があります。

(1)IS NOT NULLを使ってNULLを除外する

SELECT *
  FROM 2019年のYoutube視聴表
 WHERE 動画分類 IN ( SELECT 動画分類
                      FROM 2018年のYoutube視聴表
                     WHERE 分類 IS NOT NULL);

(2)COALESCE関数を使ってNULLを置換する。

SELECT *
  FROM 2019年のYoutube視聴表
 WHERE 動画分類 IN ( SELECT COALESCE(動画分類, '未分類')
                      FROM 2018年のYoutube視聴表);

参考情報

スッキリわかるSQL入門 ドリル215問付き! - インプレスブックス

さいごに

Dアニメで『盾の勇者の成り上がり』19〜21話を見たけど面白かった。