컴퓨터과학/데이터베이스

[MySQL] SQL 추가 문법 정리 - 프로그래머스 SQL 고득점 kit

윤호 2021. 3. 1. 11:22

생활코딩을 통해 SQL의 JOIN 문까지 배운 후,

프로그래머스 SQL 고득점 kit을 풀면서 필요했던 내용을 정리했습니다.

 

기본 문법

NOT 문을 통해 조건을 부정할 수 있습니다.

SELECT * FROM lang WHERE NOT author='egoing'

ORDER BY에서 쉼표를 통해 여러 기준을 정할 수 있습니다.

SELECT * FROM animal_ins ORDER BY name ASC, age DESC

WHERE 칼럼명 IS NULL 문을 통해 특정 칼럼의 데이터가 NULL인 레코드를 찾을 수 있습니다.

SELECT * FROM animal WHERE author IS NULL

SELECT 문에서 IFNULL(칼럼명, 대체할 값) 문을 통해 NULL 값을 대체할 수 있습니다.

SELECT IFNULL(Name, '이름 없음!') FROM animal_ins

테이블명 뒤에 AS 문 또는 생략을 통해 키워드를 지정할 수 있습니다.

SELECT INS.NAME, OUTS.DATE FROM animal_ins AS INS, animal_outs OUTS

COUNT 문을 통해 특정 칼럼의 데이터의 수를 구할 수 있습니다.

SELECT COUNT(animal_id) FROM animal

DISTINCT 문을 통해 중복을 제거한 데이터를 얻을 수 있습니다.

SELECT COUNT(DISTINCT animal_type) FROM animal

GROUP BY

GROUP BY 문으로 칼럼의 데이터들을 그룹화 할 수 있습니다.

SELECT COUNT(anial_type) FROM animal_ins GROUP BY animal_type

HAVING 문으로 그룹화 이후 데이터들에 대해 조건을 줄 수 있습니다.

  • WHERE 문과 비슷하지만 WHERE 문은 그룹화 이전에 조건을 줍니다.
SELECT COUNT(anial_type) FROM animal_ins GROUP BY animal_type HAVING COUNT(animal_type) > 1

STRING, DATE 관련

WHERE 문에서 IN 을 통해 특정 칼럼의 특정 데이터가 있는 레코드를 뽑을 수 있습니다.

SELECT * FROM animal WHERE animal_type IN ('dog', 'cat);

LIKE 문을 통해 특정 부분이 일치하는 데이터를 찾을 수 있습니다.

  • 대소문자는 구분하지 않음
  • %는 글자 수 상관없이 _는 글자수 조건
SELECT * FROM animal WHERE name LIKE '%EL%';
-- aaEL, aELb, ELbbad --

SELECT * FROM WHERE name LIKE '_EL__';
-- aELbb --

HOUR 문을 통해 DATE 타입에서 시간을 구할 수 있습니다.

SELECT HOUR(datetime) FROM animal

DATE_FORMAT 문을 통해 DATE 타입에서 원하는 형태를 구할 수 있습니다.

SELECT NAME, DATE_FORMAT(DATETIME, '%Y-%m-%d') FROM animal

 

CASE 문, SET

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

 

프로그래머스 - 중성화 여부 파악하기

 

SET으로 로컬 변수를 선언하여 사용할 수 있습니다.

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

프로그래머스 - 입양 시각 구하기(2)