중첩질의문
중첩 질의문
: 하나의 SQL 문의 결과를 다른 SQL 문에 전달함
: 두 개의 SQL 문을 하나의 SQL 로 처리함
조인 질의문과 중첩 질의문
: 이론적으로 중첩 질의문은 조인 구문과 표현능력이 동일함
중첩질의문의 표현
: SQL 문 안에 SQL 문이 포함되어 있음
예)
select dname from department
where department.dno = (select dno from employee where employee.eno=103);
단일행 서브 쿼리
: 서브 쿼리의 결과로 하나의 튜플만이 반환 됨
서브 쿼리의 검색 조건이 후보키에 연관되어 있을 경우가 많음
예) 사원 번호 110 번과 같은 부서에 근무 하는 사원들의 사원 번호 와 부서번호 검색
사원번호가 기본키 임으로 사원번호 110 번은 1 명 밖에 없음
select eno, dno from employee
where employee.dno=(select dno from employee where employee.eno=110);
point) =, <, <=, >, >=, != 등을 사용할 수 있음
다중행 서브 쿼리
: 서브 쿼리의 결과로 여러 개의 튜플들이 반환 됨
단일행(결과로 하나의 튜플만이 반환되는) 비교 연산자 사용 시 오류
다중행 비교 연산자
IN | 속성값이 여러 값들 중 하나이기만 하면 참 “= OR”의 의미 |
ANY 또는 SOME | 메인 쿼리 비교 조건에서 서브 쿼리의 결과와 하나라도 일치하면 참 IN 과의 차이점은 >, >=, <=, < 과 같은 범위 비교와도 같이 사용이 가능함 = ANY 와 = SOME 은 IN 과 같은 의미임 |
ALL | 메인 쿼리 비교 조건에서 서브 쿼리의 결과와 모두 일치하면 참(true) |
EXISTS | 서브 쿼리의 결과가 하나라도 존재하면 참이 되는 연산자 |
NOT EXISTS | EXISTS 와 상반되는 연산자 |
in / any or some / all / exists 활용
다중행 서브쿼리 : IN
예) 봉급이 500이상인 사원과 같은 부서에 근무하는 사원들의 이름, 봉급, 부서번호 구하기
select ename, salary, dno from employee
where dno in (select dno from employee where salary>=500);
다중행 서브 쿼리 : ANY
예) 부서번호 20에 근무하는 한 직우너의 봉급 보다 많은 봉급을 받는 직원들의 이름 , 봉급, 부서번호를 출력
select ename, salary, dno from employee
where salary > any(select salary from employee where dno=20);
다중행 서브쿼리 : ALL
예) 부서번호 10에 근무하는 모든 직원들의 봉급 보다 많은 봉급을 받는 직원들의 이름 , 봉급, 부서번호 출력
select ename, salary dno from employee
where salary> all ( select salary from employee where dno=10);
다중행 서브쿼리 : exists
예) 봉급과 커미션의 합이 500 이 넘는 사원 이 존재하면 모든 사원의 이름 출력
select ename from employee
where exists(select * from employee where salary+commission>500);
tip) 다중행 서브쿼리 - 잘 실수하는 오류
예) 봉급이 500 이상인 사원과 같은 부서에 근무 하는 사원들의 이름 , 봉급 ,부서번호 구하기
select ename, salary, dno from employee
where dno=(select dno from employee where salary >=500);
=> 오류 이유 : = 연산자 사용
select ename, salary, dno from employee
where dno in (select dno from employee where saalary>=500);
=> =연산자 대신 in 을 쓰면 해결됨.
'Programming > SQL' 카테고리의 다른 글
[SQL] 트랜잭션(Transaction) - 트랜잭션의 활용 / 특성 / ACID (0) | 2020.12.17 |
---|---|
[SQL] 다양한 중첩 질의문 - 다중 컬럼 서브쿼리 / 상호 연관 서브쿼리 / 중첩질의문 주의점 (0) | 2020.12.17 |
[SQL/실습] 테이블 조인 - 연습문제 풀어보기 (답안) (0) | 2020.12.17 |
[SQL/실습] 테이블 조인 - 연습문제 풀어보기 (문제) (0) | 2020.12.17 |
[SQL] 조인 질의문 - 간단한 조인, 다양한 조인 ( 카티션프로덕트 / 동등조인 / 자연조인 / 쎄타조인 / 셀프조인 / 외부조인 ) (0) | 2020.12.17 |