ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL 4주차(1)
    SQL 2023. 5. 8. 15:16

    https://teamsparta.notion.site/SQL-4-e8025c63b6bd4e6bb27ae43da874350d#539b3f2554d74fea918e80f3738102fb

     

    Subquery 서브쿼리

     

    kakaopay로 결제한 유저들의 정보 보기 (user id, email, name)

    테이블 = orders, users

     

    1. 첫번째 방법

    select u.user_id, u.name, u.email from orders o

    inner join users u on o.user_id = u.user_id

    where o.payment_method = 'kakaopay'

     

    2. subquery를 이용한 두번째 방법 (두개의 select를 하고, 괄호 안에 구해야 하는 정보가 있는 select 넣음)

    서브쿼리는 괄호안에 있는 쿼리를 이야기하며,

    서브쿼리는 아래와같이 where절에 들어갈수도 있고, select절이나, from절에 들어갈 수도 있다.

     

    select * from users

    where user_id in ( )  -> 괄호 안에 아래를 넣음. 두 테이블은 user_id로 이어짐.

     

    select user_id from orders

    where payment_method = 'kakaopay'   

     

     

     

    * 를 구해야 하는 user_id, name, email 값으로 바꿈

    괄호밖의 select는 구해야 하는 값을 넣고

    괄호안에 넣은 select는 두 테이블이 공통분모 user_id로 바꿈

     

    select user_id, name, email from users

    where user_id in (

                    select user_id from orders

                    where payment_method = 'kakaopay'

    )

     

    1. where절에 들어가는 Subquery : where 필드명 in (subquery)

     

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

     

    3. from 절에 들어가는 Subquery : (가장많이사용됨) 내가 만든 Select와 이미 있는 테이블을 Join하고 싶을 때

     

     

    1. where절에 들어가는 Subquery : 위에 한것. where 필드명 in (subquery)

    kakaopay로 결제한 유저들의 정보 보기.

     

    select user_id, name, email from users

            where user_id in (

            select user_id from orders

    where payment_method = 'kakaopay'

    )

     

     

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

    유저 ID별 평균 likes 구하기 (테이블 : users, checkins)

    구해야하는 필드값은 checkin_id, user_id, likes, 유저별 평균likes

    select * from checkins

    where user_id = '4b8a10e6' -> 해당 유저의 정보 구하기.

     

    select avg(likes) from checkins  ->  like의 평균

    where user_id = '4b8a10e6'

     

    select * from checkins

    여기에서 구하고자 하는 값이 checkin_id, user_id, likes 이므로,

    select checkin_id, user_id, likes from checkins  

     

     

    위를 아래와 같이 바꿈▼ 아래를 괄호에 넣음. select 필드명, 필드명, (subquery) from 형태

     

     

    괄호에 넣으면 다음과 같이 됨

     

      

    -> checkin_id, user_id, likes가 나올 때마다 괄호 안의 쿼리를 실행함.

    checkins에 별칭 c (allias)붙여주고 구하고자 하는 데이터값에도 앞에 c 붙이기

    그리고, 샘플 user_id였던 '4b8a10e6'을 c.user_id로 바꿈.

     

     

    별칭 as 붙임. 

     

     

    3. from 절에 들어가는 Subquery : (가장많이사용됨) 내가 만든 Select와 이미 있는 테이블을 Join하고 싶을 때

     

    유저별 좋아요 평균 구하기. (~별 : group by, 테이블 : checkins)

     

    select user_id, avg(likes) from checkins

    group by user_id

     

    소수점 맞춰주기

    select user_id, round(avg(likes),2) from checkins

    group by user_id

     

    포인트가 많은  user가 likes도 많이 받았을까? 찾아보기.

    (테이블 : point_users, users, checkins)

     

    select user_id, point from point_users pu

     

    ▲위에서 구한 이 두개를 합치면 포인트가 많은  user가 likes도 많이 받았는지 확인가능함.

     

     

     

    -> inner join으로 묶음.

    괄호안의 subquery를 a로 설정하고, (괄호뒤에 a쓰면 설정됨), inner join으로 pu.user_id = a.user_id 묶음. 

     

    그리고나서 평균값은  별칭으로 as avg_likes 쓰고, select구문에도 넣음.

    'SQL' 카테고리의 다른 글

    SQL 기본  (0) 2023.05.16
    SQL 4주차(2)  (0) 2023.05.08
    SQL 3주차  (0) 2023.05.07
    SQL 2주차  (0) 2023.05.07
    SQL 1주차  (0) 2023.05.06

    댓글

Designed by Tistory.