サブクエリが使えるのはMySQL4.1以降のみ
サブクエリ・・・「副問い合わせ」
クエリを実行して取り出されたデータを使って、さらにクエリを発行する(2段階処理)
例えば、
最も売上の高い社員データを抽出するにあたって、
SELECT * FROM tb ORDER BY uria DESC LIMIT 1; (・・・①)
という方法でやってみたけれど、
サブクエリを使うと、こんなやり方ができる。
SELECT * FROM tb WHERE uria IN (SELECT MAX(uria) FROM tb); (・・・②)
もし最高売上獲得社員が複数いた場合、
①のやり方では一人しか抽出できないので、正確に最高額を売り上げた社員を割り出すことはできないが、②のやり方なら何人いても大丈夫!
GROUP BY関数
MAXやAVG、SUMなどの集計を行う関数はGROUP BY関数と呼ばれ、本来はグループ化したときの値を処理する。ただし、「GROUP BY・・・」がない場合は、テーブル全体を1つのグループとして処理する。
■INを使う -カラムを返すサブクエリ-
サブクエリがカラムを返す例
1段階目:サブクエリで条件に一致したカラムを返す
2段階目:その値を含むレコードを対象に抽出する
サブクエリの構文
SELECT 表示するカラム FROM テーブル名 WHERE カラム名 IN (SELECTによるサブクエリでカラムを抽出);
INではなく=(イコール)を使おうとすると、サブクエリが1件以上抽出された場合は
「Subquery returns more than 1 row」
というエラーになる。
INは「・・・の中のどれか」という意味になるので、安心。
■EXISTSで、存在するレコードだけを対象にする
特定のカラムではなく、1段階目のサブクエリが「対象となるレコードが存在する」という情報を返す
NOT EXISTSで、サブクエリによって抽出されないレコードを対象にして処理する
2009/04/05
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿