[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
자동등록방지 숫자입력

웹개발

번호 제목 글쓴이 날짜 조회수
42 [MySQL] user Table 권한설명 최고관리자 10-13 2,464
41 [NginX] Codeigniter를 위한 server config 최고관리자 09-09 3,113
40 [Nginx] 역할 최고관리자 09-09 3,047
39 [MySQL] Replace를 이용하여 데이타 내용 치환하기 최고관리자 09-08 2,038
38 [리눅스] Mysql Database 이름을 www.telepasi.com처럼 하면 안됨 최고관리자 09-08 1,993
37 [리눅스] CentOS vsftpd 설치 최고관리자 09-08 2,065
36 [리눅스] 사용자 목록 확인 (Linux User List) 최고관리자 09-08 14,250
35 [NginX] 리버스 프록시(Reverse Proxy)란 최고관리자 09-08 5,431
34 [리눅스] go lang - REST API를 위한 Gin 설치 최고관리자 09-07 2,082
33 [리눅스] go 환경설정 최고관리자 09-07 2,068
32 [리눅스] CentOS7 에서 go Lang 설치하기 최고관리자 09-07 2,040
31 [리눅스] Mysql 원격접속 허용하기 최고관리자 09-07 2,106
30 [서버설치] How to Install PHP 7, NGINX, MySQL on CentOS/RHEL 7.6 최고관리자 09-06 2,110
29 [서버 설치] mysql_secure_installation 최고관리자 09-06 2,025
28 [서버 설치] CentOS7 방화벽 설치 최고관리자 09-06 1,962
27 [DNS] abc.com www.abc.com 레코드 설정 최고관리자 09-05 1,995
26 [리눅스] httpd conf 위치 확인 및 conf 문법검사 명령 최고관리자 09-05 2,720
25 [리눅스] Apache 권한에 대한 참고 사항 최고관리자 09-04 4,714
24 [리눅스] CentOS Apache 주요 디렉토리 최고관리자 09-04 2,174
23 [리눅스] CentOS 6 vs CentOS 7 명령어 대응 최고관리자 09-04 2,302