3 분 소요

1. COUNT

  • COUNT(*) 으로 존재하는 모든 행을 가져올 수 있다
    • 만약 * 대신 COUNT(NAME)과 같이 사용한다면, NAME 컬럼에 NULL이 들어있지 않은 행 갯수를 가져온다

예제

select count(*) from animal_ins

2. DISTINCT

  • DISTINCT 로 중복을 제거할 수 있다.

예제

select count(distinct name)
from animal_ins

DISTINCT 사용 시 주의할 점

참고

🌟 DISTINCT 키워드는 옆에 온 모든 컬럼을 고려하여 중복 제거를 진행합니다.
즉, SELECT DISTINCT COL1, COL2 …를 진행할 경우
COL1COL2 값이 모두 동일한 row들을 1개로 칩니다.

다시 말하면, DISTINCTSELECT 구문에 여러 컬럼명이 올 때, 그 중 💥 한 개에 대해서만 적용할 수 없다는 말이 됩니다.
SELECT (DISTINCT COL1), COL2 FROM …는 오류입니다.
COL1 의 중복된 데이터를 제거한 뒤 COL2를 가져와야 할 텐데, 이 중 어떤 COL2 값을 가져와야 하는지 알 수 없기 때문입니다.

COL1 COL2
A 1
A 2
B 3
C 4

위에서 COL1에 대해서만 DISTINCT를 한다고 예를 들어 보겠습니다.
A는 중복이 제거되어 A 하나만 보여져야 할 것입니다.

그러나, 테이블에 열은 2개가 존재합니다.
COL1 열 하나에 대해서 중복제거를 하면, COL2 에 있는 값인 12 중 어느 것을 출력해야 하는지 모호합니다.
그러므로 DISTINCT 는 모든 컬럼을 고려하여 진행할 수 밖에 없습니다.

3. GROUP BY

참고

MySQL에서 유형별로 갯수를 가져오고 싶은데, 단순히 COUNT 함수로 데이터를 조회하면 전체 갯수만을 가져옵니다.
이렇게 유형별로 개수를 알고 싶을 때는 컬럼에 데이터를 그룹화 할 수 있는 GROUP BY를 사용하는 것입니다.

GROUP BY를 사용할 때는 두가지를 기억해야 합니다.
특정 컬럼을 그룹화 하는 GROUP BY
특정 컬럼을 그룹화한 결과에 조건을 거는 HAVING

🌟 WHEREHAVING을 헷갈리는 경우가 많은데, WHERE는 그룹화 하기 전이고 HAVING은 그룹화 후에 조건입니다.

사용법

컬럼 그룹화
SELECT 컬럼 FROM 테이블 GROUP BY 그룹화할 컬럼;

조건 처리 후에 컬럼 그룹화
SELECT 컬럼 FROM 테이블 WHERE 조건식 GROUP BY 그룹화할 컬럼;

컬럼 그룹화 후에 조건 처리
SELECT 컬럼 FROM 테이블 GROUP BY 그룹화할 컬럼 HAVING 조건식;

조건 처리 후에 컬럼 그룹화 후에 조건 처리
SELECT 컬럼 FROM 테이블 WHERE 조건식 GROUP BY 그룹화할 컬럼 HAVING 조건식;

예제

스크린샷 2023-05-18 오후 10 24 54

type 그룹화하여 name 갯수 조회 (컬럼 그룹화)

쿼리

SELECT type, COUNT(name) AS cnt 
FROM hero_collection 
GROUP BY type;

결과
스크린샷 2023-05-18 오후 10 26 31

type 1 초과인, type 그룹화하여 name 갯수 조회 (조건 처리 후 컬럼 그룹화)

쿼리

SELECT type, COUNT(name) AS cnt
FROM hero_collection 
WHERE type > 1 
GROUP BY type;

결과
스크린샷 2023-05-18 오후 10 27 15

type 그룹화하여 name 갯수를 가져온 후, 그 중에 갯수가 2개 이상인 데이터 조회 (조건 처리 후에 컬럼 그룹화 후에 조건 처리)

쿼리

SELECT type, COUNT(name) AS cnt 
FROM hero_collection 
GROUP BY type 
HAVING cnt >= 2;

결과
스크린샷 2023-05-18 오후 10 27 56

type 1 초과인, type 그룹화하여 name 갯수를 가져온 후, 그 중에 갯수가 2개 이상인 데이터 조회 (조건 처리 후에 컬럼 그룹화 후에 조건 처리)

쿼리

SELECT type, COUNT(name) AS cnt 
FROM hero_collection 
WHERE type > 1 
GROUP BY type 
HAVING cnt >= 2;

결과
스크린샷 2023-05-18 오후 10 28 35

4. CASE ~ END

참고

CASE
  WHEN 조건1  THEN 결과값1
  WHEN 조건2  THEN 결과값2
  WHEN 조건3  THEN 결과값3
  WHEN 조건4  THEN 결과값4
  ELSE 결과값5
END

when 뒤에 조건 then 다음 원하는 결과값을 쓰는데,
조건이 True이면, 읽기를 중지하고 결과값을 반환하고
조건이 False이면 다음 조건으로 넘어가거나 Else절의 값을 반환한다.

만약, Else부분이 없거나 모든 조건이 True가 아니면 NULL을 반환한다!

예제

현재 SELECT를 다음과 같이 QUERY를 써서 조회했을 때 결과가 나온다.

SELECT ANSWER_TYPE_NAME, ANSWER_TYPE_CD 
FROM  TABLE_ANSWER
WHERE ANSWER_ID = 10

스크린샷 2023-05-18 오후 10 12 43

여기서, CASE문법을 써서, ANSWER로 나온 부분은 주관식 CHOICE는 객관식으로 조회할 수 있다.

SELECT ANSWER_TYPE_NAME,
    CASE
        WHEN ANSWER_TYPE_CD = 'ANSWER' THEN '주관식'
        WHEN ANSWER_TYPE_CD = 'CHOICE' THEN '객관식'
        ELSE '없음'
    END AS ANSWER_TYPE_CD
FROM TABLE_ANSER
WHERE ANSWER_ID = 10

스크린샷 2023-05-18 오후 10 12 54

5. BETWEEN ~ AND

참고

  • BETWEEN A AND B 으로 조건 A 에서 조건 B 사이의 값을 조회할 수 있다.

예제

SELECT NAME, ID
FROM EMP
WHERE ID BETWWEN 10 AND 50
ORDER BY ID


💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기

태그:

카테고리:

업데이트: