본문 바로가기
Programming/SQL

SQL / 서브쿼리 / Inline View 인라인뷰 / Scala Subquery 스칼라 서브쿼리

by with chu 2021. 3. 14.
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

댓글