hyeonga_code
Database_13_데이터 제한 및 관리_SET, UNION, UNION ALL, INTERSECT, MINUS, ORDER BY 본문
Database_13_데이터 제한 및 관리_SET, UNION, UNION ALL, INTERSECT, MINUS, ORDER BY
hyeonga 2023. 7. 16. 05:59
-- SET 연산자
-- 규칙
-- 비교하는 컬럼의 수가 동일해야 합니다.
-- 컬럼의 수를 일치시키기 위해 숫자형의 경우 상수를 지정할 수 있습니다.
-- 비교하는 컬럼의 데이터 타입이 동일해야 합니다.
-- 컬럼을 여러 개를 비교할 수 있지만 집합이 어지러울 수 있습니다.
-- 결과는 자동으로 정렬되어 출력됩니다.
-- UNION : 합집합 (중복을 제거합니다.)
-- UNION ALL : 합집합 (중복을 제거하지 않습니다.)
-- INTERSECT : 교집합
-- MINUS : 차집합 (A-B != B-A)
-- [ SELECT ] UION/UNION ALL/INTERSECT/MINUS [ SELECT ] ;
-- 실습에 사용할 테이블 정보를 확인합니다.
SELECT *
FROM job_history;
/*
EM_ID START_DATE END_DATE JOB_ID DP_ID
--------------------------------------------------------------------------------------------
102 08/01/13 13/07/24 IT_PROG 60
101 04/09/21 08/10/27 AC_ACCOUNT 110
101 08/10/28 12/03/15 AC_MGR 110
201 11/02/17 14/12/19 MK_REP 20
200 02/09/17 08/06/17 AD_ASST 90
176 13/03/24 13/12/31 SA_REP 80
176 14/01/01 14/12/31 SA_MAN 80
200 09/07/01 13/12/31 AC_ACCOUNT 90
*/
-- UNION
-- 두 질의의 결과를 중복을 제거한 후 반환합니다.
SELECT employee_id id FROM employees
UNION
SELECT employee_id id FROM job_history;
/*
ID
-----
100
101
102
*/
-- UNION ALL
-- 두 질의의 결과를 중복을 포함하여 반환합니다.
SELECT employee_id id, job_id FROM employees
UNION ALL
SELECT employee_id id, job_id FROM job_history;
/*
ID JOB_ID
--------------------------
100 AD_PRES
101 AD_VP
102 AD_VP
...
*/
-- INTERSECT
-- 여러 질의에 공통적인 행을 모두 반환합니다.
SELECT employee_id id FROM employees
INTERSECT
SELECT employee_id FROM job_history;
/*
ID
-----
101
102
176
200
201
*/
-- MINUS
-- 교환 법칙이 성립하지 않습니다.
SELECT employee_id id FROM employees
MINUS
SELECT employee_id FROM job_history;
-- SELECT 문의 일치
-- 컬럼 개수를 일치시키기 위해 숫자열의 경우 상수를 지정할 수 있습니다.
SELECT employee_id, job_id, salary
FROM employees
UNION
SELECT employee_id, job_id, -1
FROM job_history;
-- ORDER BY _ 결과 정렬
-- ASC : 오름차순으로 정렬합니다.
-- DESC : 내림차순으로 정렬합니다.
-- 문장의 마지막에 작성합니다.
-- 따로 작성하지 않는 경우 오름차순이 기본입니다.
SELECT employee_id id, last_name, salary, hire_date, department_id DP_ID
FROM employees
ORDER BY salary DESC;
/*
ID LAST_NAME SALARAY HIER DP_ID
-------------------------------------------------------------------
100 King 24000 02/06/17 90
101 Kochhar 17000 04/09/21 90
...
*/
-- 컬럼을 두 개 이상 정렬을 설정하는 경우 첫 컬럼의 정렬 이후, 동일한 값을 가진 내에서 정렬을 합니다.
-- 컬럼이 두 개 이상 내림차순으로 정렬하는 경우 각각 지정해야합니다.
SELECT employee_id id, last_name, salary, hire_date, department_id DP_ID
FROM employees
ORDER BY department_id DESC, salary DESC;
/*
ID LAST_NAME SALARAY HIER DP_ID
--------------------------------------------------------------------
178 Grant 7000 14/05/24 ( null )
205 Higgins 12000 09/06/07 110
206 Gietz 8300 09/06/07 110
...
*/
-- WHERE 절에는 별칭으로 대신 작성할 수 없습니다.
SELECT employee_id id, last_name, salary, hire_date, department_id DP_ID
FROM employees
WHERE Salary*12 > 120000
ORDER BY department_id DESC, salary DESC;
/*
ID LAST_NAME SALARAY HIER_DATE DP_ID
----------------------------------------------------------------------
205 Higgins 12000 09/06/07 110
100 King 24000 02/06/17 90
...
*/
'Oracle Database' 카테고리의 다른 글
Database_15_문자 조작 함수_CONCAT, SUBSTR, LENGTH, LENGTHB, INSTR, LPAD, RPAD, TRIM, LTRIM, RTRIM (0) | 2023.07.18 |
---|---|
Database_14_문자 함수_DUAL, LOWER, UPPER, INITCAP (0) | 2023.07.17 |
Database_12_데이터 제한 및 관리_논리 조건 연산자 (0) | 2023.07.15 |
Database_11_데이터 제한 및 관리_비교 조건 연산자 (0) | 2023.07.14 |
Database_10_데이터 제한 및 정렬_WHERE 절 (0) | 2023.07.13 |