아래의 <프로그래머스 SQL 고득점 Kit> 를 풀면서 문법을 기억하고 있는지 확인했습니다.
MySQL
대소문자 구분 안함
SELECT
SELECT
전체 변수 선택 : *
ORDER BY
기본 : ASC , 내림차순 DESC
여러 컬럼 기준 정렬할 때, 각각 다른 기준 가능
별칭 사용 가능
상위 n개 : ORDER BY 와 LIMIT n 함께 사용
LIMIT : 첫번째 레코드는 0번 부터 시작, 시작 행을 정할 수 있음
SELECT * FROM[테이블명]LIMIT 100, 10
WHERE
조건 제시할 때 = 1개만
코드 예시
SELECT NAME, DATETIME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION = 'Sick'
ORDER BY ANIMAL_ID DESC
LIMIT 3
SUM, MAX, MIN
집계함수
SUM, MAX, MIN, COUNT
COUNT
NULL은 자동으로 제외하고 COUNT
중복 제거
COUNT 내에 distinct 옵션
GROUP BY [COUNT 하려는 컬럼] 과 함께 사용하는 게 더 빠름
코드 예시
SELECT max(datetime)
from animal_ins
SELECT min(datetime)
from animal_ins
SELECT count(animal_id) as count
from animal_ins
IS NULL
IS NULL
where 절에 조건으로 사용
IFNULL
IFNULL(컬럼명, NULL일 때 대체할 값)
코드 예시
SELECT animal_id
from animal_ins
where name is not null
#where name is null
order by animal_id
SELECT animal_type, IFNULL(name, 'No name') as name, sex_upon_intake
from animal_ins
String, Date
컬럼 in ()로 ()안에 컬럼 값이 존재하는지 확인
SELECT animal_id, name, sex_upon_intake
FROM animal_ins
where name in ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')
LIKE
대소문자 구분 X
%는 글자 수 상관없이 _는 글자수 조건
SELECT animal_id, name
FROM animal_ins
where name like '%el%' and animal_type = 'Dog'
ORDER BY name
SELECT animal_id, name, DATE_FORMAT(datetime,'%Y-%m-%d') as 날짜
from animal_ins
order by animal_id
IF, CASE
IF
IF(조건절, 참일 때 값, 거짓일 때 값)
SELECT animal_id, name
FROM animal_ins
where name like '%el%' and animal_type = 'Dog'
ORDER BY name
SELECT animal_id, name,
IF((sex_upon_intake LIKE '%Neutered%') OR (sex_upon_intake LIKE '%Spayed%'),'O','X') as 중성화
FROM animal_ins
CASE
WHEN 절에 조건, THEN 절에 조건이 참일 경우, ELSE에 조건이 거짓일 경우
SELECT ANIMAL_ID, NAME,
CASE
WHEN SEX_UPON_INTAKE LIKE '%Neutered%' OR SEX_UPON_INTAKE LIKE '%Spayed%'
THEN 'O'
ELSE 'X' END as '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
GROUP BY
GROUP BY
HAVING
GROUP BY 결과에 대해 조건 추가
별칭 사용 가능
코드 예시
SELECT name, count(name) count
from animal_ins
group by name
having count(name)>=2
#having count>=2
order by name
SELECT HOUR(datetime) HOUR, count(animal_id) COUNT
from animal_outs
group by HOUR(datetime)
having hour>=9 and hour<=19
order by HOUR(datetime)
#order by HOUR
입양 시각 구하기(2)
0~23 까지의 시각을 나타내는 숫자 컬럼 필요 → RECURSIVE 재귀 함수로 구현
WITH 절 사용 : 미리 테이블을 정제 및 정의하고 FROM 절에 사용 가능
with RECURSIVE time as (select 0 as h
union all
select h+1 from time where h < 23)
SELECT h HOUR , count(DATETIME) COUNT
FROM ANIMAL_OUTS right join time on hour(DATETIME)=h
GROUP BY h ORDER BY h
#다른 코드
SET @hour := -1;
SELECT (@hour := @hour + 1) as HOUR,
(SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @hour) AS 'COUNT'
FROM ANIMAL_OUTS
WHERE @hour < 23