Programmers SQL 고득점 Kit
SQL 문제들은 풀고싶지만 쿼리 문법은 기억나지않고..
다시 복습하려니 SQL 다루는 강의는 너무 길고 분량은 방대하고...
문제풀이에만 사용할 실전 알짜 개념들만 알고싶다 !
⚠️ 프로그래머스에 존재하는 모든 SQL 문제를 풀면서 사용했던 개념과 문법들을 정리한 포스팅입니다.
기본 형태
select 칼럼명 from 테이블명 where 조건
테이블명
에서조건
에 해당하는칼럼명
만 조회한다.
순서대로 반올림, 내림, 올림
SELECT floor(숫자값을지닌속성명)
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
중복 없이 출력
select distinct(속성명)
from 테이블명
값이 후보1이나 후보2에 해당하는 경우만 참 (괄호 안에 후보 여러개 넣을 수 있음)
WHERE 칼럼명 IN ('후보1', '후보2')
WHERE 속성 BETWEEN 값 AND 값
WHERE 속성
BETWEEN TO_DATE('2001-01-01', 'YYYY-MM-DD')
AND TO_DATE('2002-12-31', 'YYYY-MM-DD')
SELECT count(속성값) as 속성이름
from 테이블명
group by 속성이름
count처럼 group by를 해서 사용하는 집계함수들은 where절에서 사용할 수 없기에 having절에서 사용한다
SELECT 속성
from 테이블명
group by 속성
having count(*) >= 2
속성1을 기준으로 묶어서 속성2에 해당하는 값들을 모두 더한 값을 반환한다
select 속성1, sum(속성2)
from 테이블명
group by 속성1
속성1을 기준으로 묶고 속성2 값이 가장 큰 경우를 반환한다
select 속성1, max(속성2)
from 테이블명
group by 속성1
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
)
참고문자열에서 갯수
만큼의 글자를 반환
left(칼럼명, 갯수)
right(칼럼명, 갯수)
substring(칼럼명, 시작위치, 갯수)
값들을 합쳐서 문자열로 반환
concat("값은 ", 칼럼명, "이다.")
concat(left(TLNO,3), "-", substring(TLNO,4,4), "-", right(TLNO,4)) as 전화번호
// TLNO : 01012345678
// 전화번호 : 010-7411-6673
date_format(date, "표현식")
%Y
: 2023%M
: June%D
: 13thhour(datetime);
day(datetime);
month(datetime);
year(datetime);
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('2001-01-01', 'YYYY-MM-DD')
테이블을 합친다.
from 테이블1이름 테이블1 join 테이블2이름 테이블2 on 테이블1.기준칼럼명 = 테이블2.기준칼럼명
서브쿼리
with 테이블명 as 테이블
반복문 (for 느낌)
WITH recursive 테이블명 as(
select 초기값 as 칼럼명
union all
select 초기값+1 from 테이블명
where 반복조건
)
글 재미있게 봤습니다.