select안에 select를 사용하는 방법
종류는 3가지
- where
- from
- select
중복의 문제점
- 변경에 대처하기 힘들다
- 메모리 차지
중복 해결법
- 연관 관계를 가진 두 개의 테이블로 분리
- 다른 테이블을 참조하는 키(FK)
- 내 테이블에서 행을 유일하게 결정하는 키(PK)
1. 서브쿼리(where절에 들어가는)
값 1개를 가져온다.
- 댈라스에 사는 직원 출력
select *
from emp
where deptno = 20;

select deptno
from dept
where loc = 'dallas';

select *
from emp
where deptno = (
select deptno
from dept
where loc = 'dallas'
);

- 리서치부 직원 출력
select *
from emp;

select *
from dept;

select *, 'RESEARCH'
from emp
where deptno = (
select deptno
from dept
where dname = 'research'
);

2. 인라인뷰(from절에 들어가는)
테이블 1개를 가져온다
select ename, sal*12 '연봉'
from emp
where 연봉 = 9600; -- 연봉이라는 별칭을 사용하지 못한다.
select e.*
from (
select ename, sal*12 '연봉'
from emp
) e
where e.연봉 = 9600;


- 미리 view를 만들어서 그 view에서 또 연산하는 방법
select *
from (
select avg(sal) 'avg_sal'
from emp
group by deptno
) e
where e.avg_sal > 2000;

3. 스칼라 서브쿼리(select절에 있는) [반복한다]
새 컬럼을 추가하고 그 데이터를 주입할 때
본 테이블의 값에 접근할 수 있다
select이 출력 될 때마다 반복해서 쿼리를 수행한다.
select d.DEPTNO, d.DNAME, d.LOC, (
select count(*)
from emp
where deptno = d.deptno
) '직원수'
from dept d;

- select문은 커서가 한번 이동할 때 보여줄 값을 찾는다
- 이 한번 이동할 때 마다 select절을 추가해서 넣으면
- 컬럼의 값에 접근 가능하다.
select count(deptno)
from emp
group by deptno;

select count(*)
from emp
where deptno = 10;

- 저 숫자 10에 별칭을 넣어 사용할 수 있다

- select문 쿼리 연산 횟수
Share article