728x90
SubQuery
1. 단일행 서브쿼리, 2. 다중행 서브쿼리, 3. 다중컬럼 서브쿼리, 4. Inline View, 5. 스칼라 서브쿼리
서브쿼리 : 쿼리문 안에 포함되어 있는 또 하나의 쿼리문
1. 단일행 서브쿼리
서브쿼리의 결과가 1행. 등호, 부등호 이용
ex)
SQL> select ename, hiredate, sal
2 from emp
3 where sal >= (select avg(sal)
4 from emp
5 where hiredate between '1982/01/01' and '1982/12/31');
2. 다중행 서브쿼리
서브쿼리의 결과가 여러 행. in, >all, <all, >any, <any 이용
ex)
where deptno in (select deptno
from emp
where ename like '%T%');
3. 다중컬럼 서브쿼리
서브쿼리의 결과가 여러 컬럼. where (컬럼1, 컬럼2) in (select~~)
ex)
select employee_id, last_name, salary, department_id
from employees e
where (department_id,salary) in (select department_id, max(salary)
from employees
group by department_id)
order by salary desc;
4. Inline View
from 절에 있는 서브쿼리. 자주사용하는 sql등록할때 사용
ex 1 ) inline view 생성
SQL> create view myempview
2 as
3 select deptno,max(sal) maxsal # maxsal : 반드시 alias 명시
4 from emp
5 group by deptno;
select * from myempview; 써보면 그 sql문이 실행된 결과 테이블을 보여준다.
view 연산에는 반드시 alias가 있어야 한다.
ex 2 ) rownum 사용할때 inline view 함께 사용
SQL> select rownum, ename, sal
2 from (select *
3 from emp
4 order by sal desc)
5 where rownum<4;
rownum 은 각 행에 대한 일련번호를 1부터 부여하는 임시 컬럼이다.
이때 order by 절을 이용하면 원하는 대로 정렬이 되지 않는다.
order by 대신 inline view로 구성한 후 작업해야 한다.
5. 스칼라 서브쿼리(Scala Subquery)
select 문에 있는 서브쿼리. 스칼라값(단일값)으로 1행만 반환하는 서브쿼리이다.
ex)
SELECT *, (SELECT COUNT(*) FROM product_reply WHERE product_id=p.product_id) AS reply_count,
(SELECT wish_id FROM wishlist WHERE product_id=p.product_id) AS wish_id,
from product p order by write_date desc
두 테이블에서 각각 reply_count 와 wish_id 한 행씩 가져온 쿼리문이다.
728x90
'Programming > SQL' 카테고리의 다른 글
SQL / 조인 / Inner Join / Outer Join / Non-equi Join / Self Join (2) | 2021.03.16 |
---|---|
SQL / DDL (Data Definition Language) 데이터 정의어 (1) | 2021.03.16 |
SQL / 그룹 연산 함수 / group by / having절 (0) | 2021.03.13 |
SQL / Oracle 오라클 / 함수 정리 (문자/숫자/날짜/변환/조건/NULL) (0) | 2021.03.13 |
SQL / 컬럼 조회 / Where 조건 / Order by 정렬 / Oracle 오라클 (0) | 2021.03.13 |
댓글