본문 바로가기
SQL

SQL select - 실습10

by hj_it 2024. 1. 31.
다중 행 서브쿼리
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