코딩뚠뚠

코딩테스트 SQL (MySQL) 본문

공부/기타

코딩테스트 SQL (MySQL)

로디네로 2021. 4. 13. 13:42
반응형

 

코딩테스트를 보다보면 1/5 정도의 코딩테스트는 SQL문제를 출제한다고 느껴진다.

 

대개 MySQL Oracle 등을 사용하게 하는데

 

준비가 되어있지 않다면 난감한 상황이 아닐수 없다.

 

몇 번의 코딩테스트에서 SQL을 봐 본 경험으로 대비하기 위해서는 프로그래머스로 어느정도 커버가능하다고 생각한다.

 

그 정도의 수준으로 MySQL을 정리해보았다.

 

 


 

SELECT

 

그 자체로 생각해보자 SELECT 즉 선택하는 것이다.

 

내가 테이블에서 어떤 열을 가져올지를 선택해준다.

SELECT *
FROM ANIMAL_INS

위의 코드는 ANIMAL_INS 테이블의 모든 열(Column)을 가져온다.

SELECT NAME,DATETIME
FROM ANIMAL_INS

위의 코드는 ANIMAL_INS 테이블에서 NAME과 DATETIME 열을 가져온다.

 

 

 

FROM

 

위에서 같이 설명했듯이 FROM은 테이블을 선택하는 명령어이다.

 

 

 

ORDER BY

 

정렬을 수행한다.

SELECT *
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

위와 같은 코드는 ANIMAL_ID를 기준으로 오름차순으로 테이블을 정렬한다.

 

만약 내림차순으로 정렬하고 싶으면

ORDER BY ANIMAL_ID DESC

DESC를 붙여준다.

 

 

 

WHERE

 

조건을 걸어준다.

SELECT *
FROM ANIMAL_INS
WHERE CONDITION = 'Sick'
ORDER BY ANIMAL_ID

여기까지의 과정을 다시 되짚어보자면

 

ANIMAL_INS 테이블을 불러온다 (FROM)

전체 Column을 선택한다 (SELECT)

그 중 CONDITION이 Sick인 것만 조건을 통과할 수 있다. (WHERE)

오름차순으로 정렬한다 (ORDER BY)

 

 

 

LIMIT

 

제한을 걸어 출력한다

SELECT *
FROM ANIMAL_INS
ORDER BY ANIMAL
LIMIT 2

제한을 걸어 행이 상위 두 개만 출력되게 된다.

 

 

 

DISTINCT

 

중복을 없앤다.

SELECT DISTINCT NAME
FROM ANIMAL_INS

위 코드에서는 NAME 열을 선택해서 불러올 것이다.

 

하지만 DISTINCT를 써서 중복을 없앨 수 있다.

 

만약 NAME 열에 'A' 'D' 'A' 'G' 'A' 'B' 'A' 'B' 가 존재한다면 이는 'A' 'D' 'G' 'B' 로 출력할 수 있을 것이다.

 

 

 

COUNT

 

개수를 셀 수 있다.

SELECT COUNT(NAME)

NAME 열의 행의 숫자를 센다. 단 비어있는 곳은 세지않는다.

SELECT COUNT(*)

전체 열의 행의 숫자를 센다.

 

 

 

AS

 

명명하는 방법이다.

SELECT NAME AS N

앞으로 NAME 열을 N으로 쓰기로 한다. 라는 뜻의 코드이다.

 

SELECT 이외에서도 쓰인다.

 

 

 

GROUP BY

 

SELECT 한 테이블을 그룹지을 수 있다.

SELECT NAME, ID
FROM ANIMAL_INS
GROUP BY NAME
ORDER BY NAME

위와 같을 때 GROUP BY NAME 은 NAME내의 인자들을 그룹지어준다.

 

만약 NAME의 인자가 'A' 'B' 'C' 'A' 'B' 'D' 'C' 와 같이 있다면

 

'A' 'B' 'C' 'D' 로 그룹지어준다.

 

 

 

HAVING

 

GROUP BY 를 실행한 후 조건문 WHERE 대신 사용한다.

SELECT NAME, COUNT(NAME) COUNT
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT(NAME)>1
ORDER BY NAME

NAME을 그룹지었고 HAVING 으로 그에대한 조건을 또 걸어줄 수 있었다.

 

 

 

BETWEEN A AND B

 

사이의 값을 선택하고 싶을 때 사용한다.

BETWEEN 0 AND 19

이와 같다면 0이상 19 이하의 값을 선택하는 것이다.

 

 

 

날짜를 추출해내기

 

YEAR, MONTH, DAY, HOUR, MINUTE, SECOND

SELECT HOUR(DATETIME)

DATETIME에서 HOUR를 추출해 낸다.

 

BETWEEN과 응용한다면

SELECT HOUR(DATETIME)
HAVING HOUR BETWEEN 0 AND 19

HOUR를 추출해내고 그를 0~19 사이의 값만 추출해 낸다.

 

 

 

IS NULL

 

WHERE과 주로? 같이 쓰이며 NULL값을 찾는다.

SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NULL

NULL 이 아닌것을 찾으려면 IS NOT NULL 과 같이 사용하면 될 것이다.

 

 

 

IFNULL

 

NULL 인 것을 찾아서 치환한다.

SELECT IFNULL(NAME,'ABC')

NAME 열에서 NULL이 있다면 그곳을 'ABC' 로 채워넣는다.

 

 

 

JOIN

 

테이블을 결합해서 본다.

 

두 개 이상의 테이블에 대해서 결합하여 나타낸다.

 

결합이란 교집합 합집합 등을 떠올릴 수 있다. 이에 대한 방법이 아래 그림에 존재한다.

 

 

사실 모든 방법이 그림에 나타나 있다.

SELECT ANIMAL_OUTS.ANIMAL_ID, ANIMAL_OUTS.NAME
FROM ANIMAL_OUTS
LEFT JOIN ANIMAL_INS USING(ANIMAL_ID)
WHERE ANIMAL_INS.ANIMAL_ID IS NULL
ORDER BY ANIMAL_ID

위의 코드는 왼쪽 맨위에서 바로 밑에 있는 부분을 나타낸 것이다.

 

오직 A만 차지하는 공간을 나타냈다.

 

USING은 조인하는 컬럼을 지정할 수 있다.

 

다만 이는 합치는 두 테이블에서의 칼럼명이 같아야 하고 같지 않다면 ON 으로 쓸 수 있다.

 

ON ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID

 

JOIN에 대한 세부 내용은 아래 블로그에 잘 정리되어있는 것 같아 주소를 남긴다

pearlluck.tistory.com/46

 

DB JOIN 정리(INNER/LEFT/RIGHT/OUTER)

join(조인) 둘 이상의 테이블을 연결해서 데이터를 검색하는 방법 연결하려면 테이블들이 적어도 하나의 컬럼을 공유하고 있어야함 이 공유하고 있는 컬럼을 PK 또는 FK값으로 사용 ​ 종류 1. INNER

pearlluck.tistory.com

 

 

IN

 

포함되는 것 찾기

WHERE NAME IN('A','B','C')

NAME 열에서 A거나 B거나 C인 것을 찾기

 

 

 

LIKE

 

포함 여부 찾기

WHERE NAME LIKE '%AB%'

NAME 열에서 값에 AB라는 문자가 속해있는 것을 찾기

 

만약 AB로 시작하는 문자만 찾고싶다면

WHERE NAME LIKE 'AB%'

만약 AB로 끝나는 문자만 찾고싶다면

WHERE NAME LIKE '%AB'

 

 

 

IF

 

조건을 넣어 칼럼의 값을 바꾸는 방법

SELECT ANIMAL_ID, IF(NAME LIKE '%AB%', 'X', 'O')

NAME 열에서 AB가 포함되어있는 인자가 있다면 X로 치환, 없다면 O로 치환

 

 

 

DATE

 

문자 -> 날짜

#DATETIME = '2020-01-01'
DATE(DATETIME)

이와 같이 DATE를 사용하면 문자열이 아닌 날짜로서 연산할 수 있을것이다.

DATE(YESTERDAY)=DATE(DATETIME)

 

 

DATE_FORMAT

 

원하는 날짜 출력 포맷을 지정해준다.

#DATETIME = '2020-01-01'
SELECT NAME, DATE_FORMAT(DATETIME, "%Y-%m")

위 코드의 출력은 2020-01 까지가 될 것이다. 포맷을 m까지 줬기 때문이다. %Y-%m-%d 로 나타낸다.

 

 

 

 

 

이렇게 코딩테스트 레벨에서 사용하게 되는 문법들을 정리해보았다.

 

추가되는 내용이 있다면 추가해 나갈 예정이다.

반응형

'공부 > 기타' 카테고리의 다른 글

SQLite 와 사용방법  (0) 2021.10.05
C++ 가상함수 (Virtual Function)  (0) 2021.07.23
딥러닝, 데이터분석 pandas 기본사용  (0) 2021.04.06
파이썬 self와 __init__ 에 대해  (0) 2021.04.05
Git 개념 및 사용 2  (0) 2021.02.07