Oracle SQL(6)
サブクエリ以前に学習された結合は、1つ以上のテーブルで必要なデータをクエリーする際に使用される方法です. サブクエリは、SELECTが必要なデータをクエリできない場合に使用する方法であり、複数のSELECT文を1つの実行可能なSQL文に統合して必要なデータをクエリできます. -基本構文外部クエリをMainquery、内部クエリをSubqueryと呼びます. 子キュリーではORDER BY節は使用できません. サブクエリは、SELECT、FROM、WHERE、HAVING、ORDER BY、UPDATE、INSERT INTOセクションにも使用できます. サブクエリのタイプ
タイプ説明使用可能な演算子1行サブクエリの実行結果は、=、>、>=、<、<=、!=の1行を返します.同様の比較演算子は、サブクエリサブクエリの実行結果を繰り返して複数行を返します.IN、ANY、ALL、EXIST演算子
1行サブクエリ単行サブクエリとは、サブクエリを実行し、ローを返さなければならないサブクエリのことです. プライマリ・キーを使用するか、MAX、MIN、SUMなどの関数のグループを使用して検索する場合は、1行演算子を使用してプライマリ・クエリと演算する必要があります. 複数行のサブクエリは、サブクエリを実行し、結果が1行または複数行の場合に使用されるサブクエリです. タイプ説明INマスタークエリとサブクエリをIN演算子で比較します.サブクエリの結果値が複数の場合に使用します.ANYANY演算子は、複数行のサブクエリで>または<等比較演算子を使用するために使用され、検索条件が一致する場合は真です.ALLALL演算子は、複数行のサブクエリで>または<等比較演算子を使用するために使用され、検索条件のすべての値が一致する場合は真です.EXISTサブクエリの戻り値が存在する場合はプライマリクエリが実行され、戻り値がない場合はプライマリクエリは実行されません.
IN演算子 IN演算子は、サブクエリの戻り値が複数で、メインクエリと等しい演算子で比較するときに使用される演算子です. 行のサブクエリで、>または<等比演算子を使用します. ALL演算子は、サブクエリで返されるすべてのローの条件が満たされる必要があることを意味します. メインクエリでは、クエリがタイプの説明>ALL(サブクエリ)サブクエリよりも大きいすべてのデータが返されます.これは、サブツリーが返す最大値よりも大きいデータをクエリーするときに使用されるサブクエリーです.
これは、を返すすべてのローについて、1つ以上の条件を満たすだけでよいことを意味する. プライマリ・クエリーでは、タイプの説明>ANY(サブクエリー)サブクエリーで1つ以上の条件が一致するビッグデータを返すだけです.これは、サブツリーが返す最小値よりも大きいデータをクエリーするときに使用されるサブクエリーです.<プライマリ・クエリーでは、ANY(サブクエリー)サブクエリーで1つ以上の条件が一致する小さなデータを返すだけです.最終的には、サブクエリが返す最大値より小さいデータをクエリするときに使用されるサブクエリです.サブクエリに結果があるかどうかを判断する演算子. サブクエリの結果がない場合、FALSEが返されます. がある場合、TRUEに戻る. サブクエリで複数のカラム値を検索し、メインクエリ条件セクションと比較したサブクエリ. 列をペアにして同時に比較するペア方式と、列ごとに比較してAND演算処理を行う非ペア方式がある. FROMセクションではサブクエリも使用できます.これにより、FROMセクションで使用されるサブクエリはインラインビューと呼ばれます. サブクエリは、仮想テーブルを返すために使用されます. これは、 FROMセクションで使用されるサブクエリがビューと類似しているためです.
SELECT 컬럼
FROM 테이블
WHERE 컬럼명 연산자 (
SELECT 컬럼
FROM 테이블
[WHERE 조건]);
SELECT sal
FROM emp
WHERE ename = 'SMITH'; -- 800
-- +
SELECT ename, sal
FROM emp
WHERE sal < 800;
-- 위 두 개의 쿼리를 합친 것이 아래의 하나의 쿼리문이다.
SELECT ename, sal
FROM emp
WHERE sal < (
SELECT sal
FROM emp
WHERE ename = 'SMITH');
タイプ説明使用可能な演算子1行サブクエリの実行結果は、=、>、>=、<、<=、!=の1行を返します.同様の比較演算子は、サブクエリサブクエリの実行結果を繰り返して複数行を返します.IN、ANY、ALL、EXIST演算子
1行サブクエリ
SELECT ename
FROM emp
WHERE ename != 'SMITH'
AND deptno = (
SELECT deptno
FROM emp
WHERE ename = 'SMITH');
-- 사원들의 평균 월급보다 급여가 높은 사람의 이름과 월급 출력
SELECT ename, sal
FROM emp
WHERE sal > (
SELECT AVG(sal)
FROM emp);
-- 부서번호가 10번인 부서의 최대월급을 받는 사원이름과 월급 출력
SELECT ename, sal
FROM emp
WHERE sal = (
SELECT MAX(sal)
FROM emp
WHERE deptno = 10);
-- 여러 개의 서브 쿼리 사용 가능
SELECT empno, ename, job, hiredate, sal
FROM emp
WHERE job = (SELECT job
FROM emp
WHERE empno = 7521)
AND
sal > (
SELECT sal
FROM emp
WHERE empno = 7934);
SELECT deptno, MIN(sal)
FROM emp
GROUP BY deptno
HAVING MIN(sal) >
(SELECT MIN(sal)
FROM emp
WHERE deptno = 20)
複数行サブクエリIN演算子
SELECT ename, sal
FROM emp
WHERE sal IN (
SELECT sal
FROM emp
WHERE ename IN ('SMITH', 'ALLEN'));
SELECT ename, sal
FROM emp
WHERE sal IN
(SELECT sal
FROM emp
WHERE ename IN ('WARD', 'SMITH'));
SELECT ename, deptno, sal
FROM emp e
WHERE deptno IN (
SELECT deptno
FROM emp
WHERE sal >= 1000);
SELECT empno, ename, job, hiredate, sal, deptno
FROM emp
WHERE sal IN (
SELECT MIN(sal)
FROM emp
GROUP BY job);
ALL演算子SELECT empno, ename, sal
FROM emp
WHERE sal < ALL (
SELECT sal
FROM emp
WHERE job = 'MANAGER');
ANY演算子これは、
SELECT empno, ename, sal
FROM emp
WHERE sal < ANY (
SELECT sal
FROM emp
WHERE job = 'MANAGER');
EXISTS演算子SELECT *
FROM emp
WHERE EXISTS ( SELECT empno
FROM emp
WHERE comm IS NOT NULL);
複数列サブクエリ-- pairwise
SELECT deptno, empno, ename, sal
FROM emp
WHERE (deptno, sal) IN (SELECT deptno, MAX(sal)
FROM emp
GROUP BY deptno);
行内ビューSELECT 컬럼
FROM (서브쿼리) alias
WHERE 조건식;
SELECT e.deptno, total_sum, total_avg, cnt
FROM (SELECT deptno, sum(sal) total_sum, avg(sal) total_avg, count(*) cnt
FROM emp
GROUP BY deptno) e, dept d
WHERE e.deptno = d.deptno;
Reference
この問題について(Oracle SQL(6)), 我々は、より多くの情報をここで見つけました https://velog.io/@sparkbosing/Oracle-SQL6テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol