SQL union, merge, subquery 명령어 요약

728x90
< Union : 구조가 일치하는 2개 이상의 테이블 자료 합치는 것 >
-- 고객을 관리하는 직원 목록 출력
select sawon_no, sawon_name from sawon
where sawon_no in(select sawon_no from sawon);

select sawon_no, sawon_name from sawon
where sawon_no in(select sawon_no from sawon intersect select gogek_damsano from gogek);

-- 고객을 관리하지 않는 직원 목록 출력
select sawon_no, sawon_name from sawon
where sawon_no in(select sawon_no from sawon minus
select gogek_damsano from gogek);

< merge : 구조가 일치하는 2개 이상의 테이블 자료를 하나로 합치기 >
create table msa1 as select sawon_no, sawon_name, sawon_pay from sawon where sawon_no <= 10; -- 이미 있는 테이블을 활용하여 새로운 테이블 작성

create table msa2 as select sawon_no, sawon_name, sawon_pay from sawon where sawon_no <= 10 and sawon_jik='사원';
select * from msa2;

insert into msa1 values(100, '김밥', 8000);
insert into msa2 values(200, '김밥', 6700);

select * from msa1;
select * from msa2;

merge into msa1 a using msa2 b on(a.sawon_no = b.sawon_no)
when matched then update set a.sawon_name = b.sawon_name,
a.sawon_pay = b.sawon_pay
when not matched then insert values(b.sawon_no,b.sawon_name,
b.sawon_pay);

select * from msa1;

< subquery : 질의 속에 질의가 있는 형태(안쪽 질의의 결과를 바깥쪽에서 참조) >
-- 직원중 이순신과 직급이 같은 자료 출력
select * from sawon;
select * from sawon where sawon_jik='과장';
select * from sawon where sawon_jik=(select sawon_jik from sawon where sawon_name='이순신');

-- 직급이 대리 중에 가장 먼저 입사한 자료는?
select min(sawon_ibsail) from sawon where sawon_jik='대리';
select * from sawon where sawon_ibsail='10/11/4';

select * from sawon
where sawon_ibsail=(select min(Sawon_ibsail) from sawon
where sawon_jik='대리'); -- 잘못된 예시 10.11.4에 입사한 모든 직원이 대상

select * from sawon
where sawon_jik='대리' and
sawon_ibsail=(select min(sawon_ibsail)from sawon
where sawon_jik='대리'); -- 옳음

-- 담당 직원이 '한국남'인 고객 자료 출력
select * from gogek where gogek_damsano=(select
sawon_no from sawon where sawon_name='한국남');






본 포스팅은 IT 교육기관인 KIC 캠퍼스의 지원을 받은 리포트입니다.
본문은 '남궁성, JAVA의 정석 3rd Edition' 교재를 공부하면서 주요 내용을 요약하고 있습니다.
혹시 잘못되거나 문제 소지시 댓글 남겨주시면 조치하겠습니다.



728x90