SQL 문법

Jemin·2023년 4월 28일
0

백엔드

목록 보기
2/21
post-thumbnail

이전에 프로그래머스 썸머 코딩테스트에 지원했던 것을 잊고 있다가 이메일을 받고나서 생각이 났다. 자바스크립트로 문제를 푸는건 상관없는데 SQL로는 연습한적이 없어서 급하게 정리해본다.

이전에 잠깐 생활코딩님 강의에서 공부했던 흔적이 노션에 남아있어서 이걸 바탕으로 정리해보려한다.

프로그래머스 문제를 풀면서 주로 사용되는거 위주로 정리할 예정이다.😅

SQL 기본 구문

DML(Data Manipulation Language)

데이터 조작 언어로 선택, 삽입, 수정, 삭제하는 데 사용되는 언어다.
DML 구문이 사용되는 타겟은 테이블의 "행"이다.

SQL 구문 중에 SELECT/INSERT/UPDATE/DELETE 구문이 이에 해당된다. 트랜잭션이 발생하는 SQL도 DML이다.

트랜잭션이란?
테이블의 데이터를 변경(입력/수정/삭제)할 때 실제 테이블에 완전히 적용하지 않고 임시로 적용시키는 것을 말한다.

DLL(Data Definition Language)

데이터 정의 언어로 데이터베이스, 테이블, 뷰, 인덱스 등의 데이터베이스 개체를 생성/삭제/변경하는 역할을 한다. 주로 사용하는 DLL은 CREAT/DROP/ALTER 등이다. DDL은 트랜잭션을 발생시키지 않으며, 실행 즉시 MySQL(데이터베이스)에 적용된다.

DCL(Data Control Language)

데이터 제어 언어로 사용자에게 어떤 권한을 부여하거나 빼앗을 때 사용하는 구문으로 GRANT/REVOKE/DENY가 해당된다.

데이터 조회 구문

SHOW

SHOW는 데이터 베이스 목록을 조회하는 구문이다.

SELECT

SELECT는 테이블 안에 필드(컬럼)를 조회할 때 사용하는 구문인 것 같다.

SELECT 컬럼 FROM 테이블

전체를 선택하려면 밑의 "*"를 사용하면된다.

SELECT * FROM 테이블

컬럼명을 변경하고 싶다면 AS를 사용해서 변경할 수 있다.

SELECT 컬럼 FROM 테이블 AS 바꿀 컬럼명

ORDER BY

ORDER BYSELECT로 데이터를 조회할 때 추가해서 지정된 컬럼을 기준으로 조회한 컬럼을 정렬할 수 있다.

SELECT 컬럼 FROM 테이블 ORDER BY 컬럼

만약 정렬 기준이 여러개라면

SELECT 컬럼 FROM 테이블 ORDER BY 컬럼, 컬럼

위 코드처럼 컬럼을 하나 더 추가해서 첫 번째 정렬에서 값이 같다면 두번째 컬럼을 기준으로 정렬할 수 있다.

오름차순

ASC를 사용하여 오름차순으로 정렬이 가능하다.

SELECT 컬럼 FROM 테이블 ORDER BY 컬럼 ASC;

내림차순

DESC를 사용하여 내림차순 정렬이 가능하다.

SELECT 컬럼 FROM 테이블 ORDER BY 컬럼 DESC;

LIMIT

LIMIT는 테이블 데이터 조회 시 한계를 지정할 수 있다.
예를 들어 테이블에서 10개의 데이터만 가져오는 SELECT문을 사용한다면 아래처럼 사용할 수 있다.

SELECT 컬럼 FROM 테이블 LIMIT 10;

WHERE

WHERESELECT로 데이터를 조회할 때 조건문을 걸어줄 때 사용한다.

SELECT 컬럼
FROM 컬럼
WHERE 조건
    AND 조건
    AND 조건 IS NOT 조건

AND, OR를 사용해서 여러개의 조건을 만들어 줄 수 있다.
IS NOT을 사용해서 false일 때의 조건을 만들 수 있다.

JOIN

JOIN은 데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과 집합으로 표현해 주는, Relation Database 에서 가장 많이 쓰이는 녀석이다.

ON을 사용해서 조건이 일치하는 결과만 출력할 수 있다.

SELECT FIRST_HALF.FLAVOR
FROM FIRST_HALF JOIN ICECREAM_INFO
ON FIRST_HALF.FLAVOR = ICECREAM_INFO.FLAVOR

위 코드는 두 테이블에서 공통적으로 가지고 있는 FLAVOR 컬럼을 사용해서 FIRST_HALFICECREAM_INFO를 JOIN으로 합쳤다.

DATE_FORMAT()

날짜 관련 데이터의 포맷을 변경하기 위해 사용한다.
만약 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를 사용해서 반올림 한다.

GROUP BY

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는 어려워서 이해하는데 시간이 많이 걸렸다.😥

NULL 처리

MySQL NULL 처리

IFNULL

IFNULL은 컬럼 안의 값이 NULL일 경우 다른 값으로 대체할 때 사용한다.
해당 컬럼의 값이 NULL을 반환할 때 다른 값으로 변경해서 출력하고 싶다면 밑의 코드처럼 사용하면 된다.

SELECT IFNULL(컬럼, 대체 값) FROM 테이블 

IS NULL

IS NULL은 컬럼 안의 값이 NULL인지 확인할 때 사용한다.

SELECT 컬럼A FROM 테이블 WHERE 컬럼A IS NULL

위 코드는 컬럼A에서 값이 NULL인 데이터만 출력한다.

IS NOT NULL

IS NOT NULL을 사용하면 NULL이 아닌 값만 선택할 수 있다.

SELECT 컬럼A FROM 테이블 WHERE 컬럼A IS NOT NULL

위 코드는 컬럼A에서 값이 NULL이 아닌 데이터만 출력한다.

LIKE

MySQL like문 (특정 문자 포함되어있는지 검색)
LIKE는 특정 문자가 포함되어 있는지 검색할 때 사용한다.
특정 문자로 시작하는 데이터를 검색하고 싶으면 "문자%"
특정 문자로 끝나는 데이터를 검색하고 싶으면 "%문자"
특정 문자가 포함되어 있는지 검색하고 싶으면 "%문자%"
를 사용해서 탐색할 수 있다.

WHERE 탐색할 컬럼 LIKE "%문자"

UNION

UNION은 쿼리의 결과를 합칠 때 사용한다. 중복된 ROW는 제거한다.

SELECT * FROM 컬럼
UNION DISTINCT
SELECT * FROM 컬럼

UNION ALL

UNION ALL은 쿼리의 결과를 합치는 것은 동일하지만 중복된 값을 제거하지 않는다.

DISTINCT

[MySQL] 범주 조회 (DISTINCT)
DISTINCT는 범주를 확인할 때 사용한다.
컬럼하나를 선택해서 해당 컬럼의 값이 몇 종류가 되는지 확인할 수 있다.
범주(종류)를 확인하는 것이기 때문에 중복된 값은 모두 제거된다.

SELECT DISTINCT 컬럼 FROM 테이블

컬럼 범주 개수를 조회하기 위해서는 밑의 코드처럼 사용하면 된다.

SELECT COUNT(DISTINCT 컬럼) FROM 테이블

SQL문제를 풀면서 새로운 문법이 나오면 계속 추가할 예정.

profile
경험은 일어난 무엇이 아니라, 그 일어난 일로 무엇을 하느냐이다.

0개의 댓글