4주차 강의

차승준·2022년 9월 11일
0

서브쿼리는 '조건 안의 조건'으로, inner join과 다르게 이런 저런 내용을 더 추가할 필요없이 직관적으로 안에 select 문을 추가하면 되는 것이었따.

select u.user_id, u.name, u.email from users u
where u.user_id in (
	select user_id from orders
	where payment_method = 'kakaopay'
)

서브쿼리 안에 서브쿼리가 또 들어갈 수 있고, 그렇기에 자칫 잘못하면 코드가 지저분하게 될 수 있다.

그렇기에 with절을 사용하면 더욱 깔끔하게 정리할 수 있다.

'특정 테이블 a의 원하는 a.필드의 값을 호출하는 select절'을 아래와 같이 나열한다.

with 'select절 a', 'select절 b'

이렇게 하면 최종적으로 원하는 SQL값을 출력할 때 a.필드값, b.필드값을 코드로 적어내리며 원하는 순서대로 배치하면 된다.

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

원하는 데이터를 호출하고 내 맘대로 데이터 값들을 나열하여 마음에 드는 표를 뽑을 수 있으니, 이제 호출한 데이터를 편집하는 법을 배울 차례다.

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

위의 두 코드는 SUBSTRING_INDEX을 이용하여 각각 @를 기준으로 앞의 문자열(1)과 뒤의 문자열(-1)을 호출하는 코드이다.
이를 통해 이메일에서 아이디나 도메인 둘 중 하나만 호출할 수 있다.
앞에서 where 조건절을 배울 때 %를 통한 '특정 문자를 포함한 데이터 호출'과는 사뭇 다른 방식이다.
다음은 SUBSTRING_INDEX처럼 '범위'가 아니라 갯수로 호출하는 방식이다.

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

substring은 첫 번째(1) 자리의 데이터를 포함한 열 개(10) 데이터를 호출하는 방식이다.

예를 들면 '2022-09-11'라면 총 10문자이며 (created_at,1,10)라면 첫번째 자리(2)부터 10개의 데이터(2022-09-11)를 호출한다는 뜻이다.

혹은 (created_at,6,5)라면, '09-11'로 출력될 것이다.

select pu.point_user_id, pu.point,
case 
when pu.point > 10000 then '잘 하고 있어요!'
else '조금 더 달려주세요!'
END as '구분'
from point_users pu;

다음으로 배운 것은 Case문을 다루기다.
when절은 여러 개 사용하여 조건 가짓 수를 늘릴 수 있으며, 조건에 충족되지 않는 모든 결과들은 else에 의해 결정된다.
case문을 끝내고자 한다면 반드시 END를 써야한다.

profile
멋진 개발자가 되고 싶어요.

0개의 댓글