개발로 자기계발
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
profile

개발로 자기계발

@김잠봉

틀린부분이나 조언이 있다면 언제든 환영입니다:-)