서브쿼리(SUBQUERY)의 추가내용_01
1편 기초 : https://seungsami.tistory.com/62
1 2 3 4 5 6 7 8 9 10 11 | --아래 두개의 쿼리문은 같은 결과를 가져온다. SELECT * FROM EMP WHERE SAL >ALL (SELECT AVG(SAL) FROM EMP GROUP BY DEPTNO) ; SELECT * FROM EMP WHERE SAL > (SELECT MAX(AVG(SAL)) FROM EMP GROUP BY DEPTNO) ; | cs |
두개이상의 컬럼을 비교할 수 있는 서브쿼리의 예는 다음과 같다.
1 2 3 4 5 | SELECT * FROM EMP WHERE (DEPTNO,SAL) IN (SELECT DEPTNO, MIN(SAL) FROM EMP GROUP BY DEPTNO) ; | cs |
이와 같이 할 경우 두개의 행을 비교 가능하다.
(MULTIPLE COLUMN SUBQUERY)
서브쿼리를 이용해서 JOIN을 할경우 다음의 예시를 보자
1 2 3 4 5 6 7 8 | SELECT * FROM EMP E, (SELECT DEPTNO, AVG(SAL) AS AVG FROM EMP GROUP BY DEPTNO) A WHERE E.DEPTNO = A.DEPTNO AND E.SAL > A.AVG; --A.AVG(SAL)을 쓰는 경우 에러가 발생하는데, 그 이유는 SAL이라는 것 자체는 서브쿼리에 정의되어있지 않기 때문 | cs |
아래 예시를 참고하자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | SELECT * FROM EMP WHERE SAL >2000; SELECT * FROM EMP E WHERE SAL > (SELECT AVG(SAL) FROM EMP WHERE DEPTNO = E.DEPTNO); --위의 경우 서브쿼리의 결과가 많을 경우 시간이 오래걸릴 수 있다. --하지만 걸리는 시간은 처음 나올 50개의 행만 적용된다. 그러므로 시간이 오래 걸릴 필요는 없다 SELECT * FROM SALES S ,(SELECT PROD_ID, AVG(AMOUNT_SOLD) AS AVG FROM SALES GROUP BY PROD_ID) A WHERE S.PROD_ID = A.PROD_ID AND S.AMOUNT_SOLD > A.AVG; --FROM 처리시간이 조금더 길지라도 결과를 산출해내기만 할때 사용하는 방식이다.(평균값[AVG(AMOUNT_SOLD)]을 화면으로 가지고 나올 수가 있다..) SELECT * FROM SALES S WHERE AMOUNT_SOLD > (SELECT AVG(AMOUNT_SOLD) FROM SALES WHERE PROD_ID = S.PROD_ID); --결과를 보고 처리를 해야할때 사용하는 방식이다.(평균값[AVG(AMOUNT_SOLD)]을 화면으로 가지고 나올 수가 없다.) --화면에 무엇을 표현하고 싶냐에 따라 사용하는 방법이 달라진다. 위의 방법 이외에도 여러가지 방법이 있다. | cs |
다음 두개의 쿼리문의 결과는 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | SELECT * FROM SALES S ,(SELECT PROD_ID, AVG(AMOUNT_SOLD) AS AVG FROM SALES GROUP BY PROD_ID) A WHERE S.PROD_ID = A.PROD_ID AND S.AMOUNT_SOLD > A.AVG; SELECT * FROM SALES S WHERE AMOUNT_SOLD > (SELECT AVG(AMOUNT_SOLD) FROM SALES WHERE PROD_ID = S.PROD_ID); | cs |
SQL을 배운지 얼마 되지 않아 잘못된 내용이 있을 수 있습니다. 틀린 내용이있다면, 댓글로 달아주세요.
'DATABASE(oracleDB 11g) > SQL' 카테고리의 다른 글
[SQL]서브쿼리(SUBQUERY)의 종류 (0) | 2019.02.08 |
---|---|
[SQL]이름 지정 규칙 (0) | 2019.02.08 |
[SQL]계정 생성 및 삭제(oracle DB 11g) (0) | 2019.02.01 |
[SQL]VIEW 의 기초 (0) | 2019.02.01 |
[SQL]제약 조건(Constraints) (1) | 2019.02.01 |