INNER JOIN vs LEFT JOIN, 즉 질문. 오늘은이 두 조인 유형이 어떻게 사용되는지와 차이점이 무엇인지 간략하게 설명하겠습니다. 나중에 모델을 확장하고 훨씬 더 복잡한 쿼리를 작성할 수있을 때이 주제를 다시 살펴 보겠습니다.
데이터 변경
INNER JOIN과 LEFT JOIN, 우리가 현재 알고있는 것을 보자. 지금까지이 시리즈에서는 데이터베이스 및 테이블을 만드는 방법, 데이터로 테이블을 채우는 방법, 간단한 쿼리를 사용하여 테이블에 저장된 내용을 확인하는 방법 등 데이터베이스 기본 사항에 대해 설명했습니다. 이전 기사에서 두 테이블을 조인했습니다. 이제 다음 단계를 수행 할 준비가되었습니다.
하지만 이동하기 전에 다음 단계를 약간 변경하겠습니다. 우리의 데이터. 다음 INSERT INTO 명령을 사용하여 국가 테이블에 2 개의 행을 추가합니다.
이제 두 테이블의 내용을 확인합니다.
테이블 국가에 스페인과 러시아에 각각 하나씩 2 개의 새 행이 있음을 쉽게 알 수 있습니다. ID는 6과 7입니다. 또한 city 테이블에는 값이 6 또는 7 인 country_id가 없습니다. 이는 단순히 데이터베이스에 러시아 또는 스페인의 도시가 없음을 의미합니다. 이 사실은 나중에 사용할 것입니다.
INNER JOIN
다음 두 쿼리에 대해 논의 해 보겠습니다.
반환 된 결과는 아래 그림에 나와 있습니다.
p>
두 쿼리 모두 정확히 동일한 결과를 반환합니다. 이것은 우연이 아니라 두 가지 다른 방식으로 작성된 동일한 쿼리라는 사실의 결과입니다. 두 가지 방법 모두 정확하며 둘 중 하나를 사용할 수 있습니다.
첫 번째 쿼리에서는 쿼리의 FROM 부분 (FROM 국가, 도시)에서 사용하는 모든 테이블을 나열한 다음 조인을 사용했습니다. 쿼리의 WHERE 부분에있는 조건 (WHERE city.country_id = country.id). 이 조인 조건을 작성하는 것을 잊은 경우 두 테이블의 카티 전 곱을 갖게됩니다.
두 번째 쿼리에서는 쿼리의 FROM 부분 (FROM 국가)에 하나의 테이블 만 있습니다. 그런 다음 쿼리의 JOIN 부분에 두 번째 테이블과 JOIN 조건이 있습니다 (INNER JOIN city ON city.country_id = country.id).
두 쿼리가 모두 잘 작성되었지만 저는 다음과 같이 제안합니다. 테이블을 나열하고 쿼리의 WHERE 부분에서 조인하는 대신 항상 INNER JOIN을 사용합니다. 그 이유는 다음과 같습니다.
- 사용 된 테이블과 관련 JOIN 조건이 동일하기 때문에 가독성이 훨씬 좋습니다. 선. JOIN 조건을 생략했는지 여부를 쉽게 알 수 있습니다.
- 나중에 다른 JOIN을 사용하려면 (LEFT 또는 RIGHT) 이전에 INNER JOIN을 사용하지 않는 한 (쉽게) 할 수 없었습니다. that
이제 실제로 반환 된 쿼리에 대해 설명해 보겠습니다.
- 관련된 모든 국가 및 도시 쌍 (외래 키를 통해)
- 도시 테이블에 관련 도시가 없기 때문에 목록에 2 개의 국가 (스페인 및 러시아)가 없습니다.
LEFT JOIN
나는 이것을 반복 할 것입니다 – “우리는 도시 테이블에 관련 도시가 없기 때문에 목록에 2 개의 국가 (스페인과 러시아)가 없습니다”. 이것은 INNER JOIN과 LEFT JOIN을 비교할 때 매우 중요합니다.
어떤 경우에는 이러한 레코드도 결과에 포함되기를 원합니다. 예를 들어, 이러한 국가가 다른 테이블에 관련 레코드가 없다는 결과를보고 싶을뿐입니다. 이것은 통제의 일부가 될 수도 있고 사건을 계산하는 것일 수도 있습니다. 그 욕망의 동기가 무엇이든 우리는 기술적으로 그렇게 할 수 있어야합니다. 그리고 우리는 있습니다. 데이터베이스에서 LEFT JOIN은 정확히 그 작업을 수행합니다.
LEFT JOIN의 결과는 INNER JOIN의 결과와 동일 할 것입니다. + 우리는 “왼쪽”테이블에서 한 쌍이없는 행을 갖게됩니다. “오른쪽”테이블. 동일한 INNER JOIN 쿼리를 사용하고 INNER라는 단어를 LEFT로 바꿉니다. 결과는 다음과 같습니다.
INNER의 결과에 비해 2 개의 행이 더 있음을 쉽게 알 수 있습니다. JOIN 쿼리. 러시아와 스페인 행입니다. 둘 다 관련 도시가 없기 때문에이 두 행의 모든 도시 속성에는 NULL 값이 있습니다 (정의되지 않음). 이것이 INNER JOIN과 LEFT JOIN을 비교할 때 가장 큰 차이입니다.
RIGHT JOIN
최소한 RIGHT JOIN에 대해 듣게 될 것입니다. LEFT JOIN과 동일한 결과를 반환하므로 거의 사용되지 않습니다. 반면에 LEFT JOIN을 사용하는 쿼리는 테이블을 차례로 나열하기 때문에 훨씬 읽기 쉽습니다.
이것은 RIGHT JOIN을 사용하는 이전 쿼리와 동일합니다.
반환 된 값이 동일하다는 것을 알 수 있습니다.이 경우 도시 테이블의 값만 처음 5 개 열에 있고 country- 관련 값이 그 뒤에옵니다.
INNER JOIN vs LEFT JOIN
INNER JOIN vs LEFT JOIN?사실 그것은 전혀 문제가 아닙니다. 양쪽에 쌍이있는 레코드 만 반환하려면 INNER JOIN을 사용하고, “right”테이블에 쌍이 있는지 여부에 관계없이 “left”테이블의 모든 레코드가 필요한 경우 LEFT JOIN을 사용합니다. 또는 아닙니다. 두 테이블의 모든 레코드가 필요한 경우 쌍이 있는지 여부에 관계없이 CROSS JOIN을 사용해야합니다 (또는 LEFT JOIN 및 UNION을 사용하여 시뮬레이션). 이에 대한 자세한 내용은 다음 기사에서 확인할 수 있습니다.
목차
SQL 학습 : CREATE DATABASE & CREATE TABLE Operations
SQL 학습 : INSERT INTO TABLE
학습 SQL : 기본 키
학습 SQL : 외래 키
SQL 학습 : SELECT 문
SQL 학습 : INNER JOIN vs LEFT JOIN
SQL 학습 : SQL 스크립트
Learn SQL : 관계 유형
Learn SQL : 여러 테이블 결합
Learn SQL : 집계 함수
Learn SQL : 복잡한 SELECT 쿼리 작성 방법
SQL 학습 : INFORMATION_SCHEMA 데이터베이스
Learn SQL : SQL 데이터 유형
SQL 학습 : 이론 설정
SQL 학습 : 사용자 정의 함수
SQL 학습 : 사용자 정의 저장 프로 시저
SQL 학습 : SQL보기
SQL 학습 : SQL 트리거
SQL 학습 : SQL 쿼리 연습
SQL 학습 : SQL 쿼리 예
SQL 학습 : 수동으로 보고서 생성 SQL 쿼리 사용
SQL 학습 : SQL Server 날짜 및 시간 함수
SQL 학습 : 날짜 및 시간 함수를 사용하여 SQL Server 보고서 작성
SQL 학습 : SQL Server 피벗 테이블
SQL 학습 : Excel로 SQL Server 내보내기
SQL 학습 : SQL Server 루프 소개
SQL 학습 : SQL Server 커서
SQL 학습 : 데이터 삭제 및 업데이트를위한 SQL 모범 사례
SQL 학습 : 명명 규칙
SQL 학습 : SQL 관련 작업
SQL 학습 : SQL Server의 비동 등 조인
SQL 학습 : SQL 삽입
- 작성자
- 최근 게시물
그의 과거 및 현재 업무는 데이터베이스 설계 및 코딩에서 데이터베이스에 대한 교육, 컨설팅 및 작성에 이르기까지 다양합니다. 또한 잊지 마세요, BI, 알고리즘 생성, 체스, philately, 개 2 개, 고양이 2 개, 아내 1 명, 아기 1 명 …
LinkedIn에서 찾을 수 있습니다.
Emil Drkusic의 모든 게시물보기
- SQL 학습 : SQL 삽입-2020 년 11 월 2 일
- SQL 학습 : SQL Server의 비동 등 조인-2020 년 9 월 29 일
- SQL 학습 : SQL 관련 작업-2020 년 9 월 1 일