SQL-92/99 Oracle Db2 SQL Server MySQL PostgreSQL Access
SELECT文1
EXCEPT [ ALL ]
SELECT文2
EXCEPTはSELECT文1の問い合せ結果とSELECT文2の問い合せ結果の差集合を求めるときに使用します。
関連キーワード
SQL実行例の説明(1)
T1_SAMPLE表の問い合せ結果から差集合のデータを取得します。
・SELECT文1はT1_SAMPLE表の問い合せ結果であるすべてのデータを取得します。
・SELECT文2はT1_SAMPLE表のI2_CODEの値が20と等しい問い合せ結果であるデータを取得します。
SELECT * FROM T1_SAMPLE
EXCEPT
SELECT * FROM T1_SAMPLE WHERE I2_CODE = '20';
SQL実行の結果(1-1)
・T1_SAMPLE表には6件のデータが格納されています。(左)
・EXCEPTを使用した差集合はSELECT文1の問い合わせ結果である6件のデータからSELECT文2の問い合せ結果である4件のデータを除いた2件のデータを取得することになります。(右)
I1_CODE | I2_CODE | I_COST |
---|---|---|
101 | 10 | 2500 |
201 | 20 | 6500 |
301 | 30 | 9800 |
201 | 20 | 5500 |
201 | 20 | 5600 |
202 | 20 | 5600 |
I1_CODE | I2_CODE | I_COST |
---|---|---|
101 | 10 | 2500 |
301 | 30 | 9800 |
SQL実行例の説明(2)
EXCEPTではALLキーワードを指定することで複数のSELECT文の問い合せ結果の差集合を求めるとき重複するデータも含めた差集合を求めることができます。
・SELECT文1はT1_SAMPLE表の問い合せ結果であるすべてのデータ。
・SELECT文2はT1_SAMPLE表のI_COSTが6000より大きい値の問い合せ結果であるデータを取得します。
SELECT * FROM T1_SAMPLE
EXCEPT ALL
SELECT * FROM T1_SAMPLE WHERE I_COST > 6000;
SQL実行の結果(2-1)
・T1_SAMPLE表には6件のデータが格納されています。(左)
・EXCEPTを使用した差集合はSELECT文1の問い合わせ結果である6件のデータから、SELECT文2の問い合せ結果である2件のデータを除いた4件のデータを取得することになります。(右)
I1_CODE | I2_CODE | I_COST |
---|---|---|
101 | 10 | 2500 |
201 | 20 | 6500 |
301 | 30 | 9800 |
201 | 20 | 5500 |
201 | 20 | 5600 |
202 | 20 | 5600 |
I1_CODE | I2_CODE | I_COST |
---|---|---|
101 | 10 | 2500 |
201 | 20 | 5500 |
201 | 20 | 5600 |
202 | 20 | 5600 |