SQL-structured query language

SQL week 3 - sql 명령어 ; join and union

codingdaddy 2023. 1. 11. 13:15

Join이란? 두 테이블의 공통된 정보 (key값*)를 기준으로 테이블을 연결해서 한 테이블 처럼 보는 것을 의미해요.

 

가령   user_id 필드를 기준으로 users 테이블orders 테이블연결

 

'key'  ======    user_id 처럼 동일한 이름과 정보가 담긴 필드를 두 테이블에 똑같이 담아놓는답니다. 이런 필드를 두 테이블을 연결시켜주는 열쇠라는 의미로 'key'

 

 

 

key값 :  (checkins 테이블)  user id 와 users테이블의 user id : 

 

 

Join의 종류: Left Join, Inner Join

innner join  교집합

 

select * from users u

inner join point_users p

on u.user_id = p.user_id;

 

orders 테이블에 users 테이블 연결해보기

checkins 테이블에 users 테이블 연결해보기

 

enrolleds 테이블에 courses 테이블 연결 

-Inner Join을 사용해서 '수강 등록' 테이블에, 과목 테이블을 붙여보기

select * from enrolleds e

inner join courses c

on e.course_id = c.course_id;

쿼리가 실행되는 순서: from → join → select

from enrolleds: enrolleds 테이블 데이터 전체를 가져오고

inner join courses on e.course_id = c.course_id: courses를 enrolleds 테이블 에 붙이며

enrolleds 테이블의 course_id와 동일한 course_id를 갖는 courses 의 테이블을 붙이기

그리고

 

select * : 붙여진 모든 데이터를 출력

 

Join과 함께 연습

과목별 오늘의 다짐 갯수 세어보기

 

point_users 테이블에 users 테이블 연결해서 순서대로 정렬해보기

유저의 포인트 정보가 담긴 테이블에 유저 정보를 연결해서, 많은 포인 트를 얻은 순서대로 유저의 데이터를 뽑아보기

 

orders 테이블에 users 테이블 연결해서 통계치 내보기

주문 정보에 유저 정보를 연결해 네이버 이메일을 사용하는 유저 중, 성 씨별 주문건수를 세어보기

 

쿼리가 실행되는 순서: from → join → where → group by → select

결제 수단 별 유저 포인트의 평균값

 

결제하고 시작하지 않은 유저들을 성씨별로 세어보기

 

과목 별로 시작하지 않은 유저들을 세어보기

웹개발, 앱개발 종합반의 week 별 체크인 수를 세어볼까요? 보기 좋게 정리하기

 

group by, order by에 콤마 로 이어서 두 개 필드

 

join 할 테이블: courses 에, checkins 를 붙이기

 

8월 1일 이후에 구매한 고객들만 

-join 할 테이블: courses 에, checkins 를 붙이고! + checkins 에, orders 를 한번 더 붙이기

 

users 테이블과 ↔ point_users 테이블을 left join

유저 중에, 포인트가 없는 사람(=즉, 시작하지 않은 사람들)의 통계!

 

 

7월10일 ~ 7월19일에 가입한 고객 중, 포인트를 가진 고객의 숫자, 그리고 전체 숫자, 그리고 비율

 

Union을 이용

1.