Sub query

2020. 5. 8. 14:00DB

sub query

- query 안에 다른 query가 포함되는 것

- sql에서는 반드시 () 안에 포함되어야 함

- 메인 쿼리가 수행되기 전에 한번만 실행됨

- 보농은 select구문에 where절이나 from절에서 사용됨

 

1. 단일행 서브쿼리

-> 서브쿼리의 결과가 하나의 행이라서 단일행 연산자를 사용할 수 있는 경우

 

ex1) emp에서 ename이 scott인 사원과 동일한 loc에 근무중인 사원의 ename과 sal의 값을 조회

ename 과 sal은 emp에 존재

loc는 dept테이블에 존재

 

select 

from emp, dept

where emp.deptno = dept.deptno and ename = 'SCOTT';

 

ex) emp 테이블에서 dept테이블의 loc가 dallas인 사원의 ename과 deptno를 조회

- 여러 테이블의 정보를 이용하더라도 조회하고자 하는 열이 하나의 테이블에 전부 존재한다면 서브 쿼리로 해결 가능

서브쿼리

ex3) emp에서 sal이 ename이 miller인 사원의 sal이상인 데이터의 ename과 sal조회

 

ex4) emp에서 sal 값이 평균이상인 데이터의 ename과 sal을 조회

 

ex5) dname이 sales인 사원의 ename과 job 그리고 sal을 조회

- dname은 dept테이블에 존재하고 ename과 job 그리고 sal은 emp테이블에 존재

- 테이블 이름이 2개가 나오면 join이나 서브쿼리로 해결

- 조회하고자 하는 컬럼이 하나의 테이블에서 존재하면 서브쿼리로 해결 가능

- 조회하고자 하는 컬럼이 두개의 테이블에 나뉘어 존재하면 join으로 해결

- 2개의 테이블을 가지고 작업을 할 때는 동일한 의미를 갖는 컬럼을 이용해야 함.

 

 

ex5) ename이 scott인 사원과 동일한 loc에 근무하는 사원의 ename과 sal 조회

- loc는 dept에 존재

- emp와 dept는 deptno를 같이 소유

 

다중행 서브 쿼리

- 서브 쿼리의 결과가 0개나 2개 이상이어서 단일 행 연산자로 비교 불가능한 서브쿼리

- 이때는 in, not in, any, all 등의 다중 행 연산자를 사용해야 함.

 

ex) loc가 dallas이거나 chicago인 곳에서 근무하는 사원들의 Ename과 job을 조회

IN 사용

ex2) emp에서 depno가 30인 사원들 전체보다 sal이 더 많은 사원의 ename과 sal을 조회

 

all 대신 서브쿼리에 max,min사용해도 됨

 

'DB' 카테고리의 다른 글

SQL 분류  (0) 2020.05.11
DB 설계  (0) 2020.05.08
JOIN  (0) 2020.05.07
HAVING  (0) 2020.05.07
SQL 개요2  (0) 2020.05.07