스파르타코딩클럽 엑셀보다쉬운 SQL (4주) 33기
4주차 - 수강일자 211003
With
subquery 를 각각 써주는 게 아니라 table로 명명시켜서 쿼리문 작성 편의 및 가시성을 높인다.
구조 예시
( subquery )를 하나의 column처럼 사용
with table1 as ( subquery ) t1,
table2 as ( subquery ) t2
select * from table
주의 점🔥
( subquery ) 마다 약어를 다 지정해줘야 한다.
적용 예시 - 4주 차 1번째 기록에 있는 예시
* 적용 전
select * from ( subquery ) s1
inner join ( subquery ) s2
on s1.column = s2.column
* 적용 후
with table1 as ( subquery ) s1,
table2 as ( subquery ) s2
select * from s1
inner join s2
on s1.column = s2.column
서브 쿼리가 많아지고 복잡해질수록 with 구문을 쓰는 것이 훨씬 가독성이 좋아진다.
Substringindex
특정 기준으로 문자를 잘라서 원하는 부분만 출력하기
- python의 split과 동일
- SQL은 python과 달리 0,1,2,3으로 세는 게 아니라 1,2,3,4로 센다. 다만 -1이 마지막을 뜻하는 것은 동일하다.
구조 예시
SUBSTRING_INDEX( 자를 칼럼명, '기준 문자', 자른 후 출력할 위치)
적용 예시
email 칼럼에 들어있는 spartacodingclub@naver.com와 같은 이메일들을 @단위로 쪼개서 naver.com 만 보고 싶을 때
방법 1
SUBSTRING_INDEX(email, '@', 2)
해석 : email을 @을 기준으로 잘라서 2번째에 있는 걸 출력해라
출력 값 : naver.com
방법 2
SUBSTRING_INDEX(email, '@', -1)
해석 : email을 @을 기준으로 잘라서 끝에 있는 걸 출력해라
출력 값 : naver.com
Substring
문자열을 특정 시점부터 특정 지점까지만 출력해라
구조 예시
SUBSTRING( 자를 칼럼명, 시점 위치 숫자로, 마지막 위치 숫자로)
적용 예시
created_at 칼럼에 들어있는 2020-07-07 15:00:22와 같은 일자-시간에서 날짜만 보고 싶을 때
SUBSTRING(created_at,1,10)
해석 : created_at에서 1번째 인 '2'부터 10번째에 위치한 '7'까지 출력해라
출력 값 : 2020-07-07
CASE
특정 조건에 따라 데이터를 구분할 때
- python의 if문과 비슷하다고 보면 편하다.
구조 예시 - case를 두 가지로 나눌 때
select column1, column2,
case when column3 > ( 값 ) then '출력문구'
else '출력문구2' end
from table
구조 예시 - case를 세 가지 이상으로 나눌 때
select column1, column2,
case when column3 > ( 값 ) then '출력문구'
when column3 > ( 값2 ) then '출력문구2'
else '출력문구3' end
from table
구조 예시 - 깔끔하게 정리할 때 / 실제 사용할 때
select column1, column2,
(case when column3 > ( 값 ) then '출력문구'
when column3 > ( 값2 ) then '출력문구2'
else '출력문구3' end) as Partition
from table
case 구문을 하나로 () 묶어주고 as로 alias 별칭을 만들어준다.
주의 점🔥
조건을 걸 때마다 when을 써준다. when 절이 끝난다고 해서 콤마를 붙이거나 하지 않는다. (파이썬과 다름)
강의 기록