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

웹개발

번호 제목 글쓴이 날짜 조회수
102 [Git] git switch branch명 결과를 ftp로 업로드 하려면 최고관리자 06-02 10,017
101 [Git] git switch branch명 에서 바뀐파일(modifed File) 확인 최고관리자 06-02 4,502
100 [MySql] 테이블 내용 복사하기(인덱스 키 추가하기) 최고관리자 05-24 2,570
99 [Android] 안드로이드에서 PDF 미리보기가 안되는 이유 최고관리자 04-28 3,349
98 [PHPOffice] PHP 8.0 에서 PHPOffice 엑셀저장이 안되는 경우 최고관리자 04-26 1,642
97 [Javascript] window.location Value 최고관리자 04-18 1,583
96 [Git] git clone 과 git pull 의 차이점 최고관리자 04-14 1,302
95 [Git] 특정폴더만 pull 하기 최고관리자 04-14 1,314
94 [Upload] Nginx + PHP7.4 Upload 설정 최고관리자 04-10 1,196
93 [https] Certbot을 활용한 HTTPS 적용과 리다이렉트(ubuntu-nginx) 최고관리자 04-02 9,459
92 [Linux] Bash 명령어 활용 최고관리자 03-26 1,577
91 [MySQL] 중복 데이타 삭제하기 최고관리자 03-16 2,344
90 [Git] 중앙 원격 저장소, 자신의 원격 저장소, 로컬 저장소의 개념 최고관리자 03-01 1,411
89 [GitHub] Git 브랜치의 종류 및 사용법 (5가지) 최고관리자 03-01 1,361
88 Git 한글 메뉴얼 최고관리자 02-25 1,276
87 ERROR 1698 : Access denied for user 'root'@'localhost' 문제 해결 최고관리자 02-24 1,311
86 NGINX + PHP71 + PHP-FPM 설치하기 최고관리자 02-23 1,194
85 (function() { })() 의 의미는? 최고관리자 02-16 1,297
84 [참고] 부트스트랩(bootstrap) 사이트 개발 최고관리자 10-09 1,622
83 [JS] 디바운스(Debounce)와 스로틀(Throttle ) 그리고 차이점 최고관리자 09-14 1,824