brunch

You can make anything
by writing

C.S.Lewis

by 이상현 Sep 11. 2022

스파르타코딩클럽
[엑셀보다 쉬운, SQL]

SQL 쿼리문 문법 정리




SQL 쿼리문 문법 정리


SELECT : 원하는 컬럼 조회

WHERE : Select 쿼리문으로 가져올 데이터에 조건을 걸어주는 것


*WHERE절과 자주 같이 쓰는 문법

 같지 않음 : '!='

 범위 : 'BETWEEN a AND b' (a 이상 b 이하일 때)

 포함 : 'IN'

 패턴 : 'LIKE'


LIMIT : 일부 데이터만 가져오기

DISTINCT : 중복 데이터는 제외하고 가져오기

EX) SELECT count(distinct(name)) from users;

COUNT : 몇 개인지 숫자 세보기

GROUP BY : 묶어서 보고 싶은 컬럼(*범주의 통계를 보고 싶을 때)

ORDER BY : 정렬해서 보고 싶은 컬럼


JOIN : 두 테이블의 공통된 정보 (key값)를 기준으로 테이블을 연결해서 한 테이블처럼 보는 것

종류 : Left Join, Inner Join (+ Full Join/Right Join)

Ex)
SELECT t1. 컬럼명, t2. 컬럼명..
FROM 테이블1 AS t1
Join 테이블2 AS t2
ON t1.컬럼명 = t2.컬럼명


UNION ALL : 테이블을 세로로 연결

Ex)
SELECT
FROM 테이블1

UNION ALL

SELECT
FROM 테이블2


Subquery : 다른 쿼리 내부에 포함되어 있는 SELETE 문

-> WHERE/SELECT/FROM 절에서 유용하게 사용


1. WHERE에 들어가는 Subquery : WHERE 필드명 in (Subquery)

: Subquery의 결과를 조건에 활용하는 방식


Ex)
select * from users u

where u.user_id in (select o.user_id from orders o 

                                where o.payment_method = 'kakaopay');



2. SELECT에 들어가는 Subquery : select 필드명, 필드명, (subquery) from .. 

: 기존 테이블에 함께 보고싶은 통계 데이터를 손쉽게 붙이는 것


Ex) 

select c.checkin_id, c.user_id, c.likes, 

    (select avg(likes) from checkins c2

    where c2.user_id = c.user_id) as avg_like_user

from checkins c;


3. FROM 에 들어가는 Subquery (가장 많이 사용되는 유형!)

: 내가 만든 Select와 이미 있는 테이블을 Join하고 싶을 때 사용


Ex) 


select pu.user_id, a.avg_like, pu.point from point_users pu

inner join (

    select user_id, round(avg(likes),1) as avg_like from checkins

    group by user_id

) a on pu.user_id = a.user_id


WITH : '임시테이블'


Ex) 


with table1 as (

    select course_id, count(distinct(user_id)) as cnt_checkins from checkins

    group by course_id

    ), table2 as (

    select course_id, count(*) as cnt_total from orders

    group by course_id

)


select c.title,

       a.cnt_checkins,

       b.cnt_total,

       (a.cnt_checkins/b.cnt_total) as ratio

from table1 a inner join table2 b on a.course_id = b.course_id

inner join courses c on a.course_id = c.course_id


SUBSTRING_INDEX : 문자열 자르기


Ex) select user_id, email, SUBSTRING_INDEX(email, '@', 1) from users

: @를 기준으로 텍스트를 쪼개고, 그 중 첫 번째 조각을 가져오라는 뜻!


SUBSTRING : 문자열 일부만 출력


Ex) select order_no, created_at, substring(created_at,1,10) as date from orders


CASE WHEN : 조건에 따라 값 부여


Ex) 


select pu.point_user_id, pu.point,

case 

when pu.point > 10000 then '1만 이상'

when pu.point > 5000 then '5천 이상'

else '5천 미만'

END as lv

from point_users pu

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari