서브 쿼리 리터럴을 적을 자리에 select문을 적는것
원래 쿼리문이란 전체 SQL문을 의미했었다. 현재는 select문을 쿼리문이라고 지칭한다.
서브쿼리는 주로 조건 절에 쓰이고 from절에서 사용시 인라인 뷰(Inline View)라고 부른다.
단일 행 서브쿼리는 본문과 서브쿼리 결과물이 1:1 대응관계가 되어야 한다.
또한 단일행 연산자는 일반 비교 연산자와 같은 =, <, >, <=, >=, !=를 사용한다. 만약 서브쿼리문에서 2개 이상의 값이 출력된다면 2개 이상의 행이 리턴되었다고 에러가 발생한다.
서브쿼리의 갯수에는 한계가 없어 필요한만큼 뒤에 적어주면 된다.
1. 김혁윤 보다 평점이 우수한 학생의 학번과 이름을 검색한다.
2. 권현과 동일한 학년 학생 중에 평점이 강은혜와 동일한 학생을 검색한다.
3. 이학수학 과목과 동일한 학점수인 과목을 검색한다.
4. 타 학과에 송강 교수와 동일한 지위의 교수 명단을 검색한다.
5. 제갈민보다 나중에 부임한 교수의 명단을 검색한다.
6. 강태용보다 일반 화학 과목의 점수가 더 낮은 학생의 명단을 학점과 검색한다.
다중행, 다중열 서브 쿼리
다중 행 서브 쿼리는 여러 값을 비교하는 연산자를 사용한다. IN ANY ALL이 있는데 IN은 출력된 값중 하나이상 일치하면 참, ANY는 출력된 값중 맞는조건이 하나이상 있으면 참, ALL은 출력된 값이 모두 조건과 맞아야 참이다.
IN은 =와 대치가 가능하다. ANY ALL은 부등호와 사용이 가능한데 몇가지 경우는 그룹함수로 변경이 가능하니 아래 표를 참고 하도록 하자.
컬럼 > ALL |
-> |
컬럼 > MAX() |
가장 큰 값보다 크다 |
컬럼 < ALL |
-> |
컬럼 < MIN() |
가장 작은 값보다 작다 |
컬럼 > ANY |
-> |
컬럼 > MAX() |
가장 작은 값보다 크다 |
컬럼 < ANY |
-> |
컬럼 < MIN() |
가장 큰 값보다 작다 |
다중 열 서브쿼리는 부등호를 사용하지 않고 IN만을 사용한다. 2개 이상의 컬럼값을 비교하여 출력하는 것이다.
다중 열 서브쿼리는 주의해야 할 점이 비교 기준이 중복이 되는 경우에는 값이 완전히 달라질수있다. 다음 예제의 결과를 보자
1. 부서번호와 업무번호가 동시에 같은 사원들을 출력하고 2. 부서번호와 업무번호가 따로 같은 사원들을 출력한다.
1. 화학과 학생의 평점이 동일한 학생들을 검색한다.
2. 화학과 교수와 부임일이 같은 직원을 검색한다.
3. 화학과 학생과 같은 학년에서 평점이 동일한 학생들을 검색한다.
4. 10번 부서 사원들보다 연봉을 많이 받는 사원을 검색한다.
5. 10번 부서 사원들과 업무와 성별이 동시에 일치하는 사원을 검색한다.
'교육 > SQL' 카테고리의 다른 글
Day 17 (SQL) (0) | 2019.12.10 |
---|---|
Day 16 (SQL) (0) | 2019.12.09 |
Day 14 (SQL) (0) | 2019.12.05 |
Day 13 (SQL) (0) | 2019.12.04 |
Day 12(SQL) (0) | 2019.12.03 |