OracleのEXISTSについて。
この記事の内容はコチラです
- 「EXISTS」の使い方
- 「NOT EXISTS」の使い方
- EXISTSのSQLの例文
今回は、OracleのEXISTSについて紹介します!
OracleのEXISTS(相関副問い合わせ)
Oracleで副問合せに行が存在するかどうかを取得するには「EXISTS」を使います。
今回は「EXISTS」の使い方を紹介します。
WHERE EXISTS(副問い合わせSQL)
カッコ内の副問い合わせSQLがtrueであれば、データが取得できます。
--EXISTSの書き方 SELECT ~ FROM ~ WHERE EXISTS (SELECT ~ );
サンプルデータ
--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の使い方でした。
コメント