1. UNION
UNION은 합집합과 같습니다.
SELECT DEPTNO FROM DEPT UNION SELECT DEPTNO FROM EMP;
중복값을 제외한 두 테이블에서 출력하고자 하는 컬럼의 값을 모두 출력합니다.
2. UNION ALL
UNION ALL의 경우 중복을 허용하는 합집합입니다.
정확히 합집합보다는 더하기에 가깝습니다.
중복된 값도 출력합니다.
SELECT DEPTNO FROM DEPT UNION ALL SELECT DEPTNO FROM EMP;
모든 값이 출력이 됩니다.
3. INTERSECT
INTERSECT는 교집합과 같습니다.
중복되는 값들만 출력합니다
SELECT DEPTNO FROM DEPT INTERSECT SELECT DEPTNO FROM EMP;
4. MINUS
MINUS는 차집합과 같으며 UNION ALL이 더하기(PLUS)와 같다면 MINUS는 말 그대로 빼기와 같습니다.
SELECT DEPTNO FROM DEPT MINUS SELECT DEPTNO FROM EMP;
--Q) 부서별 월급 합계를 구하자.
SELECT DEPTNO, SUM(SAL) FROM EMP GROUP BY DEPTNO;
--Q) 직업별 월급 평균을 구하자.
SELECT JOB, AVG(SAL) FROM EMP GROUP BY JOB;
--Q) 직업이 PRESIDENT가 아닌 것들의 평균 월급을 구하자.
SELECT JOB, AVG(SAL) FROM EMP WHERE JOB != 'PRESIDENT' GROUP BY JOB;
SELECT JOB, AVG(SAL) FROM EMP WHERE JOB <> 'PRESIDENT' GROUP BY JOB;
!=와 <> 두 가지 모두 다 사용 가능합니다.
3. 그룹함수
그룹함수에 조건문을 줄 때는 WHERE이 아닌 HAVING을 사용합니다.
WHERE과 HAVING의 차이는 그룹함수가 있고 없고 차이입니다.
--Q) 부서별 월급 합계를 구하자.(단, 월급의 합계가 7000 이상인 부서만 출력하자.)
SELECT DEPTNO, SUM(SAL) FROM EMP
HAVING SUM(SAL) >= 7000
GROUP BY DEPTNO;
3-1. ROLLUP
ROLLUP은 순차적으로 중간 합계를 출력합니다.
ROLLUP함수 안 컬럼의 순서가 바뀌면 결과도 바뀌게 됩니다.
ROLLUP의 출력 순서
--EX)
SELECT A, B, COUNT(*) FROM TMP GROUP BY ROLLUP(A,B);
A, B, COUNT(*)
UNION ALL
A, NULL, COUNT(8)
UNION ALL
NULL, NULL, COUNT(*)
--A컬럼, B컬럼에 대한 카운트 / A컬럼에 대한 카운트 / 전체 카운트
--Q) 직업, 부서 별 월급의 합을 출력하자.
SELECT JOB, DEPTNO, SUM(SAL)
FROM EMP
GROUP BY ROLLUP(JOB, DEPTNO);
3-2. CUBE
CUBE는 모든 중간합께를 출력합니다.
CUBE의 출력 순서
SELECT A,B,COUNT(*) FROM TMP GROUP BY CUBE(A,B);
NULL, NULL, COUNT(*)
UNION ALL
NULL, B, COUNT(*)
UNION ALL
A, NULL, COUNT(*)
UNION ALL
A, B, COUNT(*)
--Q) 직업, 부서 별 월급의 합을 출력하자.(위와 같은 문제)
SELECT JOB, DEPTNO, SUM(SAL)
FROM EMP
GROUP BY CUBE(JOB, DEPTNO);
3-3. GROUPING SET
GROUPING SET은 원하는 결과를 출력하기 위한 셋팅입니다.
--Q) 직업, 부서 별 월급의 합을 출력하자.(위와 같은 문제)
SELECT JOB, DEPTNO, SUM(SAL)
FROM EMP
GROUP BY GROUPING SETS(ROLLUP(JOB,DEPTNO), DEPTNO);
4. ORDER BY
ORDER BY는 쿼리의 결과를 정렬하기 위해 사용합니다.
ASC -> 오름차순
DESC -> 내림차순
생략할 경우 자동으로 오름차순
SELECT 컬럼
FROM 테이블
WHERE 조건
GROUP BY 컬럼
ORDER BY 컬럼
--이런 형식으로 사용함
--Q) 월급을 기준으로 오름차순 정렬하여, EMP 테이블의 모든 것을 출력하자.
SELECT * FROM EMP ORDER BY SAL;
해당 코드와 같이 컬럼 명을 입력해도 되지만 컬럼이 위치한 순서를 입력해도 가능함.
SELECT * FROM EMP ORDER BY 6;
두 코드 모두 ORDER BY 컬럼 뒤에 오름차순 내림차순이 생략되어 자동으로 오름차순임 ASC를 써도 결과가 같음.
내림 차순으로 정렬하고자 하면 DESC 사용
SELECT * FROM EMP ORDER BY SAL DESC;
'RDB > Oracle' 카테고리의 다른 글
[ORACLE] 정렬 - ORDER BY (0) | 2022.01.02 |
---|---|
[ORACLE] 그룹함수 - ROLLUP, CUBE, GROUPING SET (0) | 2022.01.01 |
[ORACLE] 집계함수 - COUNT, MAX, MIN, SUM, AVG (1) | 2021.12.30 |
[ORACLE] 기타 함수 - NVL, DECODE, CASE [WHEN ... THEN ...] END (0) | 2021.12.29 |
[ORACLE] 타입 변환 함수(TO_CHAR, TO_DATE, TO_NUMBER) (0) | 2021.12.28 |