MSSQL 내외 연결(INNER JOIN)문구 상세 설명
시계 A 와 시계 B 가 두 개 있 습 니 다.
표 A 구 조 는 다음 과 같다.
Aid:int;표지 피 드,메 인 키,자체 증가 ID
Aname:varchar
데이터 상황 * from A.나 온 기록 상황 은 다음 그림 1 과 같다.
그림 1:표 데이터
표 B 구 조 는 다음 과 같다.
Bid:int;표지 피 드,메 인 키,자체 증가 ID
Bnameid:int
데이터 상황 * from B.나 온 기록 상황 은 다음 그림 2 와 같다.
그림 2:B 표 데이터
비 드 와 에 이 드 를 구분 해 오해 가 없 도록 하기 위해 비 드 의 시작 피 드 를 100 으로 설정 했다.
SQL 의 기본 지식 을 가 진 사람들 은 두 개의 시 계 를 연결 하려 면 반드시 연결 필드 가 있어 야 한 다 는 것 을 안다.위의 표 의 데 이 터 를 통 해 알 수 있 듯 이 A 표 의 Aid 와 B 표 의 Bnameid 는 두 개의 연결 필드 이다.
다음 그림 3 은 연 결 된 모든 기록 집합 간 의 관 계 를 설명 한다.
그림 3:연결 관계 도
지금 우 리 는 내부 연결 과 외부 연결 에 대해 일일이 설명 한다.
1.내부 연결:내부 연결 을 이용 하여 두 표 의 공공 부분의 기록,즉 그림 3 의 기록 집합 C 를 얻 을 수 있다.
문장 은 다음 과 같다:Select * from A JOIN B ON A.Aid=B.Bnameid
실행 결 과 는 다음 그림 4 참조:
그림 4:내부 연결 데이터
사실 select * from A,B where A.aid=B.Bnameid 와 Select * from A JOIN B ON A.aid=B.Bnameid 의 운행 결 과 는 같 습 니 다.
2.외부 연결:외부 연결 은 두 가지 로 나 뉘 는데 하 나 는 왼쪽 연결(Left)이다. JOIN)과 오른쪽 연결(Right JOIN)
(1)왼쪽 연결(왼쪽) JOIN):그림 3 공공 부분 기록 집 C+표 A 기록 집 A1.
문장 은 다음 과 같다:select * from A Left JOIN B ON A.Aid=B.Bnameid
실행 결 과 는 다음 그림 5 참조:
그림 5:왼쪽 연결 데이터
설명:
문장에서 A 는 B 의 왼쪽 에 있 고 Left 이다 Join,그래서 그 연산 방식 은 A 왼쪽 연결 B 의 기록=그림 3 공공 부분 기록 집합 C+표 A 기록 집합 A1 입 니 다.
그림 3 에서 C 의 존 재 를 기록 하 는 Aid 는:2 이다. 3 6 7 8
그림 1 에서 표 A 의 모든 기록 집합 A 에 존재 하 는 Aid 는 다음 과 같다. 2 3 4 5 6 7 8 9
표 A 기록 집 A1 에 존재 하 는 Aid=(그림 1,즉 A 표 에 있 는 모든 Aid)-(그림 3,즉 기록 집 C 에 존재 하 는 Aid) 4 5 9
이 를 통 해 그림 5 에서 A 왼쪽 연결 B 의 기록=그림 3 공공 부분 기록 집 C+표 A 기록 집 A1 을 얻 을 수 있다.
최종 결과 그림 5 에서 보 듯 이 Bnameid 와 Bid 비 NULL 의 기록 은 모두 그림 3 공공 부분 기록 집 C 중의 기록 이다.Bnameid 와 Bid 가 NULL 인 Aid 는 1 입 니 다. 4 5 9 의 네 가지 기록 은 바로 표 A 기록 집 A1 에 존재 하 는 에 이 드 다.
(2)오른쪽 연결(오른쪽 JOIN):그림 3 공공 부분 기록 집 C+표 B 기록 집 B1.
문장 은 다음 과 같다:select * from A Right JOIN B ON A.Aid=B.Bnameid
실행 결 과 는 다음 그림 6 과 같다.
그림 6:오른쪽 연결 데이터
설명:
문장에서 A 는 B 의 왼쪽 에 있 고 Right 이다 Join,그래서 그 연산 방식 은 A 오른쪽 연결 B 의 기록=그림 3 공공 부분 기록 집합 C+표 B 기록 집합 B1 입 니 다.
그림 3 에서 C 의 존 재 를 기록 하 는 Aid 는:2 이다. 3 6 7 8
그림 2 에서 표 B 의 모든 기록 집합 B 에 존재 하 는 Bnameid 는:2 이다. 3 6 7 8 11
표 B 레코드 집합 B1 에 존재 하 는 Bnameid=(그림 2 에서 B 표 의 모든 Bnameid)-(그림 3 에서 기록 집합 C 에 존재 하 는 Aid),최종 결과:11
이 를 통 해 그림 6 에서 A 오른쪽 연결 B 의 기록=그림 3 공공 부분 기록 집 C+표 B 기록 집 B1 을 얻 을 수 있다.
최종 결과 그림 6 에서 알 수 있 듯 이 Aid 와 Aname 비 NULL 의 기록 은 모두 그림 3 공공 부분 기록 집 C 중의 기록 이다.Aid 와 Aname 가 NULL 인 Aid 가 11 인 기록 은 바로 표 B 기록 집 B1 에 존재 하 는 Bnameid 이다.
요약:
위의 연산 해설 을 통 해 많은 사람들 이 이미 생각 했 을 것 이 라 고 믿 습 니 다.위의 상황(그림 3 의 관계 도 포함)은 모두 A 가 B 의 왼쪽 에 있 는 상황 일 뿐 입 니 다.
다음 문장 B 가 A 오른쪽 에 있 는 것 은 어떤 상황 이 나타 날 까요?
select * from B Left JOIN A ON A.Aid=B.Bnameid
select * from B Right JOIN A ON A.Aid=B.Bnameid
사실 그림 3 을 한 번 뒤 집 으 면 다음 과 같은 결론 을 얻 을 수 있다.
select * from B Left JOIN A ON A.aid=B.Bnameid 와 select * from A Right JOIN B ON A.aid=B.Bnameid 가 얻 은 기록 집 은 같 습 니 다.
그리고
select * from B Right JOIN A ON A.aid=B.Bnameid 와 select * from A Left JOIN B ON A.aid=B.Bnameid 가 얻 은 기록 집 도 마찬가지다.
처음으로 튜 토리 얼 과 비슷 한 스티커 를 썼 는데 저 처럼 SQL 의 연결 문 구 를 잘 이해 하지 못 하 는 친구 가 도움 이 되 었 으 면 좋 겠 습 니 다.응원 해 주 셔 서 감사합니다.