0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SQLについて学び直したので備忘録

Posted at

以下の書籍でSQLを基礎から学び直したので、ちゃんと理解せずに使っちゃってたなと思った部分をまとめます。
https://amzn.asia/d/8RJlRP4

項目

  • サブクエリ

サブクエリについて

サブクエリ

サブクエリは「使い捨てのビュー」のようなものです。
※ビューはよく使うSELECT文を保存しておき、実際にあるテーブルと同じようにVIEW名で使えるようにしたもの。
select A, B from view_name

サブクエリはビューをそのままFROM句に持ち込むような形で表現します。

SELECT
    shohin_category,
    count
FROM (
    // FROM句の中でSELECTを使用する
    SELECT
        shohin_category,
        COUNT(*) AS count
    FROM
        shohin
    GROUP BY
        shohin_category
);

このように入れ子構造にしてSELECT文を作ることができます。
このSQLではまずFROM句の中のSELECTが実行され、その後に外側のSELECT文が実行される、という順序になっています。

スカラ・サブクエリ

「スカラ」とは「単一の」という意味で、その名の通り、必ず1行だけの戻り値を返すという制約をつけたサブクエリのことです。

// 販売単価が全体の販売単価の平均よりも高い商品を抽出する
SELECT
    *,
FROM
    shohin
WHERE
    hanbai_tanka > (SELCT AVG(hanbai_tanka) FROM shohin);

スカラ・サブクエリは単一の結果しか返さないので、上記のようにFROM句以外の場所でも使うことができます。

相関サブクエリ

相関サブクエリはテーブル全体ではなく、テーブルの一部のレコード集合に限定した比較をしたい時に使います。

// 商品カテゴリごとに商品の平均販売単価を出して、それよりも販売単価が高い商品を抽出する
SELECT
    *
FROM
    shohin AS s1
WHERE
    hanbai_tanka > (
        SELECT
            AVG(hanbai_tanka)
        FROM
            shohin AS s2
        WHERE
            s1.shohin_category = s2.shohin_category            
    );
    

それぞれの商品カテゴリのなかで平均販売単価が計算され、それが商品テーブルの各レコードと比較されるため、相関サブクエリはレコードに対して実質的に1行しか返していない、とみなされます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?