- 하나의 쿼리 안에 또 다른 쿼리가 존재
- 두 개 이상의 테이블에서 데이터를 조회할 때 사용하는 쿼리문
- 다른 테이블의 값을 기준으로 한 테이블에서 데이터를 검색할 수 있도록 다른 쿼리 내부에 중첩된 쿼리
- 즉, 다른 쿼리 내부에 포함되어 있는 SELECT 문을 의미
- 서브쿼리를 포함하고 있는 쿼리는 외부쿼리(outer query)
- 서브쿼리는 내부쿼리(inner query)
ㅤ
➡️ 서브쿼리 미사용 풀이
1. '김사랑' 사원의 부서를 먼저 찾기 > '김사랑' 사원의 부서번호(DEPTNO): 20
SELECT * FROM emp; SELECT DEPTNO FROM emp WHERE ENAME = '김사랑';
2. 20번 부서에 근무하는 사원들의 사번, 이름, 부서번호 조회SELECT EMPNO, ENAME, DEPTNO FROM emp WHERE DEPTNO = 20;
SELECT EMPNO, ENAME, DEPTNO FROM emp WHERE DEPTNO = (SELECT DEPTNO FROM emp WHERE ENAME = '김사랑');
위 예제 SELECT 실행을 위해 2개의 쿼리 작성이 필요했으나, "서브쿼리"를 사용하면 1개의 쿼리로 조회 가능!
- *( )내의 쿼리부터 해석함.
ㅤ
SELECT ENAME, JOB, SAL FROM emp WHERE SAL = (SELECT SAL FROM emp WHERE ENAME = '한예슬'); SELECT * FROM dept;
ㅤ
SELECT EMPNO , ENAME , DEPTNO , (SELECT DNAME FROM dept WHERE DEPTNO = emp.DEPTNO) DNAME FROM emp;
- 서브쿼리에는 항상 별칭을 사용해서 구분
- 서브쿼리는 SELECT에도 사용할 수 있음
ㅤ
SELECT * FROM emp WHERE SAL > (SELECT AVG(SAL) FROM emp); -- 오답 > AVG(SAL)은 SELECT 내에 존재해야 함 SELECT * FROM emp WHERE SAL > AVG(SAL);
SELECT SUM(SAL), COUNT(EMPNO), MAX(SAL), MIN(SAL), AVG(SAL)
FROM emp;
ㅤ
UPDATE emp SET SAL = SAL + 100 WHERE DEPTNO = (SELECT DEPTNO FROM dept WHERE LOC = '인천');
ㅤ
SELECT ITEM_CODE , (SELECT ITEM_NAME FROM shop_item WHERE ITEM_CODE = shop_cart.ITEM_CODE) AS ITEM_NAME , (SELECT ITEM_PRICE FROM shop_item WHERE ITEM_CODE = shop_cart.ITEM_CODE) AS ITEM_PRICE , MEMBER_ID , (SELECT MEMBER_NAME FROM shop_member WHERE MEMBER_ID = shop_cart.MEMBER_ID) AS MEMBER_NAME FROM shop_cart;