SQL 의 왼쪽 연결, 오른쪽 연결, 전체 연결

SQL 의 왼쪽 연결, 오른쪽 연결, 전체 연결
우 리 는 시계 연결 을 소 개 했 는데, 더 정확히 말 하면 inner joins 仔 控 仔 접 이다.두 장의 표 에서 서로 일치 하 는 기록 만 을 선택 합 니 다. 따라서 때때로 우리 가 필요 로 하 는 기록 이 포함 되 지 않 을 수도 있 습 니 다.
이 개념 을 더욱 잘 이해 하기 위해 서 우 리 는 두 개의 시 계 를 소개 하여 시범 을 보 였 다.스코틀랜드 의회의 정당 표 (party) 와 의원 표 (msp).

                 
                  party(Code,Name,Leader)
Code:     
Name:     
Leader:     
                 

                  
                   msp(Name,Party,Constituency)
Name:    
Party:         
Constituency:   
                  

왼쪽 연결, 오른쪽 연결, 전체 연결 을 소개 하기 전에 데이터베이스 에서 중요 한 개념 이 있 습 니 다. 즉, 빈 값 (NULL) 입 니 다.때때로 표 에서 더 정확히 말 하면 일부 필드 값 이 비어 있 을 수 있 습 니 다. 이것 은 이 데이터 가 어떤 값 인지 모 르 거나 존재 하지 않 기 때 문 입 니 다.
빈 값 은 문자열 의 빈 칸 과 같 지 않 고 숫자 형식의 0 도 아 닙 니 다.따라서 특정한 필드 값 이 빈 값 인지 판단 할 때 =, < > 이 판단 자 를 사용 할 수 없습니다.빈 값 필드 가 있 는 기록 을 선택 하려 면 전용 구문 이 필요 합 니 다. 마찬가지 로 빈 값 이 포함 되 지 않 은 기록 을 IS NOT NULL 로 선택 할 수 있 습 니 다.
예 를 들 어 지도자 가 없 는 정당 을 뽑 았 다.(이상 하 게 생각 하지 마 세 요. 스코틀랜드 의회 에 이런 정당 이 있 습 니 다)

                      
                       SELECT code, name FROM party
WHERE leader IS NULL
                      

또 한 의원 이 당 에서 제명 되 어 그 가 누구 인지 보 자.(즉 해당 의원 의 정당 은 빈 값 이다)

                        
                         SELECT name FROM msp 
WHERE party IS NULL
                        

자, 왼쪽 연결, 오른쪽 연결, 전체 연결 이 무엇 인지 본론 으로 들 어가 보 자.A left join (왼쪽 연결) 은 모든 왼쪽 표 의 기록 을 포함 하고 심지어 오른쪽 표 에 일치 하 는 기록 이 없습니다.마찬가지 로 같은 이치 의 right join (오른쪽 연결) 도 존재 한다. 즉, 모든 오른쪽 표 의 기록 을 포함 하고 심지어 왼쪽 표 에 일치 하 는 기록 이 없다.
풀 join (전체 연결) 은 말 그대로 좌우 표 의 모든 기록 이 선택 된다.여기까지 말 하면 어떤 사람 은 도대체 무엇이 라 고 하 는 지 물 어 볼 수 있다. 모든 왼쪽 표 의 기록 을 포함 하고 심지어 오른쪽 표 에 그것 과 일치 하 는 기록 이 없다.
우 리 는 실례 를 하나 보 자.

                            
                             SELECT msp.name, party.name
FROM msp JOIN party ON party=code
                            

이것 은 우리 가 지난 절 에 배 운 Join (주의: inner join) 입 니 다. 이 문장의 본 뜻 은 모든 의원 의 이름과 그 가 속 한 정당 을 열거 하 는 것 입 니 다.
유 감 스 럽 지만, 우 리 는 이 조회 결과 에 두 명의 의원 이 빠 진 것 을 발견 했다. 그것 이 바로 Canavan MSP, Dennis 이다.왜 냐 면 두 의원 은 어느 정당, 즉 이들 의 정당 필드 (Party) 가 빈 값 이기 때문이다.그렇다면 왜 어떤 정당 에 도 속 하지 않 으 면 알 아내 지 못 할 까?빈 값 이 이상 하기 때문이다.의원 표 에 있 는 정당 필드 (Party) 의 빈 값 이 정당 표 에서 해당 하 는 기록 을 찾 을 수 없 기 때문이다. 즉, FROM msp JOIN party ON party = code 는 이 기록 을 연결 하지 않 고 걸 러 냈 기 때문이다.이 구문 에서 msp 는 Join 의 왼쪽 에 있 고 모든 것 을 왼쪽 표 라 고 합 니 다.파 티 는 Join 의 오른쪽 에 있 습 니 다. 모든 것 을 오른쪽 표 라 고 합 니 다.
이제 이 말 을 살 펴 보 자. "모든 왼쪽 표 의 기록 을 포함 하고 심지어 오른쪽 표 에 일치 하 는 기록 이 없다" 는 뜻 은 잘 알 겠 지.아래 의 이 문 구 를 집행 하면 정당 이 없 는 두 의원 은 빠 뜨 릴 수 없다.

                                
                                 SELECT msp.name, party.name
FROM msp LEFT JOIN party ON party=code
                                

오른쪽 연결 에 대해 서 이 조 회 를 보면 알 수 있 습 니 다.

                                  
                                   SELECT msp.name, party.name
FROM msp RIGHT JOIN party ON msp.party=party.code
                                  

이 조회 결 과 는 의원 이 없 는 정당 은 포함 되 지만 정당 이 없 는 의원 은 포함 되 지 않 는 다.그렇다면 의원 이 없 는 정당 을 포함해 야 하고 정당 이 없 는 의원 을 포함해 야 하 는데 어떻게 해 야 할 까? 참, 전 접속 (full join).

                                    
                                     SELECT msp.name, party.name
FROM msp FULL JOIN party ON msp.party=party.code
                                    

좋은 웹페이지 즐겨찾기