안녕하세요, 불주먹입니다.

재야의 SQL 고수분들은 이미 잘 알고 계신, SQL 알못(예를 들면 저 또는 저 그리고 저)을 위한 글입니다.

MySQL 기준으로 작성했으며, 잘못된 정보가 있다면 코멘트 부탁드려요!

이해를 돕기 위해 예시문에서는 USER 라는 테이블명의 테이블에 ID, NAME, AGE, CREATEDAT 컬럼이 있다고 가정합니다 :)

모든 컬럼 조회

SELECT * FROM USER

특정 컬럼 조회

SELECT NAME, AGE FROM USER

정렬 조회

  • 정렬방법(오름차순, 내림차순)을 명시하지 않으면 기본값은 오름차순(ASC)입니다.
  • 아래 예시는 ID 컬럼을 기준으로 내림차순 정렬합니다.
SELECT * FROM USER ORDER BY ID DESC
  • 만약, 정렬한 모든 결과가 아닌 정렬 후 N개 레코드만 필요하다면 LIMIT N 을 붙여주면 됩니다.
  • 만약2, 특정 컬럼을 기준으로 정렬 후 다른 컬럼을 기준으로 다시 한 번 정렬이 필요하다면 ORDER BY 뒤에 정렬 순서대로 컬럼명을 붙여주면 됩니다. (ORDER BY ID DESC, NAME ASC)

행의 개수 조회 (COUNT)

SELECT COUNT(*) FROM USER
  • 만약, 특정 컬럼을 기준으로 카운트하되 중복을 제외한다면 DISTINCT 키워드를 붙여주면 됩니다.

최대값 조회 (MAX, MIN)

  • 최소값 조회는 MIN(AGE) 입니다. 자매품 AVG도 있습니다.
  • 아래 예시는 USER 테이블의 AGE 컬럼 최대값을 조회합니다.
SELECT MAX(AGE) FROM USER

조건 조회 (WHERE)

  • 특정 값이 빈 값이거나 빈 값이 아닌 행을 조회하고 싶다면, WHERE {COLUME_NAME} IS NULL 혹은 IS NOT NULL 을 사용하면 됩니다.
  • 아래 예시는 USER 테이블의 NAME 컬럼이 boxer 인 행을 조회합니다.
SELECT * FROM USER WHERE NAME = 'boxer
'

조건 조회 - 심화 (CASE문)

  • 특정 값이 빈 값이거나 빈 값이 아닌 행을 조회하고 싶다면, WHERE {COLUME_NAME} IS NULL 혹은 IS NOT NULL 을 사용하면 됩니다.
  • WHEN, THEN 은 항상 쌍으로 사용해야 합니다.
  • 아래 예시는 USER 테이블의 AGE 컬럼이 30 보다 작으면 젊은이, 크면 늙은이로 치환한 컬럼을 조회합니다.
SELECT (
	CASE
    	WHEN AGE < 30 THEN '젊은이'
        ELSE '늙은이'
    END
) as AGE FROM USER
'

그룹화하여 조회 (GROUP BY)

  • 만약 특정 컬럼을 기준으로 그룹화하여 조회하고 싶다면 GROUP BY 를 이용하면 됩니다.
  • 아래 예시는 USER 테이블의 AGE 컬럼으로 그룹화하여, AGE 컬럼과 해당 컬럼의 레코드수를 조회합니다.
  • GROUP BY ~ HAVING 을 같이쓸 수도 있는데요, WHERE 과 HAVING 의 차이는 필터링 시점, 즉 그룹화 전에 필터링하느냐 후에 필터링하느냐의 차이라고 합니다.
SELECT AGE, COUNT(AGE) AS COUNT FROM USER GROUP BY AGE

NULL 처리 (IFNULL)

  • 특정 컬럼의 값이 NULL 일 때 NULL 이 아닌 다른 값으로 조회하고 싶을 때 사용합니다.
  • 아래 예시는 USER 테이블의 NAME 값이 NULL 일 때, taechon 으로 대체하여 출력합니다.
SELECT IFNULL(NAME, "taechon") AS NAME FROM USER

DATETIME 형 데이터 처리 (HOUR, YEAR, DAY...)

  • DATETIME 형 데이터에서 특정 데이터 (날짜 혹은 시간) 만 추출하여 조회할 때 사용합니다.
SELECT HOUR(CREATEDAT) AS HOUR FROM USER

DATETIME 형 데이터 처리 (date_format)

  • DATETIME 형 데이터를 원하는 포맷으로 가공하여 조회할 때 사용합니다.
  • %Y 를 사용하면 2021, %y 를 사용하면 21 로 출력됩니다!
SELECT date_format(CREATEDAT, "%Y-%m-%d") AS 날짜 FROM USER

문자 포함 여부 확인 (LIKE)

  • 문자형 값을 가지는 컬럼에서 특정 문자가 포함된 레코드만 조회할 때 사용합니다.
  • 아래 예시는 ch 으로 시작하는 모든 문자를 조회합니다. (자매품으로 ch%, %ch% 가능합니다.)
SELECT NAME FROM USER WHERE NAME LIKE "%ch"

더 세련되고 고급진 문법이 많겠지만, 이 정도만 알고 있어도 프로그래머스 기준 lv2 까지는 풀 수 있습니다.

이상 불주먹과 함께 하는 SQL 기본 중의 기본 - SELECT 편이었습니다.

profile
용인불주먹 입니다.

0개의 댓글