[09단원] 서브쿼리
2021. 9. 13. 20:08
728x90
교재명 : Do it! 오라클로 배우는 데이터베이스 입문 (이지스퍼블리싱 / 이지훈 지음)
[ Q1 ]
[ A1 ]
SELECT E.JOB, E.EMPNO, E.ENAME, E.SAL, E.DEPTNO, D.DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
AND JOB = (SELECT JOB
FROM EMP
WHERE ENAME = 'ALLEN');
[ Q2 ]
[ A2 ]
SELECT E.EMPNO, E.ENAME, D.DNAME, E.HIREDATE, D.LOC, E.SAL, S.GRADE
FROM EMP E, DEPT D, SALGRADE S
WHERE E.DEPTNO = D.DEPTNO
AND E.SAL BETWEEN S.LOSAL AND S.HISAL
AND SAL > (SELECT AVG(SAL)
FROM EMP)
ORDER BY E.SAL DESC, E.EMPNO;
오답: SALGRADE TABLE을 사용안함
SELECT ...
FROM EMP E JOIN DEPT D ON E.DEPTNO = D.DEPTNO
WHERE E.SAL > (SELECT AVG(SAL) FROM EMP)
ORDER BY E.SAL DESC, E.EMPNO ASC
[ Q3 ]
[ A3 ]
*서브쿼리 안에 JOB 조회할 때, DISTINCT 를 사용하여 중복 제거를 해주어야 메인쿼리의 JOB와 비교할 수 있음 (데이터 갯수가 일치해야 함)
SELECT E.EMPNO, E.ENAME, E.JOB, E.DEPTNO, D.DNAME, D.LOC
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
AND E.DEPTNO = 10
AND JOB NOT IN (SELECT DISTINCT JOB
FROM EMP
WHERE DEPTNO = 30);
[ Q4 ]
[ A4 ]
-- 다중행 함수 사용하지 않는 방법
SELECT E.EMPNO, E.ENAME, E.SAL, S.GRADE
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL
AND SAL > (SELECT MAX(SAL)
FROM EMP
WHERE JOB = 'SALESMAN')
ORDER BY E.EMPNO;
--다중행 함수 사용하는 방법
SELECT E.EMPNO, E.ENAME, E.SAL, S.GRADE
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL
AND SAL > ALL (SELECT DISTINCT SAL
FROM EMP
WHERE JOB = 'SALESMAN')
ORDER BY E.EMPNO;
[ 참고자료 ]
728x90
'SQL > Oracle SQL' 카테고리의 다른 글
[08단원] 조인(JOIN) (0) | 2021.09.13 |
---|---|
[07단원] 다중행 함수와 데이터 그룹화 (0) | 2021.09.11 |
[06단원] 데이터 처리와 가공 (0) | 2021.08.30 |
[05단원] Where절과 연산자 (0) | 2021.08.30 |