본문 바로가기

프로젝트 & TIL/일별 공부 기록 (백엔드 스쿨)

13일차 - DB 쿼리(2)

그룹 함수

https://yurison.tistory.com/24?category=1077673 

 

DML - 데이터 조작하기

SELECT - 데이터 조회하기 SELECT(DISTINCT) {column_name}(ALIAS) FROM {table_name} [WHERE {attribute} = {value}]; SELECT CONCAT({column_name}, '-', {column_name}) FROM {table_name}; DISTINCT : 중복행을 제거한다. ALIAS : 컬럼의 별칭을 지

yurison.tistory.com

COUNT

SELECT COUNT(컬럼_이름) FROM 테이블_이름;   # NULL이 아닌 row의 개수 출력
SELECT COUNT(*) FROM 테이블_이름;   # NULL 포함 => 모든 row의 개수 출력

  

MAX

SELECT MAX(컬럼_이름) FROM 테이블_이름;

  

MIN

SELECT MIN(컬럼_이름) FROM 테이블_이름;

  

AVG

SELECT AVG(컬럼_이름) FROM 테이블_이름;
SELECT TRUNCATE(AVG(컬럼_이름), 0) FROM 테이블_이름;   # 소수점 0개로 출력

  

SUM

SELECT SUM(컬럼_이름) FROM 테이블_이름;

  

GROUP BY

SELECT SUM(컬럼1) FROM 테이블_이름 GROUP BY 컬럼2;

- 컬럼2의 내용이 같은 row가 한 그룹으로 묶여 컬럼1이 SUM 된다.

  

GROUP_CONCAT

SELECT GROUP_CONCAT(컬럼1) FROM 테이블_이름 GROUP BY 컬럼2;
SELECT GROUP_CONCAT(DISTINCT 컬럼1 ORDER BY ... SEPARATOR '구분자') FROM 테이블_이름 GROUP BY 컬럼2;

- 컬럼1 내용이 그룹 별로 합쳐져서 출력된다.

- DISTINCT : 중복 제거


IF / CASE

SELECT IF(컬럼 = 1, 'ㅁㅁㅁ', 'ㄴㄴㄴ') ...
# 컬럼의 내용이 1 이면 ㅁㅁㅁ이고, 1이 아니면 ㄴㄴㄴ이다.

  

SELECT CASE
WHEN 컬럼 = 내용1 THEN '...'
WHEN 컬럼 = 내용2 THEN '...'
ELSE '...' END ~

  

CONCAT()

SELECT CONCAT(COUNT(*), '명') ...   # COUNT(*) 결과 + '명' 출력

  

FORMAT()

SELECT FORMAT(1000, 1);   # 1,000.0

- 숫자 단위를 보기 좋게 출력, 두번째 숫자는 소수점의 개수

  

IFNULL()

SELECT IFNULL(content, '-');

- content가 NULL이 아니면 content로 출력, NULL이면 '-'로 출력



쿼리 실행 순서

FROM, JOIN -> ON, WHERE -(2차 테이블 완성)-> GROUP BY -> 그룹 함수 -(3차 테이블 완성)-> HAVING -> ORDER BY -> LIMIT ...



HAVING

SELECT ... FROM 테이블 ... HAVING 컬럼 = MAX(컬럼);   // 컬럼의 내용이 MAX(컬럼)인 경우만 출력

- 그룹 함수로 필터링하고 싶을 때(WHERE은 순서 상 불가능)

  

UNION

SELECT 1 AS id
UNION
SELECT 2
UNION
SELECT 3;

- 각 테이블을 합쳐서 반환하는 일회성 테이블. 컬럼 개수가 같아야 함

  

SELECT 1
UNION
SELECT 1;   # 중복되면 하나는 생략된다.

- 생략 안 되게 하려면 UNION ALL


서브 쿼리

SELECT ... WHERE 컬럼 = (SELECT ... );

- 쿼리 안의 쿼리


JOIN의 차이

A INNER JOIN B : A와 B의 교집합, NULL값은 포함되지 않는다.

A LEFT JOIN(== LEFT OUTER JOIN) B : A를 기준으로 JOIN, A에 NULL 값이 있어도 최소 하나를 포함한다.

A RIGHT JOIN(== RIGHT OUTER JOIN) B : B를 기준으로 JOIN, B에 NULL 값이 있어도 최소 하나를 포함한다.