< 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='한국남');
'교육' 카테고리의 다른 글
강남 빅데이터학원 추천 및 소개 (0) | 2018.06.22 |
---|---|
SQL transaction, view 요약 (0) | 2018.06.21 |
SQL subquery 연습문제 (0) | 2018.06.12 |
서울 자바학원 여기서 배우자 (0) | 2018.06.08 |
SQL 내장함수 알아보기 (0) | 2018.06.08 |