Union합집합 / SubQuery 서브쿼리 /
< Union >
Join => 컬럼을 합치는 것
A 테이블의 a,b,c 컬럼과
B 테이블의 d,e 컬럼을 합쳐서
a , b, c ,d ,e 컬럼으로 보여주는 것
Union => 레코드를 합치는 것 ( 합집합 )
=> 중복되는거 하나로 봄
create table A(
select * from employees
where department_id = 50);
create table B(
select * from employees
where salary < 10000);
재난지원금 주고싶다.
50번 부서사람들 한테 줄꺼고
봉급낮은 사람 줄거다.
=> 합집합 => 중복 X => 중복지급 X
select first_name from A
Union
select first_name from B;
< Union All => 중복되던 말던 그냥 다 보여줘 >
< SubQuery 서브쿼리 >
select - select 서브쿼리
select department_id from employees
where first_name = 'kelly'; => 50
켈리 부서번호를 찾아서 (50이네)
그 부서번호의 다른 사원들 찾아보고싶다
select first_name
from employees
where department_id = 50;
=> 이걸 서브쿼리로 합쳐서 한번에 가능
Select first_name, department_id
from employees
where department_id =
( Select department_id from employees
where first_name = 'kelly' ) ;
=> 괄호처리 를 해서 서브쿼리임을 알리고
먼저 실행하게 한다.
=> 그 결과 값을 넣어서 사용
위와 같이 department_id = 이퀄을 사용할 경우에는
- ( )서브쿼리 리턴값의 개수와 타입은
그걸 받는 개수 타입과 같아야 한다.
예를들어, 부서id 가 50 하나 리턴이면 위의 결과 잘 나오지만
부서 id 가 50, 80 두개를 리턴하는데, = 이퀄이면 오류난다.
=> IN 을 사용한다
< 다중행 서브쿼리 => IN 사용 >
select first_name, deparment_id
from employees
where deparment_id IN
( select department_id
from emplyees
where first_name = peter);
( 몇개 나올지 모를때도 IN 쓰면 다 해결.
반드시 하나만 나오는게 확실할 때만 = 쓴다 )
<* NOT IN > => 없을때 ! ( 여집합 )
< 서브쿼리로도, 데이터 여러개 조회 가능 >
select first_name, department_id
from employees
where ( job_id, department_id ) =
(select job_id, department_id from employees
where first_name = 'kelly');
=> where 조건과 숫자 타입 맞춰서 사용