[SQL] 문법
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 …
를 진행할 경우
COL1
과 COL2
값이 모두 동일한 row들을 1개로 칩니다.
다시 말하면, DISTINCT
는 SELECT
구문에 여러 컬럼명이 올 때, 그 중 💥 한 개에 대해서만 적용할 수 없다는 말이 됩니다.
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
에 있는 값인 1
과 2
중 어느 것을 출력해야 하는지 모호합니다.
그러므로 DISTINCT
는 모든 컬럼을 고려하여 진행할 수 밖에 없습니다.
3. GROUP BY
MySQL에서 유형별로 갯수를 가져오고 싶은데, 단순히 COUNT
함수로 데이터를 조회하면 전체 갯수만을 가져옵니다.
이렇게 유형별로 개수를 알고 싶을 때는 컬럼에 데이터를 그룹화 할 수 있는 GROUP BY
를 사용하는 것입니다.
GROUP BY
를 사용할 때는 두가지를 기억해야 합니다.
특정 컬럼을 그룹화 하는 GROUP BY
특정 컬럼을 그룹화한 결과에 조건을 거는 HAVING
🌟 WHERE
랑 HAVING
을 헷갈리는 경우가 많은데, WHERE
는 그룹화 하기 전이고 HAVING
은 그룹화 후에 조건입니다.
사용법
컬럼 그룹화
SELECT 컬럼 FROM 테이블 GROUP BY 그룹화할 컬럼;
조건 처리 후에 컬럼 그룹화
SELECT 컬럼 FROM 테이블 WHERE 조건식 GROUP BY 그룹화할 컬럼;
컬럼 그룹화 후에 조건 처리
SELECT 컬럼 FROM 테이블 GROUP BY 그룹화할 컬럼 HAVING 조건식;
조건 처리 후에 컬럼 그룹화 후에 조건 처리
SELECT 컬럼 FROM 테이블 WHERE 조건식 GROUP BY 그룹화할 컬럼 HAVING 조건식;
예제
type 그룹화하여 name 갯수 조회 (컬럼 그룹화)
쿼리
SELECT type, COUNT(name) AS cnt
FROM hero_collection
GROUP BY type;
결과
type 1 초과인, type 그룹화하여 name 갯수 조회 (조건 처리 후 컬럼 그룹화)
쿼리
SELECT type, COUNT(name) AS cnt
FROM hero_collection
WHERE type > 1
GROUP BY type;
결과
type 그룹화하여 name 갯수를 가져온 후, 그 중에 갯수가 2개 이상인 데이터 조회 (조건 처리 후에 컬럼 그룹화 후에 조건 처리)
쿼리
SELECT type, COUNT(name) AS cnt
FROM hero_collection
GROUP BY type
HAVING cnt >= 2;
결과
type 1 초과인, type 그룹화하여 name 갯수를 가져온 후, 그 중에 갯수가 2개 이상인 데이터 조회 (조건 처리 후에 컬럼 그룹화 후에 조건 처리)
쿼리
SELECT type, COUNT(name) AS cnt
FROM hero_collection
WHERE type > 1
GROUP BY type
HAVING cnt >= 2;
결과
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
여기서, 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
5. BETWEEN ~ AND
BETWEEN A AND B
으로 조건 A 에서 조건 B 사이의 값을 조회할 수 있다.
예제
SELECT NAME, ID
FROM EMP
WHERE ID BETWWEN 10 AND 50
ORDER BY ID
💛 개인 공부 기록용 블로그입니다. 👻