아래 내용은 https://mozi.tistory.com/233 블로그를 참고해서 적은 것입니다.
- 서브쿼리는 괄호 사용 !
- 서브쿼리는 단일 행 OR 복수 행 비교 연산자와 함께 사용 가능
- 단, 서브쿼리에서는 ORDER BY를 사용하지 못함
- SELECT 절
- FROM 절
- WHERE 절
- HAVING 절
- ORDER BY 절
- INSERT 문의 VALUES 절
- UPDATE 문의 SET 절
서브쿼리가 단일 행 비교 연산자(=, <, <=, >, >=, <>)와 함께 사용할 때는 서브쿼리의 결과 건수가 반드시 1건 이하여야 합니다 !
IF 결과가 2건 이상인 경우 ERROR 발생 !!
SELECT C1, C2, C3
FROM T1
WHERE C1 = (SELECT C1
FROM T2
WHERE C2 = '3')
ORDER BY C1, C2, C3;
SELECT C1, C2, C3
FROM T1
WHERE C1 <= (SELECT AVG(C1)
FROM T2
WHERE C2 = '3')
ORDER BY C1, C2, C3;
IN: 서브쿼리의 결과에 존재하는 임의의 값과 동일한 조건을 의미
ALL: 서브쿼리의 결과에 존재하는 모든 값을 만족하는 조건을 의미
ANY: 서브쿼리의 결과에 존재하는 어느 하나의 값이라도 만족하는 조건 의미
EXISTS: 서브쿼리의 결과를 만족하는 값이 존재하는지 여부를 확인하는 조건 의미
SELECT C1, C2, C3
FROM T1
WHERE C1 IN (SELECT C1
FROM T2
WHERE C2 = '3')
ORDER BY C1, C2, C3;
SELECT C1, C2, C3
FROM T1
WHERE (C1, C2) IN (SELECT C1, C2
FROM T2
WHERE C2 = '3')
ORDER BY C1, C2, C3
SELECT T1.C1, T1.C2, T1.C3
FROM T1 T1
WHERE (T1.C1, T1.C2) IN (SELECT T2.C1, T2.C2,
FROM T2 T2
WHERE T2.C2 = T1.C2) -- 메인 쿼리의 컬럼을 서브쿼리에 사용
ORDER BY T1.C1, T1.C2, T1.C3
SELECT T1.C1, (SELECT AVG(T2.C1) FROM T2 T2)
FROM T1 T1;
SELECT T1.C1, T2.C1, T2.C2
FROM T1 T1,
(SELECT C1, C2 FROM T2) T2
WHERE T1.C1 = T2.C1;
SELECT T1.C1, T2.C1, T2.C2
FROM T1 T1, T2 T2
WHERE T1.C1 = T2.C1
GROUP BY T1.C1, T2.C1, T2.C2
HAVING AVG(T1.C1) < (SELECT AVG(C1)
FROM T2);
UPDATE T1 T1
SET T1.C1 = (SELECT T2.C1 FROM T2 T2 WHERE T2.C1 = T1.C1);
INSERT INTO T1 (C1, C2, C3) SELECT C1, C2, C3 FROM T2;
INSERT INTO T1 (C1, C2, C3) VALUES ((SELECT C1 FROM T2), (SELECT C2 FROM T2), (SELECT C3 FROM T2));