728x90
UNION(합집합 - 중복제거)
두 SELECT문의 결과를 결합하고 중복된 결과는 제거된다.
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
UNION ALL(합집합 - 중복제거X)
UNION과 같지만 중복된 결과를 제거하지 않는다.
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
EXCEPT(차집합)
첫 번째 SELECT 문의 결과에서 두 번째 SELECT 문의 결과를 제외한다.
SELECT column_name(s) FROM table1
EXCEPT
SELECT column_name(s) FROM table2;
INTERSECT(교집합)
두 SELECT 문의 결과 중 공통된 부분만을 반환한다.
SELECT column_name(s) FROM table1
INTERSECT
SELECT column_name(s) FROM table2;
COALESCE
인수 리스트에서 null이 아닌 첫 번째 값을 반환
만약 모든 인수가 null이라면, COALESCE는 null을 반환
SELECT COALESCE(NULL, 'first', 'second');
NULLIF
두 인수가 같으면 null을, 그렇지 않으면 첫 번째 인수를 반환
SELECT NULLIF('test', 'test');
LISTAGG
여러 행의 데이터를 하나의 문자열로 결합할 때 사용
Oracle SQL과 PostgreSQL에서 사용하는 함수
MySQL에서는 GROUP_CONCAT같은 함수를 사용해야한다.
SELECT department_id,
LISTAGG(employee_name, ', ') WITHIN GROUP (ORDER BY employee_name)
AS employees
FROM employees
GROUP BY department_id;
department_id | employees |
1 | "Alice, Bob, Charlie" |
2 | "David, Eve, Frank" |
3 | "George, Helen, Ian" |
위와 같이 지정 해준 연결 구분자에 따라 ', ' 합쳐지게 된다.
WINDOW
데이터의 윈도우(일련의 행들)에 대해 계산을 수행한다.
이는 행과 행 사이의 관계를 분석하는 데 유용하다.
RANK(), LEAD(), LAG(), ROW_NUMBER(), AVG() 등의 함수와 함께 사용된다.
예시 함수는 AVG)
SELECT employee_name,
department_id,
salary,
AVG(salary) OVER (PARTITION BY department_id) as avg_department_salary
FROM employees;
AVG(salary) OVER (PARTITION BY department_id) 부분에서 WINDOW 함수가 사용
department_id | employees | salary | avg_department_salary |
Alice | 1 | 5000 | 6000 |
Bob | 1 | 7000 | 6000 |
Charlie | 1 | 6000 | 6000 |
David | 2 | 8000 | 8000 |
Eve | 2 | 8000 | 8000 |
Frank | 2 | 8000 | 8000 |
728x90
SMALL
'Database & Data > 기초지식' 카테고리의 다른 글
트랜잭션(Transaction) 소개 (0) | 2024.03.24 |
---|---|
개념적, 논리적, 물리적 모델(이해 위주) (0) | 2023.05.26 |
Join 소개 (0) | 2023.05.11 |
RedShift 및 SQL 다루기 (0) | 2023.05.09 |
관계형 데이터베이스와 SQL 소개 (0) | 2023.05.08 |