【ISSUE】【MySQL】非相関サブクエリと相関サブクエリについて
2024年12月23日 8:40
非相関サブクエリと相関サブクエリについて学んだので、メモ代わりに書いていきます。
こちらの書籍で学習しました。
https://www.amazon.co.jp/%E5%88%9D%E3%82%81%E3%81%A6%E3%81%AESQL-Alan-Beaulieu/dp/4873112818
サブクエリとは、別のSQL文に含まれるSQLで、細かい条件を決める時などに使います。サブクエリは、常に()で囲まれており、含む側のSQLより先に実行されます。
サブクエリには、大きく分けて2つの種類があります。
これは自己包含型のサブクエリで、update文とdelete文を除くと、サブクエリを使用するときはこちらを使用することがほとんどです。
このサブクエリは単体で実行されて、含む側の分の何かを参照しません。つまり、WHERE句の中で条件を指定する時に、()内でサブクエリを書いて条件指定しますが、()内のクエリ文単体で条件を指定することができます。
例文を書いていきます。
複数行/単一列のサブクエリには以下のような種類があります。
演算子の種類 |
---|
in演算子 |
all演算子 |
any演算子 |
一つ一つの説明はまた追記したいと思います。
続いて、複数列のサブクエリです。今までのサブクエリは、列が1つだけでしたが、複数列のサブクエリを使用できる状況もあります。
このクエリ文は、条件にクエリ文で出力されたe.emp_idとopen_emp_idが同じデータの出力をするクエリ文です。このように、非相関サブクエリは、()内のサブクエリを単体で行い、条件の指定に使用することができます。
このサブクエリは、含む側の文に依存します。つまり、含む側のクエリの列を1つ以上参照するとう点において、含む側の文に依存します。
例文を書いていきます。
一番下のc.cust_idに注目です。こちらは含む側の文から参照されている値で、非相関サブクエリには無い書き方でした。
このサブクエリの条件は、accounテーブル内のa.cust_idとc.cust_idが同じデータの合計が2の値が返された場合、フィルタ条件を満たされるので、その行が結果セットとして追加されることになります。
相関サブクエリには以下のような演算子があります。
演算子の種類 |
---|
exists演算子 |
この2つのサブクエリを使用する状況としては、先ほども少し説明しましたが、SELECT文を使用して、データを取得してくる時は非相関サブクエリを使用して、UPDATE文やDELETE文を使用する時は相関サブクエリを使用していきます。
[cv:issue_marketplace_engineer]
診断を受けるとあなたの現在の業務委託単価を算出します。今後副業やフリーランスで単価を交渉する際の参考になります。また次の単価レンジに到達するためのヒントも確認できます。