[SQL] SQL Join에 대한 이해

# Table A

select * from A

/*--------------------------------------------------------

id username

1 홍길동

2 일지매

3 강감찬

--------------------------------------------------------*/


# Table B

select * from B

/*--------------------------------------------------------

no user_id school

1 1 서울대

2 2 부산대

3 2 동아대

--------------------------------------------------------*/



# Table C

select * from C

/*--------------------------------------------------------

no user_id school

1 1 전자과

2 2 화학과

3 3 무역과

        4      3              기계과

--------------------------------------------------------*/



# A와 B의 id가 같은(즉, 공통부분만) Row

select 

A.id,A.username,B.school 

from 

A join B on A.id = B.user_id

-- 중요한것은 B에 user_id가 같은 것이 여러개 있다면 id가 같은 Row가 여러개 나온다

/*--------------------------------------------------------

id username school

1 홍길동 서울대

2 일지매 부산대

2 일지매 동아대

--------------------------------------------------------*/




# 모든 A의 Row - 기준 테이블(A)에 B정보를 붙임

select 

A.id,A.username,B.school 

from 

A left join B on A.id = B.user_id

-- 중요한것은 B에 user_id가 같은 것이 여러개 있다면 id가 같은 Row가 여러개 나온다

/*--------------------------------------------------------

id username school

1 홍길동 서울대

2 일지매 부산대

2 일지매 동아대

3 강감찬 NULL

--------------------------------------------------------*/




# 모든 B의 Row - 기준 테이블(B)에 A정보를 붙임

select 

A.id,A.username,B.school 

from 

A right join B on A.id = B.user_id

-- 중요한것은 B에 user_id가 같은 것이 여러개 있다면 id가 같은 Row가 여러개 나온다

/*--------------------------------------------------------

id username school

1 홍길동 서울대

2 일지매 부산대

2 일지매 동아대

--------------------------------------------------------*/


# 모든 B의 Row

select 

A.id,A.username,B.school 

from 

A inner join B on A.id = B.user_id

-- join 과 동일 (inner join = join)

-- 표준 SQL과는 달리 MySQL에서는 JOIN, INNER JOIN, CROSS JOIN이 모두 같은 의미로 사용됩니다.

-- 아래처럼 표현할수도 있다면

select 

A.id,A.username,B.school 

from 

A , B

where

A.id = B.user_id


/*--------------------------------------------------------

id username school

1 홍길동 서울대

2 일지매 부산대

2 일지매 동아대

--------------------------------------------------------*/




SELECT a.id,a.username,b.school,c.major

from 

A as a

left join B as b ON a.id = b.user_id

left join C as c ON a.id = c.user_id

/*--------------------------------------------------------

id username school major

1 홍길동 서울대 전자과

2 일지매 부산대 화학과

2 일지매 동아대 화학과

3 강감찬 NULL 무역과

3 강감찬 NULL 기계과

--------------------------------------------------------*/



a00c4b81dc1276f3aa14d32762c1e171.png
c69bd40e5320cb41d68300d5381e0577.png
 
0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기
captcha
자동등록방지 숫자입력

웹개발

번호 제목 글쓴이 날짜 조회수
122 [Dart] Dart 문법 정리 최고관리자 09-09 1,664
121 [Flutter] absorbpointer-and-ignorepointer 최고관리자 09-08 1,019
120 [PHP] 타입선언 최고관리자 08-22 884
119 [PHP] error_level 셋팅과 실제 출력 최고관리자 08-21 965
118 [MySql] 타입지정시 괄호안의 숫자 최고관리자 08-18 1,021
117 [MySql] MySQL 최적의 데이터 타입 선택 방법 최고관리자 08-18 697
116 [MySql] 인덱스 조회시 주의 사항 최고관리자 08-18 737
115 [MySql] NOT NULL과 DEFAULT 를 동시에 쓸 필요가 있는가? 최고관리자 08-18 768
114 [Flutter] Row and Column 최고관리자 08-16 678
113 [Flutter] Linting 설정으로, 흔하게 실수할 수 있는 것을 build 전 방지하기. 최고관리자 08-16 762
112 [PHP] PHP 7.x PHP 8.x에서의 조건문 최고관리자 07-26 712
111 [JS] Webpack을 쓰는 이유 최고관리자 07-24 837
110 [Vue] Vue Router 최고관리자 07-22 720
109 [Vue] Vue.js 기본 원리 최고관리자 07-22 1,232
108 [MySql] 쿼리 결과를 합치는 union vs union all의 차이 최고관리자 07-10 746
107 [Vue] 일반적인 프로젝트의 구조에 대해 알아보자. 최고관리자 06-18 825
106 [JSP] vue등의 스크립트 분석을 위해 %태그 정도는 알자. 최고관리자 06-18 942
105 [MySql] 페이징(paging) 쿼리시 전체개수를 한번에 처리하는 방법 최고관리자 06-14 1,532
104 [MySql] Join vs Sub Query 비교 최고관리자 06-05 954
103 [SQL] SQL Join에 대한 이해 최고관리자 06-05 838