[SQL] 문제풀이용 실전개념 요약정리 ⌨️ 🧹

SeonDal·2023년 8월 17일
2

🕊️ 기록기룩 

목록 보기
4/7
post-custom-banner

Programmers SQL 고득점 Kit
SQL 문제들은 풀고싶지만 쿼리 문법은 기억나지않고..
다시 복습하려니 SQL 다루는 강의는 너무 길고 분량은 방대하고...
문제풀이에만 사용할 실전 알짜 개념들만 알고싶다 !

⚠️ 프로그래머스에 존재하는 모든 SQL 문제를 풀면서 사용했던 개념과 문법들을 정리한 포스팅입니다.

기본 형태

select 칼럼명
from 테이블명
where 조건

테이블명에서 조건에 해당하는 칼럼명만 조회한다.


Select

round, floor, ceiling

순서대로 반올림, 내림, 올림

SELECT floor(숫자값을지닌속성명)

case

select * 
	case when 조건 then 참일때 값 else 거짓일때 값 end 칼럼명
from 테이블명
  • 활용 (노가다)
    SELECT (case when PRICE between 0 and 9999 then 0
            when PRICE between 10000 and 19999 then 10000
            when PRICE between 20000 and 29999 then 20000
            when PRICE between 30000 and 39999 then 30000
            when PRICE between 40000 and 49999 then 40000
            when PRICE between 50000 and 59999 then 50000
            when PRICE between 60000 and 69999 then 60000
            when PRICE between 70000 and 79999 then 70000
            when PRICE between 80000 and 89999 then 80000
            when PRICE between 90000 and 99999 then 90000
            end) as PRICE_GROUP,
            count(*) as PRODUCTS
    from PRODUCT
    group by PRICE_GROUP
    

distinct

중복 없이 출력

select distinct(속성명)
from 테이블명

Where

in

값이 후보1이나 후보2에 해당하는 경우만 참 (괄호 안에 후보 여러개 넣을 수 있음)

WHERE 칼럼명 IN ('후보1', '후보2')

between

WHERE 속성 BETWEENAND
WHERE 속성
	BETWEEN TO_DATE('2001-01-01', 'YYYY-MM-DD') 
	AND TO_DATE('2002-12-31', 'YYYY-MM-DD')

Group by

SELECT count(속성값) as 속성이름
from 테이블명
group by 속성이름

having

count처럼 group by를 해서 사용하는 집계함수들은 where절에서 사용할 수 없기에 having절에서 사용한다

SELECT 속성
from 테이블명
group by 속성
having count(*) >= 2

max

속성1을 기준으로 묶어서 속성2에 해당하는 값들을 모두 더한 값을 반환한다

select 속성1, sum(속성2)
from 테이블명
group by 속성1

max

속성1을 기준으로 묶고 속성2 값이 가장 큰 경우를 반환한다

select 속성1, max(속성2)
from 테이블명
group by 속성1
  • 주의 ! 다른 속성은 select하더라도 가장 값이 큰 경우의 속성을 반환하지는 않음
    select FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
    from REST_INFO
    where (FOOD_TYPE, FAVORITES) in (
        SELECT FOOD_TYPE, max(FAVORITES) as FAVORITES
        from REST_INFO
        group by FOOD_TYPE
    )
    참고

String

left, right, subtring

문자열에서 갯수 만큼의 글자를 반환

left(칼럼명, 갯수)
right(칼럼명, 갯수)

substring(칼럼명, 시작위치, 갯수)

concat

값들을 합쳐서 문자열로 반환

concat("값은 ", 칼럼명, "이다.")
  • substring과 concat을 이용하여 전화번호 형식 바꾸기
    concat(left(TLNO,3), "-", substring(TLNO,4,4), "-", right(TLNO,4)) as 전화번호
    
    // TLNO : 01012345678
    // 전화번호 : 010-7411-6673

Date

date_format

date_format(date, "표현식")
  • %Y : 2023
  • %M : June
  • %D : 13th
hour(datetime);
day(datetime);
month(datetime);
year(datetime);

datediff

SELECT datediff(date_format(END_DATE, '%Y-%m-%d'), date_format(START_DATE, '%Y-%m-%d')+1)

참고로 datediff(2월1일, 2월3일) = 2 라는 사실을 잊지말자. 두 일자 사이의 기간을 구하려면 +1을 해야한다

to_date

특정 문자열을 날짜 형식으로 바꿔줍니다

TO_DATE('2001-01-01', 'YYYY-MM-DD') 

Join

테이블을 합친다.

from 테이블1이름 테이블1 join 테이블2이름 테이블2 on 테이블1.기준칼럼명 = 테이블2.기준칼럼명

With

서브쿼리

with 테이블명 as 테이블

Recursive

반복문 (for 느낌)

WITH recursive 테이블명 as(
    select 초기값 as 칼럼명
    union all
    select 초기값+1 from 테이블명
    where 반복조건
)
profile
김선달 개발블로그
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 8월 17일

글 재미있게 봤습니다.

답글 달기