이전에 프로그래머스 썸머 코딩테스트에 지원했던 것을 잊고 있다가 이메일을 받고나서 생각이 났다. 자바스크립트로 문제를 푸는건 상관없는데 SQL로는 연습한적이 없어서 급하게 정리해본다.
이전에 잠깐 생활코딩님 강의에서 공부했던 흔적이 노션에 남아있어서 이걸 바탕으로 정리해보려한다.
프로그래머스 문제를 풀면서 주로 사용되는거 위주로 정리할 예정이다.😅
데이터 조작 언어로 선택, 삽입, 수정, 삭제하는 데 사용되는 언어다.
DML 구문이 사용되는 타겟은 테이블의 "행"이다.
SQL 구문 중에 SELECT
/INSERT
/UPDATE
/DELETE
구문이 이에 해당된다. 트랜잭션이 발생하는 SQL도 DML이다.
트랜잭션이란?
테이블의 데이터를 변경(입력/수정/삭제)할 때 실제 테이블에 완전히 적용하지 않고 임시로 적용시키는 것을 말한다.
데이터 정의 언어로 데이터베이스, 테이블, 뷰, 인덱스 등의 데이터베이스 개체를 생성/삭제/변경하는 역할을 한다. 주로 사용하는 DLL은 CREAT
/DROP
/ALTER
등이다. DDL은 트랜잭션을 발생시키지 않으며, 실행 즉시 MySQL(데이터베이스)에 적용된다.
데이터 제어 언어로 사용자에게 어떤 권한을 부여하거나 빼앗을 때 사용하는 구문으로 GRANT
/REVOKE
/DENY
가 해당된다.
SHOW는 데이터 베이스 목록을 조회하는 구문이다.
SELECT
는 테이블 안에 필드(컬럼)를 조회할 때 사용하는 구문인 것 같다.
SELECT 컬럼 FROM 테이블
전체를 선택하려면 밑의 "*"를 사용하면된다.
SELECT * FROM 테이블
컬럼명을 변경하고 싶다면 AS를 사용해서 변경할 수 있다.
SELECT 컬럼 FROM 테이블 AS 바꿀 컬럼명
ORDER BY
는 SELECT
로 데이터를 조회할 때 추가해서 지정된 컬럼을 기준으로 조회한 컬럼을 정렬할 수 있다.
SELECT 컬럼 FROM 테이블 ORDER BY 컬럼
만약 정렬 기준이 여러개라면
SELECT 컬럼 FROM 테이블 ORDER BY 컬럼, 컬럼
위 코드처럼 컬럼을 하나 더 추가해서 첫 번째 정렬에서 값이 같다면 두번째 컬럼을 기준으로 정렬할 수 있다.
ASC
를 사용하여 오름차순으로 정렬이 가능하다.
SELECT 컬럼 FROM 테이블 ORDER BY 컬럼 ASC;
DESC
를 사용하여 내림차순 정렬이 가능하다.
SELECT 컬럼 FROM 테이블 ORDER BY 컬럼 DESC;
LIMIT
는 테이블 데이터 조회 시 한계를 지정할 수 있다.
예를 들어 테이블에서 10개의 데이터만 가져오는 SELECT
문을 사용한다면 아래처럼 사용할 수 있다.
SELECT 컬럼 FROM 테이블 LIMIT 10;
WHERE
는 SELECT
로 데이터를 조회할 때 조건문을 걸어줄 때 사용한다.
SELECT 컬럼
FROM 컬럼
WHERE 조건
AND 조건
AND 조건 IS NOT 조건
AND
, OR
를 사용해서 여러개의 조건을 만들어 줄 수 있다.
IS NOT
을 사용해서 false
일 때의 조건을 만들 수 있다.
JOIN
은 데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과 집합으로 표현해 주는, Relation Database 에서 가장 많이 쓰이는 녀석이다.
ON을 사용해서 조건이 일치하는 결과만 출력할 수 있다.
SELECT FIRST_HALF.FLAVOR
FROM FIRST_HALF JOIN ICECREAM_INFO
ON FIRST_HALF.FLAVOR = ICECREAM_INFO.FLAVOR
위 코드는 두 테이블에서 공통적으로 가지고 있는 FLAVOR
컬럼을 사용해서 FIRST_HALF
와 ICECREAM_INFO
를 JOIN으로 합쳤다.
날짜 관련 데이터의 포맷을 변경하기 위해 사용한다.
만약 datetime이라는 컬럼의 1992-03-16 00:00:00
라는 날짜 데이터를 시간을 제거한 포맷으로 바꾸고 싶다면
SELECT DATE_FORMAT(datetime, '%Y-%m-%d') FROM 테이블
=> 1992-03-16
위 코드처럼 사용해서 시간없이 날짜만 나타낼 수 있다.
MySQL 날짜, 시간 표기 방식 지정하기 DATE_FORMAT()
집계함수
ROUND(), TRUNCATE() - 반올림과 버림
간단하게 SELECT
구문에서 컬럼의 값들을 집계할 수 있다.
SELECT ROUND(AVG(컬럼))
위 코드처럼 사용해서 컬럼의 모든 값들의 평균을 구하고 ROUND를 사용해서 반올림 한다.
MySQL 그룹화하여 데이터 조회 (GROUP BY)
GROUP BY
도 집계함수 중 하나다.
유형별로 갯수를 가져오고 싶은데, 단순히 COUNT
를 사용하면 전체 갯수를 가져온다. 이렇게 유형별로 갯수를 알고 싶을 때 컬럼의 데이터를 그룹화하는 GROUP BY
를 사용한다.
GROUP BY
를 사용할 때는 두 가지를 기억해야한다.
특정 컬럼을 그룹화하는 GROUP BY
특정 컬럼을 그룹화한 결과에 조건을 거는 HAVING
HAVING
은 그룹화 후에 조건을 건다.
유형별로라고 하니 이해가 약간 어려운데 동일한 값을 가진 컬럼을 그룹으로 묶는다고 한다.
보통 COUNT
사용해서 해당 컬럼의 갯수를 조회하고 싶을 때 사용한다.
SELECT 컬럼A, COUNT(컬럼B) FROM 테이블 GROUP BY 컬럼A;
위 코드는 컬럼A를 그룹화하여 컬럼B의 개수를 조회하는 코드다.
뒤에 HAVING
을 사용해서 그룹화한 후에 조건을 걸 수 있다.
SELECT 컬럼A, COUNT(컬럼B) FROM 테이블 GROUP BY 컬럼A HAVING COUNT(*) > 1
그룹화한 컬럼A에 값이 2개 이상인 컬럼B를 출력하는 코드다.
GROUP BY는 어려워서 이해하는데 시간이 많이 걸렸다.😥
IFNULL
은 컬럼 안의 값이 NULL일 경우 다른 값으로 대체할 때 사용한다.
해당 컬럼의 값이 NULL을 반환할 때 다른 값으로 변경해서 출력하고 싶다면 밑의 코드처럼 사용하면 된다.
SELECT IFNULL(컬럼, 대체 값) FROM 테이블
IS NULL
은 컬럼 안의 값이 NULL인지 확인할 때 사용한다.
SELECT 컬럼A FROM 테이블 WHERE 컬럼A IS NULL
위 코드는 컬럼A에서 값이 NULL인 데이터만 출력한다.
IS NOT NULL
을 사용하면 NULL이 아닌 값만 선택할 수 있다.
SELECT 컬럼A FROM 테이블 WHERE 컬럼A IS NOT NULL
위 코드는 컬럼A에서 값이 NULL이 아닌 데이터만 출력한다.
MySQL like문 (특정 문자 포함되어있는지 검색)
LIKE
는 특정 문자가 포함되어 있는지 검색할 때 사용한다.
특정 문자로 시작하는 데이터를 검색하고 싶으면 "문자%"
특정 문자로 끝나는 데이터를 검색하고 싶으면 "%문자"
특정 문자가 포함되어 있는지 검색하고 싶으면 "%문자%"
를 사용해서 탐색할 수 있다.
WHERE 탐색할 컬럼 LIKE "%문자"
UNION
은 쿼리의 결과를 합칠 때 사용한다. 중복된 ROW는 제거한다.
SELECT * FROM 컬럼
UNION DISTINCT
SELECT * FROM 컬럼
UNION ALL
은 쿼리의 결과를 합치는 것은 동일하지만 중복된 값을 제거하지 않는다.
[MySQL] 범주 조회 (DISTINCT)
DISTINCT
는 범주를 확인할 때 사용한다.
컬럼하나를 선택해서 해당 컬럼의 값이 몇 종류가 되는지 확인할 수 있다.
범주(종류)를 확인하는 것이기 때문에 중복된 값은 모두 제거된다.
SELECT DISTINCT 컬럼 FROM 테이블
컬럼 범주 개수를 조회하기 위해서는 밑의 코드처럼 사용하면 된다.
SELECT COUNT(DISTINCT 컬럼) FROM 테이블
SQL문제를 풀면서 새로운 문법이 나오면 계속 추가할 예정.