「副問合せ」の編集履歴(バックアップ)一覧はこちら

副問合せ」(2006/02/05 (日) 04:15:24) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

-7.1 副問合せの使用可能な句 ◆副問合せは次の句の中で使用できる。 +FROM句 +WHERE句 +HAVING句 ---- -7.2 副問合せ使用のガイドライン +副問合せはカッコで囲む。 +副問合せは比較条件の右側に置く(読みやすいようにするため。左側においても問題はない) +単一行比較条件と複数行比較条件の2種類の比較条件を使用できる。 ---- -7.4 副問合せについて ①単一行比較条件と複数行比較条件 比較条件には、比較できる行数の観点から、単一行比較条件と複数行比較条件がある。 【単一行比較条件(<, <=, >, >=, <>, = )】 ◆副問合せの結果、データが1件だけ戻される場合に比較できる。 ◆副問合せの結果としてデータが複数戻されるとエラーになる。 (例)JONESという名前の社員が2人以上いる場合にエラーになる SELECT ename FROM emp WHERE deptno=(SELECT deptno FROM emp WHERE ename='JONES'); 【複数行比較条件(IN, ALL, ANY)】 ◆副問合せの結果、データが1件あるいは複数戻される場合に比較できる。  (上のエラー例の比較演算子=をINにすると、エラーにならず正しく実行できる) ②単一行副問合せと複数行副問合せ 副問合せには、単一行を戻す問合せと複数行を戻す問合せがある。 【単一行副問合せ】 ◆問合せの結果、データが1件だけ戻される。 ◆単一行比較条件、複数行比較条件のどちらでも使える。 (例)単一GY方比較条件を使った単一行副問合せ SELECT ename FROM emp WHERE deptno=(SELECT deptno FROM emp WHERE empno=12345); 【複数行副問合せ】 ◆問合せの結果、データが複数行戻される。 ◆複数行副問合せの中で単一行比較条件を使うとエラーになる。  そのため、必ず複数行比較条件を使わなければならない。 (例)複数行比較条件を使った複数行副問合せ SELECT ename FROM emp WHERE deptno IN (SELECT deptno FROM emp WHERE sal > 3000); ---- -7.8 複数行比較条件ALL, ANY +=ANY(値のリスト)・・・リスト内のいずれかと一致する(INと同じ意味) +>ANY(値のリスト)・・・リストの最小値より大きい。 +<ANY(値のリスト)・・・リストの最大値より小さい。 +>ALL(値のリスト)・・・リストの最大値より大きい。 +<ALL(値のリスト)・・・リストの最小値より小さい。 sal > ANY(2000, 1000, 3000)はsal > 1000 と同じ。 ---- -7.11 副問合せにNULLが戻される場合の比較条件 副問合せからNULLが戻されるとき、NOT IN句や<>ALLの比較条件に注意する。 empno NOT IN(mgr1, mgr2, ..., NULL)となった場合、empno <> mgr1 AND empno <> mgr2 AND ... AND empno <> NULLと同じである。この条件の中ではNULLと比較するので結果はNULLである。また、ANDによって条件を結び付けているので、一つでもNULLがあれば条件全体がNULLになる。 IS NOT NULLを追加してNULLを戻さないようにすればデータは戻される。 ---- -7.18 副問合せの使用法 副問合せはFROM句、WHERE句、HAVING句以外に、次のようなSQL文でも使える。 【UPDATE文 SET句】 以下の文は、社員番号1010の社員のsalを社員番号1020のsalに更新する。 UPDATE emp SET sal=(SELECT sal FROM emp WHERE empno=1020) WHERE empno=1010; 【CREATE TABLE ~AS SELECT構文】 以下の文は、emp表から部門番号30に所属する社員だけのemp30表を作成する。 CREATE TABLE emp30 AS SELECT empno, ename, sal FROM emp WHERE deptno=30; 【INSERT ~ SELECT文】 以下の文は、emp表の社員番号1010の社員データをemp30表へコピーする。 INSERT INTO emp30 SELECT empno, ename, sal FROM emp WHERE empno=1010; 【ビューを作成するCREATE VIEW ~ AS SELECT】 以下の文は、emp表から部門番号30に所属する社員だけのempview30ビューを作成する。 CREATE VIEW empview30 AS SELECT empno, ename, sal FROM emp WHERE deptno=30;
-7.1 副問合せの使用可能な句 ◆副問合せは次の句の中で使用できる。 +FROM句 +WHERE句 +HAVING句 ---- -7.2 副問合せ使用のガイドライン +副問合せはカッコで囲む。 +副問合せは比較条件の右側に置く(読みやすいようにするため。左側においても問題はない) +単一行比較条件と複数行比較条件の2種類の比較条件を使用できる。 ---- -7.4 副問合せについて ①単一行比較条件と複数行比較条件 比較条件には、比較できる行数の観点から、単一行比較条件と複数行比較条件がある。 【単一行比較条件(<, <=, >, >=, <>, = )】 ◆副問合せの結果、データが1件だけ戻される場合に比較できる。 ◆副問合せの結果としてデータが複数戻されるとエラーになる。 (例)JONESという名前の社員が2人以上いる場合にエラーになる SELECT ename FROM emp WHERE deptno=(SELECT deptno FROM emp WHERE ename='JONES'); 【複数行比較条件(IN, ALL, ANY)】 ◆副問合せの結果、データが1件あるいは複数戻される場合に比較できる。  (上のエラー例の比較演算子=をINにすると、エラーにならず正しく実行できる) ②単一行副問合せと複数行副問合せ 副問合せには、単一行を戻す問合せと複数行を戻す問合せがある。 【単一行副問合せ】 ◆問合せの結果、データが1件だけ戻される。 ◆単一行比較条件、複数行比較条件のどちらでも使える。 (例)単一GY方比較条件を使った単一行副問合せ SELECT ename FROM emp WHERE deptno=(SELECT deptno FROM emp WHERE empno=12345); 【複数行副問合せ】 ◆問合せの結果、データが複数行戻される。 ◆複数行副問合せの中で単一行比較条件を使うとエラーになる。  そのため、必ず複数行比較条件を使わなければならない。 (例)複数行比較条件を使った複数行副問合せ SELECT ename FROM emp WHERE deptno IN (SELECT deptno FROM emp WHERE sal > 3000); ---- -7.8 複数行比較条件ALL, ANY +=ANY(値のリスト)・・・リスト内のいずれかと一致する(INと同じ意味) +>ANY(値のリスト)・・・リストの最小値より大きい。 +<ANY(値のリスト)・・・リストの最大値より小さい。 +>ALL(値のリスト)・・・リストの最大値より大きい。 +<ALL(値のリスト)・・・リストの最小値より小さい。 sal > ANY(2000, 1000, 3000)はsal > 1000 と同じ。 ---- -7.11 副問合せにNULLが戻される場合の比較条件 副問合せからNULLが戻されるとき、NOT IN句や<>ALLの比較条件に注意する。 empno NOT IN(mgr1, mgr2, ..., NULL)となった場合、empno <> mgr1 AND empno <> mgr2 AND ... AND empno <> NULLと同じである。この条件の中ではNULLと比較するので結果はNULLである。また、ANDによって条件を結び付けているので、一つでもNULLがあれば条件全体がNULLになる。 IS NOT NULLを追加してNULLを戻さないようにすればデータは戻される。 ---- -7.18 副問合せの使用法 副問合せはFROM句、WHERE句、HAVING句以外に、次のようなSQL文でも使える。 【UPDATE文 SET句】 以下の文は、社員番号1010の社員のsalを社員番号1020のsalに更新する。 UPDATE emp SET sal=(SELECT sal FROM emp WHERE empno=1020) WHERE empno=1010; 【CREATE TABLE ~AS SELECT構文】 以下の文は、emp表から部門番号30に所属する社員だけのemp30表を作成する。 CREATE TABLE emp30 AS SELECT empno, ename, sal FROM emp WHERE deptno=30; 【INSERT ~ SELECT文】 以下の文は、emp表の社員番号1010の社員データをemp30表へコピーする。 INSERT INTO emp30 SELECT empno, ename, sal FROM emp WHERE empno=1010; 【ビューを作成するCREATE VIEW ~ AS SELECT】 以下の文は、emp表から部門番号30に所属する社員だけのempview30ビューを作成する。 CREATE VIEW empview30 AS SELECT * FROM emp WHERE deptno=30;

表示オプション

横に並べて表示:
変化行の前後のみ表示:
人気記事ランキング
目安箱バナー