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