OracleのEXISTS 相関副問い合わせ【SQL】

OracleのEXISTS(相関副問い合わせ)

Oracleで副問合せに行が存在するかどうかを取得するには「EXISTS」を使います。

今回は「EXISTS」の使い方を紹介します。

WHERE EXISTS(副問い合わせSQL)

副問い合わせSQLがtrueであれば、データが取得できます。

 

サンプルデータ

--empテーブルを取得する
SELECT empno, empname, managerno FROM emp;
empno empname managerno
A001 佐藤花子 A005
A002 田中太郎 A004
A003 加藤一
A004 青木花
A005 藤田学
--テニスサークルを取得する
SELECT empno FROM act_tennis;
empno
A001
A005

 



例1. EXISTSで2テーブルに合致するレコードを取得する

--テニスサークルの人を取得する
SELECT empno,empname FROM emp e
WHERE EXISTS 
 (SELECT * FROM act_tennis a
  WHERE a.empno = e.empno
 );
empno empname
A001 佐藤花子
A005 藤田学

ここでは「emp」テーブルと「act_tennis」テーブルをキー「empno」で副問い合わせを使って取得しました。これにより、2テーブルに合致するレコードのみが取得できました。

例2. EXISTSで同一テーブルに合致するレコードを取得する

--役職ありの人を取得する
SELECT empno,empname FROM emp e1
WHERE EXISTS 
 (SELECT * FROM emp e2
  WHERE e1.empno = e2.managerno
 );
empno empname
A004 青木花
A005 藤田学

ここでは「emp」テーブル単独で副問い合わせを使い、役職付きの人を取得しました。「empno」と「managerno」が合致する行、つまり、「A004」「A005」が取得できました。

例3. NOT EXISTS

--役職ありの人以外を取得する
SELECT empno,empname FROM emp e1
WHERE NOT EXISTS 
 (SELECT * FROM emp e2
  WHERE e1.empno = e2.managerno
 )
;
empno empname
A001 佐藤花子
A002 田中太郎
A003 加藤一

「NOT EXISTS」を使って条件に合致しないレコードを取得しました。ここでは役職付きではない人を取得しました。

以上、OracleのEXISTSの使い方でした。

 

コメント

タイトルとURLをコピーしました