본문 바로가기

카테고리 없음

SQL 문법 정리

코딩스파르타 문법 정리. 

 

서브쿼리

  • Where 에 들어가는 Subquerywhere 필드명 in (subquery) 이런 방식으로요!
    • 예를 들면, 카카오페이로 결제한 주문건 유저들만, 유저 테이블에서 출력해주고 싶을 때는 아래와 같이 표현할 수 있겠죠.
    select * from users u where u.user_id in (select o.user_id from orders o where o.payment_method = 'kakaopay');
    • 쿼리가 실행되는 순서를 이렇게 상상하면 편해요!
    (1) from 실행: users 데이터를 가져와줌 (2) Subquery 실행: 해당되는 user_id의 명단을 뽑아줌 (3) where .. in 절에서 subquery의 결과에 해당되는 'user_id의 명단' 조건으로 필터링 해줌 (4) 조건에 맞는 결과 출력
  • Where은 조건문이죠? Subquery의 결과를 조건에 활용하는 방식으로 유용하게 사용합니다.
  • Select 에 들어가는 Subqueryselect 필드명, 필드명, (subquery) from .. 이렇게요!
    • 앞서 보았던것처럼, '오늘의 다짐' 데이터를 보고 싶은데 '오늘의 다짐' 좋아요의 수가, 본인이 평소에 받았던 좋아요 수에 비해 얼마나 높고 낮은지가 궁금할 수 있겠죠?
    • 그럼, 평균을 먼저 구해봅시다! user_id='4b8a10e6' 를 예시로!
    select avg(likes) from checkins c2 where c2.user_id = '4b8a10e6'
    • 그러면, 이렇게 표현할 수 있어요!
    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;
    • 쿼리가 실행되는 순서를 이렇게 상상하면 편해요!
    (1) 밖의 select * from 문에서 데이터를 한줄한줄 출력하는 과정에서 (2) select 안의 subquery가 매 데이터 한줄마다 실행되는데 (3) 그 데이터 한 줄의 user_id를 갖는 데이터의 평균 좋아요 값을 subquery에서 계산해서 (4) 함께 출력해준다!
      1. Select 절에 들어가는 Subquery 연습해보기
      • [연습] checkins 테이블에 course_id별 평균 likes수 필드 우측에 붙여보기힌트! → 이건 힌트 필요 없음! 🤓
        • [코드스니펫] course_id별 평균 like수 붙여보기select checkin_id, course_id, user_id, likes, (select avg(c2.likes) from checkins c2 where c.course_id = c2.course_id) from checkins c;
      • 감이 아직 안 오나요? 저랑 같이 해봐요!
      • [연습] checkins 테이블에 과목명별 평균 likes수 필드 우측에 붙여보기
        • [코드스니펫] 과목명별 평균 like수 붙여보기select checkin_id, c3.title, user_id, likes, (select round(avg(c2.likes),1) from checkins c2 where c.course_id = c2.course_id) as course_avg from checkins c inner join courses c3 on c.course_id = c3.course_id;
      • 직전에 실습했던 것에, courses 테이블을 join 하면 되겠죠?
  • Select는 결과를 출력해주는 부분이죠? 기존 테이블에 함께 보고싶은 통계 데이터를 손쉽게 붙이는 것에 사용합니다.
  • From 에 들어가는 Subquery (가장 많이 사용되는 유형!)
    • 자, 우선 유저 별 좋아요 평균을 먼저 구해볼까요?
    • → checkins 테이블을 user_id로 group by 하면 되겠죠?
    select user_id, round(avg(likes),1) as avg_like from checkins group by user_id
    • 자, 이제 여기서 해당 유저 별 포인트를 보고 싶다면?
    • → 그러면, 포인트와 like의 상관정도를 알 수 있겠죠?
    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
    • 쿼리가 실행되는 순서를 이렇게 상상하면 편해요!
    (1) 먼저 서브쿼리의 select가 실행되고, (2) 이것을 테이블처럼 여기고 밖의 select가 실행!
  • From은 언제 사용하면 좋을까요? 내가 만든 Select와 이미 있는 테이블을 Join하고 싶을 때 사용하면 딱이겠죠!

문자열 처리

substring, substring_index

서브쿼리

  • Where 에 들어가는 Subquerywhere 필드명 in (subquery) 이런 방식으로요!
    • 예를 들면, 카카오페이로 결제한 주문건 유저들만, 유저 테이블에서 출력해주고 싶을 때는 아래와 같이 표현할 수 있겠죠.
    select * from users u where u.user_id in (select o.user_id from orders o where o.payment_method = 'kakaopay');
    • 쿼리가 실행되는 순서를 이렇게 상상하면 편해요!
    (1) from 실행: users 데이터를 가져와줌 (2) Subquery 실행: 해당되는 user_id의 명단을 뽑아줌 (3) where .. in 절에서 subquery의 결과에 해당되는 'user_id의 명단' 조건으로 필터링 해줌 (4) 조건에 맞는 결과 출력
  • Where은 조건문이죠? Subquery의 결과를 조건에 활용하는 방식으로 유용하게 사용합니다.
  • Select 에 들어가는 Subqueryselect 필드명, 필드명, (subquery) from .. 이렇게요!
    • 앞서 보았던것처럼, '오늘의 다짐' 데이터를 보고 싶은데 '오늘의 다짐' 좋아요의 수가, 본인이 평소에 받았던 좋아요 수에 비해 얼마나 높고 낮은지가 궁금할 수 있겠죠?
    • 그럼, 평균을 먼저 구해봅시다! user_id='4b8a10e6' 를 예시로!
    select avg(likes) from checkins c2 where c2.user_id = '4b8a10e6'
    • 그러면, 이렇게 표현할 수 있어요!
    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;
    • 쿼리가 실행되는 순서를 이렇게 상상하면 편해요!
    (1) 밖의 select * from 문에서 데이터를 한줄한줄 출력하는 과정에서 (2) select 안의 subquery가 매 데이터 한줄마다 실행되는데 (3) 그 데이터 한 줄의 user_id를 갖는 데이터의 평균 좋아요 값을 subquery에서 계산해서 (4) 함께 출력해준다!
      1. Select 절에 들어가는 Subquery 연습해보기
      • [연습] checkins 테이블에 course_id별 평균 likes수 필드 우측에 붙여보기힌트! → 이건 힌트 필요 없음! 🤓
        • [코드스니펫] course_id별 평균 like수 붙여보기select checkin_id, course_id, user_id, likes, (select avg(c2.likes) from checkins c2 where c.course_id = c2.course_id) from checkins c;
      • 감이 아직 안 오나요? 저랑 같이 해봐요!
      • [연습] checkins 테이블에 과목명별 평균 likes수 필드 우측에 붙여보기
        • [코드스니펫] 과목명별 평균 like수 붙여보기select checkin_id, c3.title, user_id, likes, (select round(avg(c2.likes),1) from checkins c2 where c.course_id = c2.course_id) as course_avg from checkins c inner join courses c3 on c.course_id = c3.course_id;
      • 직전에 실습했던 것에, courses 테이블을 join 하면 되겠죠?
  • Select는 결과를 출력해주는 부분이죠? 기존 테이블에 함께 보고싶은 통계 데이터를 손쉽게 붙이는 것에 사용합니다.
  • From 에 들어가는 Subquery (가장 많이 사용되는 유형!)
    • 자, 우선 유저 별 좋아요 평균을 먼저 구해볼까요?
    • → checkins 테이블을 user_id로 group by 하면 되겠죠?
    select user_id, round(avg(likes),1) as avg_like from checkins group by user_id
    • 자, 이제 여기서 해당 유저 별 포인트를 보고 싶다면?
    • → 그러면, 포인트와 like의 상관정도를 알 수 있겠죠?
    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
    • 쿼리가 실행되는 순서를 이렇게 상상하면 편해요!
    (1) 먼저 서브쿼리의 select가 실행되고, (2) 이것을 테이블처럼 여기고 밖의 select가 실행!
  • From은 언제 사용하면 좋을까요? 내가 만든 Select와 이미 있는 테이블을 Join하고 싶을 때 사용하면 딱이겠죠!

문자열 처리

substring, substring_index