집합 연산자
집합 연산자의 종류
SELECT ...
[UNION ALL | UNION | INTERSECT | MINUS]
SELECT ...
* 카디널리티 (튜플 수 : 열)
* 데이터베이스 성능 : 마지막 데이터를 읽는 시간
※ 데이터 검색시 데이터 타입이 다를 경우 NULL을 검색조건에 넣어준다.
SELECT eno, ename, NULL hiredate, comm, sal
FROM emp
UNION
SELECT pno, pname, hiredate, NULL,NULL
FROM professor
ORDER BY hiredate;
ENO ENAME HIREDATE COMM SAL
------- ---------- ---------- ---------- ----------
1030 김동평 2002/02/15
1001 송강 2002/08/12
1006 장청아 2003/05/20
1038 하영진 2004/03/02
1008 문규식 2005/02/11
1033 박삭광 2005/07/14
1029 주동평 2006/01/26
ENO ENAME HIREDATE COMM SAL
------- ---------- ---------- ---------- ----------
1016 호연작 2009/10/21
1007 이초아 2010/07/06
1017 최무송 2011/01/24
0001 안영희 0 4800
0120 김경현 2500 4000
0201 안영숙 2000 3900
0202 손하늘 980 3510
예제 1. 2000년 이후에 입사한 사원과 부임한 교수의 명단을 검색한다.
union all - 중복 포함
SELECT pno 번호, pname 이름, hiredate 입사일_부임일
FROM professor
WHERE hiredate >= '2000/01/01'
UNION ALL
SELECT eno, ename, hdate
FROM emp
WHERE hdate >= '2000/01/01';
번호 이름 입사일_부
---------------- ---------- ----------
1001 송강 2002/08/12
1006 장청아 2003/05/20
1007 이초아 2010/07/06
1008 문규식 2005/02/11
1012 이영준 2000/05/18
1016 호연작 2009/10/21
1027 임충원 2001/06/03
union - 중복 제거
SELECT pno 번호, pname 이름, hiredate 입사일_부임일
FROM professor
WHERE hiredate > '2000/01/01'
UNION
SELECT eno, ename, hdate
FROM emp
WHERE hdate > '2000/01/01';
번호 이름 입사일_부
---------------- ---------- ----------
0269 권나현 2015/05/21
0309 김선유 2011/01/03
0401 김진성 2008/03/13
0702 김민지 2017/01/09
0801 천유정 2000/10/09
1001 송강 2002/08/12
1006 장청아 2003/05/20
예제 2. 제갈씨 성을 가진 사원 중에 지원 업무를 하지 않는 사원을 검색한다.
SELECT eno, ename, job
FROM emp
WHERE ename LIKE '제갈%'
MINUS
SELECT eno, ename, job
FROM emp
WHERE job = '지원';
ENO ENAME JOB
------- ---------- -------
2002 제갈민 개발
예제 3. 화학, 물리학과 학생들 중에 학점이 3.0 이상인 학생을 검색한다.
SELECT sno 학번, sname 이름, major 학과, avr 성적
FROM student
WHERE major IN ('화학','물리')
INTERSECT
SELECT sno, sname, major, avr FROM student
WHERE avr >= 3;
학번 이름 학과 성적
------- ---------- ------- ----------
905301 유태지 화학 3.28
914502 문수보 물리 3.33
914504 심빈경 물리 3.33
924501 권석복 물리 4
924505 서찬호 물리 3
925301 김환 화학 3.58
934504 갑서진 물리 3.22
실습
1. 화학과 학생과 교수를 검색한다. (집합 연산자를 이용한다.)
SELECT sno 번호, sname 이름, major 학과
FROM student
WHERE major = '화학'
UNION
SELECT pno, pname, section
FROM professor
WHERE section = '화학';
번호 이름 학과
------- ---------- -------
1001 송강 화학
1004 시진영 화학
1006 장청아 화학
1007 이초아 화학
1008 문규식 화학
905301 유태지 화학
905302 정욱상 화학
2. 정교수의 명단과 모델링이 업무인 직원의 이름, 입사일(부임일)을 검색한다.
SELECT pno 번호, pname 이름, hiredate 입사일, orders 직위_업무
FROM professor
WHERE orders = '정교수'
UNION
SELECT eno, ename, hdate, job
FROM emp
WHERE job = '모델링';
번호 이름 입사일 직위_업무
------- ---------- ---------- ---------
1001 문시현 1991/02/01 모델링
1001 송강 2002/08/12 정교수
1002 김주란 1992/03/03 모델링
1003 양선호 1995/02/21 모델링
1009 이준영 1991/10/04 정교수
1010 이규진 1998/10/07 정교수
1021 왕사진 1997/02/17 정교수
번호 이름 입사일 직위_업무
------- ---------- ---------- ---------
1029 주동평 2006/01/26 정교수
1030 김동평 2002/02/15 정교수
1033 박삭광 2005/07/14 정교수
1035 장관용 1985/07/28 정교수
'SQL 공부 기록' 카테고리의 다른 글
(수정중) SQL 14 - 단일 행 함수 : 숫자, 날짜 함수 (0) | 2021.11.16 |
---|---|
SQL 13 - 단일 행 함수 : 문자 함수 (0) | 2021.11.12 |
SQL 11 - 서브 쿼리 : 다중 행, 다중 열 서브 쿼리 (0) | 2021.11.09 |
SQL 10 - 서브 쿼리 : 단일 행 서브 쿼리 (0) | 2021.11.05 |
SQL 9 - 조인 : 자기 참조 조인(Self join)과 외부조인(Outer join) (0) | 2021.11.04 |