【SQL】副問い合わせ
副問い合わせ(サブクエリ)
複数の問い合わせを一度に行うときは、IN内にサブクエリを記述する。
SELECT MOVIE_TITLE_JP, SERIES_CD FROM movies WHERE SERIES_CD IN ( SELECT SERIES_CD FROM movies WHERE MOVIE_TITLE_JP = 'アベンジャーズ');
タイトルが「アベンジャーズ」であるレコードのSERIES_CDを取得し、それとSERIES_CDが等しいレコードを取得している。
相関副問合せ
外側のSQLで抽出される1行ごとに内側の副問い合わせがその都度実行される。
SELECT DISTINCT A.PRODUCTID, B.PRODUCTNAME, MAX(A.QUANTITY) FROM sales AS A JOIN products AS B ON A.PRODUCTID = B.PRODUCTID WHERE A.QUANTITY = ( SELECT MAX(QUANTITY) FROM sales AS C WHERE A.PRODUCTID = C.PRODUCTID );
1行ごとにQUANTITYがPRODUCTIDごとの最大値であるかの検証が行われる。
SELECT PRODUCTID, PRODUCTNAME FROM products AS A WHERE EXISTS ( SELECT 'X' FROM sales AS B WHERE A.PRODUCTID = B.PRODUCTID );
一行ごとにsalesテーブルに各productsのレコードが存在するか検証される。EXISTはレコードが存在すればTRUEを返すので、慣習的にどのカラムとも関係ない'X'をセレクトする。
SELECT PRODUCTID, PRODUCTNAME FROM products AS A WHERE PRODUCTID IN ( SELECT PRODUCTID FROM sales AS B WHERE A.PRODUCTID = B.PRODUCTID GROUP BY PRODUCTID HAVING MAX(QUANTITY)/10 > AVG(QUANTITY) );
各productsの最大販売量/10が平均販売量より大きいかの検証が行われる。