다중 행 서브쿼리
SELECT 컬럼 ...
FROM 테이블
WHERE 컬럼 다중_행_연산자 (SELECT 문장 : Sub query문)
......;
- 다중 행 연산자를 이용하여 서브 쿼리의 값이 여러 개 나오는 경우 사용한다.
- 다중 행 연산자 종류
. IN: 서브쿼리 결과 값 중 하나만 일치하면 됨.
. ANY: 서브쿼리 결과 값 중 하나만 일치하면 됨. 단, 부등호를 사용함.
. ALL: 서브쿼리 결과 값 전체와 일치해야 됨.
- ANY, ALL을 이용한 다중 행 서브 쿼리
. 컬럼 > ALL = 컬럼 > MAX(): 서브 쿼리 값 중 가장 큰 값보다 크다.
. 컬럼 < ALL = 컬럼 < MIN(): 서브 쿼리 값 중 가장 작은 값보다 작다.
. 컬럼 > ANY = 컬럼 > MIN(): 서브 쿼리 값 중 가장 작은 값보다 작다.
. 컬럼 < ANY = 컬럼 < MAX(): 서브 쿼리 값 중 가장 큰 값보다 크다 .
다중 열 서브 쿼리
SELECT 컬럼 ...
FROM 테이블
WHERE (컬럼1, 컬럼2, ...) IN (SELECT 문장 : Sub query문)
......;
- 여러 개의 컬럼을 서브 쿼리로 검색한다. 이때, 컬럼의 개수와 서브쿼리 출력 값의 수가 일치해야 한다.
- 대부분 IN연산자를 이용한다.
실습
1. 화학과 학생과 평점이 동일한 학생들을 검색한다.
SELECT sno, sname, major, avr
FROM student
WHERE avr IN (SELECT avr FROM student WHERE major='화학')
AND major != '화학';
2. 화학과 교수와 부임일이 같은 직원을 검색한다.
SELECT eno, ename, hdate
FROM emp
WHERE hdate IN (SELECT hiredate FROM professor WHERE section='화학');
3. 화학과 학생과 같은 학년에서 평점이 동일한 학생들을 검색한다.
SELECT sno, sname, syear, major, avr
FROM student
WHERE syear IN (SELECT syear FROM student WHERE major='화학')
AND avr IN (SELECT avr FROM student WHERE major='화학')
AND major != '화학';
4. 10번 부서 사원들보다 년봉을 많이 받는 사원을 검색한다.
SELECT eno, ename, sal*12+NVL(comm,0) "연봉", dno
FROM emp
WHERE (sal*12+NVL(comm,0)) > ALL (SELECT sal*12+NVL(comm,0) FROM emp WHERE dno=10)
AND dno != 10;
5. 10번 부서 사원들과 업무와 성별이 동시에 일치하는 사원을 검색한다.
SELECT eno, ename, sex, job, dno
FROM emp
WHERE job IN (SELECT job FROM emp WHERE dno = 10)
AND sex IN (SELECT sex FROM emp WHERE dno = 10)
AND dno != 10;
2024.01.24 - [SQL] - SQL select - 실습1
SQL select - 실습1
실습 테이블 테이블 내용 테이블 내용 emp dept salgrade 사원 부서 급여등급 student professor course score scgrade 학생 교수 과목 기말고사점수 점수등급 테이블 상세 구조 emp(사원) dept(부서) salgrade(급여등
backendmaster.tistory.com
<테이블 정보>
'SQL' 카테고리의 다른 글
SQL select - 실습12 (1) | 2024.01.31 |
---|---|
SQL select - 실습11 (0) | 2024.01.31 |
SQL select - 실습9 (2) | 2024.01.30 |
SQL select - 실습8 (0) | 2024.01.30 |
SQL select - 실습7 (0) | 2024.01.30 |