1. 화학과 학생과 평점이 동일한 학생들을 검색
SELECT *
FROM 학생
WHERE 평점 IN (
SELECT 평점
FROM 학생
WHERE 학과 = '화학과'
);
2. 화학과 교수와 부임일이 같은 직원을 검색 (직원 테이블이 따로 있다면 직원, 없고 교수만 있다면 교수로 대체)
SELECT *
FROM 직원
WHERE 부임일 IN (
SELECT 부임일
FROM 교수
WHERE 학과 = '화학과'
);
3. 화학과 학생과 같은 학년에서 평점이 동일한 학생들을 검색
- 화학과 학생과 "학년"이 같고, 그 학년 내에서 "평점"도 같은 학생 → 두 컬럼이 함께 일치해야 하므로 다중 열 서브쿼리 사용
SELECT *
FROM 학생
WHERE (학년, 평점) IN (
SELECT 학년, 평점
FROM 학생
WHERE 학과 = '화학과'
);
4. 10번 부서 사원들보다 년봉을 많이 받는 사원을 검색
- "10번 부서의 어떤 사원보다도 많이" → 보통 10번 부서 중 최고 년봉보다 많은 경우로 해석 (> ALL)
SELECT *
FROM 사원
WHERE 년봉 > ALL (
SELECT 년봉
FROM 사원
WHERE 부서번호 = 10
)
AND 부서번호 <> 10;
5. 10번 부서 사원들과 업무와 성별이 동시에 일치하는 사원을 검색
SELECT *
FROM 사원
WHERE (업무, 성별) IN (
SELECT 업무, 성별
FROM 사원
WHERE 부서번호 = 10
)
AND 부서번호 <> 10;
실제 사용 중인 DBMS(Oracle, MySQL, SQL Server 등)에 따라 다중 열 서브쿼리((컬럼1, 컬럼2) IN (...)) 문법 지원 여부가 다릅니다. 예를 들어 MySQL/Oracle은 지원하지만 일부 SQL Server 버전은 지원하지 않을 경우
SELECT *
FROM 사원 s1
WHERE EXISTS (
SELECT 1
FROM 사원 s2
WHERE s2.부서번호 = 10
AND s2.업무 = s1.업무
AND s2.성별 = s1.성별
)
AND s1.부서번호 <> 10;