2. ANY(SOME), ALL, EXISTS
EXISTS : 서브 쿼리가 적어도 하나의 행을 돌려주면 TRUE가 된다.
NOT EXISTS : 서브 쿼리가 적어도 하나의 행을 돌려주지 않으면
TRUE가 된다.
SQL기초강좌_ANY(SOME),ALL,EXISTS
SQL> SELECT dname as "부서명",
deptno as "부서코드"
FROM dept;
부서명 부서코드
-------------- ----------
ACCOUNTING 10
RESEARCH 20
SALES 30
OPERATIONS 40
3. -- 부서테이블(DEPT)에서 사원을 한명이라도 가지고 있는 부서명, 부서코드
를 출력하시오.
SQL> SELECT dname as "부서명",
deptno as "부서코드"
FROM dept
WHERE EXISTS( SELECT * FROM emp
WHERE dept.deptno = emp.deptno);
부서명 부서코드
-------------- ----------
ACCOUNTING 10
RESEARCH 20
SALES 30
SQL기초강좌_ANY(SOME),ALL,EXISTS
ANY(SOME), ALL, EXISTS
4. -- 위 쿼리 구문을 IN연산자를 이용하면 다음과 같다. (IN은 OR로 해석된다.)
-- 대부분 IN을 이용하는 것보다 EXISTS를 사용하는 것이 쿼리 성능면에서
장점을 가진다.
SQL> SELECT dname as "부서명",
deptno as "부서코드"
FROM dept
WHERE deptno in ( SELECT deptno FROM emp
WHERE deptno is not null);
부서명 부서코드
-------------- ----------
ACCOUNTING 10
RESEARCH 20
SALES 30
SQL기초강좌_ANY(SOME),ALL,EXISTS
ANY(SOME), ALL, EXISTS
5. -- myemp1 테이블에서 퇴사자가 존재하면 1’을 출력하라.
SQL> SELECT 1 FROM dual
WHERE EXISTS (SELECT empno FROM myemp1
WHERE outdate is not null);
1
----------
1
SQL기초강좌_ANY(SOME),ALL,EXISTS
ANY(SOME), ALL, EXISTS
6. -- MYEMP테이블에서 job중 ‘ORACLEJAVA’ 가 없으면 1을 출력하시오.
SQL> SELECT 1 FROM dual
WHERE NOT EXISTS ( SELECT job FROM myemp1
WHERE job = 'ORACLEJAVA');
1
----------
1
SQL기초강좌_ANY(SOME),ALL,EXISTS
ANY(SOME), ALL, EXISTS
7. -- 사원테이블(MYEMP1), 수강테이블(MYSUGANG1) 테이블에서 한과목 이
상 수강한 사원의 수는?
SQL> SELECT COUNT(EMPNO) FROM MYEMP1 E
WHERE EXISTS (
SELECT 1 FROM MYSUGANG1 S
WHERE E.EMPNO = S.EMPNO
)
SQL기초강좌_ANY(SOME),ALL,EXISTS
ANY(SOME), ALL, EXISTS
8. -- 강좌테이블(MYLECTURE1)에서 수강생이 한명도 없는 과목이름을 출력하
세요.
SQL> SELECT LECTURE_NM FROM MYLECTURE1 L
WHERE NOT EXISTS (
SELECT 1 FROM MYSUGANG1 S
WHERE L.LECTURE_ID = S.LECTURE_ID
)
LECTURE_NM
------------------
안드로이드과정
SQL기초강좌_ANY(SOME),ALL,EXISTS
ANY(SOME), ALL, EXISTS