> 백엔드 개발 > PHP 튜토리얼 > 3 더 합류해야합니다

3 더 합류해야합니다

Joseph Gordon-Levitt
풀어 주다: 2025-02-16 13:06:13
원래의
523명이 탐색했습니다.

3 더 합류해야합니다 키 테이크 아웃

이 기사는 두 개의 테이블이있는 서적 대출 데이터베이스의 간단한 예를 사용하여 SQL에 왼쪽 조인, 오른쪽 조인, 내부 조인 및 외부 조인을 사용하는 것을 설명합니다. SQL 조인의 '왼쪽'과 '오른쪽'이라는 개념은 소스 순서에 지나지 않습니다. 가입 키워드 앞에 언급 된 테이블은 '왼쪽'테이블이고 '오른쪽'테이블 이후 테이블입니다. 이 기사는‘do n't’또는‘not’이라는 단어를 포함하는 쿼리에 유용한 제외 조인 개념을 소개합니다. 이 조인은 데이터를 제외하기 위해 WHERE 절을 사용하여, 특히 NULL 값을 찾을 때. 배제와의 외부 조인은 MySQL에서 지원되지 않지만 테이블간에 연결되지 않은 데이터를 선택하는 데 유용하다고 설명됩니다. WHERE 절은 실제 값으로 늘어날 수없는 필드에 항상 사용되어야한다는 점이 강조됩니다. 또한 Cross Join은 표 B의 모든 행에 표 A의 모든 행과 일치하는 독특한 결합입니다.

두 데이터베이스 테이블에서 데이터를 결합하고 필요한 정보를 필터링하는 방법에는 여러 가지가 있습니다. Craig Buckler는 이해에 대한 인기있는 작품을 썼습니다. 즉, 내면, 왼쪽, 오른쪽 및 전체 외부. 이 기사는 그 기사의 확장입니다. 이걸 빨리 요약 해 봅시다. 두 개의 테이블, 하나는 고객 용, 책은 책 대출 데이터베이스를 설정하기위한 책입니다.

  • 고객 테이블
  • id FirstName 마지막 이름 book_id
  • 1 조 불다 1 2 계집애 암사슴 2 3 괴롭히다 까마귀 2 4 제프리 눈 0
  • 책 테이블
  • id 제목
  • 1 스타 워즈 2 쥬라기 공원 3 작은 여자 4 톰 소여 책 테이블에는 모든 책마다 한 줄이 있습니다 고객 테이블에는 한 번에 대출로 한 권의 책만 보유 할 수있는 각 고객마다 한 행이 있습니다. 대출에 대한 책이 없다면 Book_id는 0이거나 빈 문자열입니다.
  • 이것은 가능한 한 이해하기 위해 조인을 명확하게 만드는 매우 간단한 예입니다! 왼쪽 가입은 여기에서 왼쪽 가입이 될 것입니다.“ 대출 책을 포함하여 모든 고객을 보여주세요. ”.
  • 이미지에서 왼쪽 원 또는 테이블의 모든 데이터가 결과 세트에 포함되어 있음을 알 수 있습니다. 오른쪽 테이블에서 책 테이블과 겹치는 데이터 만 포함됩니다. 이것은 왼쪽 결합을 사용하면 오른쪽 테이블의 일부 데이터가 제외 될 수 있음을 의미합니다.
올바른 가입은“ 내 도서관의 모든 책을 빌려 준 고객과 함께 보여줍니다.

이 이미지에서는 오른쪽 테이블의 모든 데이터가 결과 세트에 포함되어 있음을 알 수 있습니다. 고객 테이블과 겹치는 데이터 만 포함됩니다. 즉, 오른쪽 조인을 사용하면 왼쪽 테이블의 일부 데이터가 제외 될 수 있습니다.

외부 조인은“ 그들 사이의 연결에 관계없이 모든 대출과 모든 책을 보여줘.

이 이미지에서는 일부 데이터가 겹치는지 여부에 관계없이 두 테이블의 모든 데이터가 포함되어 있음을 알 수 있습니다. 이와 같은 쿼리가 완료되면 결과에 겹치지 않는 데이터가 있고 해당 필드는 NULL로 설정됩니다. . 내부 조인은“ 고객 만 대출로 보여줍니다. ”

여기서는 데이터가 왼쪽 및 오른쪽 테이블에서 제외 될 수 있음을 알 수 있습니다. 책이 없으면 고객이 보이지 않으며 책이 빌려지지 않으면 책을 볼 수 없습니다! 3 더 합류해야합니다. 이것은 가장 일반적인 유형의 데이터이며 키워드 조인 자체를 사용할 때 기본 동작입니다. 추가 된 단어 "내부"는 일반적으로 필요하지 않습니다 어쨌든“왼쪽”과“오른쪽”은 무엇을 의미합니까? 당신은 "왼쪽"과 "오른쪽"을 소스 순서에 지나지 않는다고 생각할 수 있습니다. 이 쿼리를보십시오 :

가입 키워드를 사용하기 전에 테이블 고객을 언급 한 주목하십시오. 이것은 고객이 나의 "왼쪽"테이블임을 의미합니다. 그것에 대해 생각하는 또 다른 방법은 조인 키워드의 왼쪽에 어떤 테이블이 있는지 묻는 것입니다. 몇 가지 경고 :

단순히 하나의 테이블이 "왼쪽"이기 때문에 모든 레코드를 선택한다는 의미는 아닙니다. 이것은 소스 순서가 아닌 왼쪽 조인 또는 오른쪽 조인의 기능입니다! 왼쪽 테이블 인 테이블은 선택 섹션에서 열을 구체적으로 선택하지 않는 한 결과 세트에서 열이 먼저 나열됩니다. ON 키워드 후 테이블 순서는 중요하지 않으며 교체하면 동일한 결과를 반환합니다.

충분한 검토. 이 새로운 조인은 무엇입니까? 글쎄, 그들은 "새로운"것이 아니라 추가 질문을 쿼리하는 방법 일뿐입니다. 쿼리에서 "do n't"또는 "not"이라는 단어로 질문에 대한 답을 어떻게 찾을 수 있습니까? 대출 책이없는 모든 고객을 보여주세요. 대출되지 않은 모든 책을 보여주세요. 왼쪽으로 제외 이 그래픽을 살펴보십시오. 그늘진 영역에서 위의 결합과의 차이점을 주목하십시오.

이것은 왼쪽 결합처럼 보이지만 더 이상 "오버랩"데이터가 포함되어 있지 않습니다. 왜? 이것은 대출에 책이없는 고객을 보여주는 것과 동일합니다. "아마도 책없이 모든 고객을 선택하고 특별 할인 된 뉴스 레터를 보내고 싶습니까? . 당신이 영리하다면 당신은 같은 일을하기 위해 0의 book_id에 대한 고객 테이블을 검색 할 수 있다고 생각할 수 있습니다. 이 예에서는 효과가 있지만 대부분은 그렇지 않습니다. 테이블이 설계되는 방식에 따라 다릅니다 쿼리는 다음과 같습니다 우리는 이제 WHERE 절을 포함 시켰습니다. WHERE 절이있을 때마다 데이터를 제외하거나 거의 검색처럼 필터링하는 것입니다. 그렇다면 왜 우리는 책을 찾고 있습니까? 왜 그게 널이 될까요? 표준 왼쪽 결합을 실행하고 반환하는 데이터를 보자. . 왼쪽 결합 리턴 데이터

id FirstName 마지막 이름 book_id

id1 제목

1 조 불다 1 1 스타 워즈 2 계집애 암사슴 2 2 쥬라기 공원 3 괴롭히다 까마귀 2 2 쥬라기 공원 4 제프리 눈 0 널 널 문제를 볼 수 있습니까? 이것은 왼쪽 결합으로, 고객 테이블의 모든 데이터가 책과의 중첩에 관계없이 포함되어 있음을 의미합니다. Jeffrey Snow가 포함되어 있지만 대출에 관한 책이 없습니다. 이것이 "ID1"및 "Title"열이 NULL로 설정된 이유입니다. 테이블이 결합되면 그에게 링크 된 책 제목이나 책 ID가 없습니다. 우리가“”를 포함하여 모든 고객을 보여 주면 Jeffrey가 대출에 관한 책이 있든 상관없이 고객이기 때문에 위의 데이터를 원할 것입니다. 이 경우 왼쪽 결합의 기능입니다.

<span>SELECT *
</span><span>FROM customers
</span><span>LEFT JOIN books
</span><span>ON customers.book_id = books.id
</span>
로그인 후 복사
우리가“에 책이없는 고객을 보여주십시오”라는 질문을한다면 이제 무엇을 찾아야하는지 완벽하게 이해됩니다. 우리는 Books.Id 열에 null을 볼 수있는 고객 만 선택하면됩니다 (가입시,“ID”라는 두 개의 열이 있으므로 ID1이 표시됩니다). Books.id가 Null 인 위치를 추가하면 표준 Where 절로이 작업을 수행합니다. 이제 결과는 다음과 같이 필터링됩니다 id FirstName 마지막 이름 book_id id1 제목

4 제프리 눈 0 널 널 당신은 이제 대출에 책이없는 모든 고객이 있습니다.

제외와 함께 가입 올바른 조인으로 똑같이 해 보겠습니다. 누구에게도 빌려주지 않은 모든 책을 찾아 봅시다.

일반 권리 조인은 대출 여부에 관계없이 모든 책을 반환 할 수 있습니다. 결과 세트는 다음과 같습니다. id FirstName 마지막 이름 book_id 1 조 불다 1 1 스타 워즈 2 계집애 암사슴 2 2 쥬라기 공원 3 괴롭히다 까마귀 2 2 쥬라기 공원 널 널 널 널 3 작은 여자 널 널 널 널 4 톰 소여 이것은 조금 다르게 보입니다. 먼저, Jurassic Park가 두 번 나열되어 있음을 알 수 있습니다. 두 사람이 대출에 관한 책을 가지고 있고 데이터베이스가 각 경기마다 행을 반환하기 때문입니다. 고객 테이블의 모든 열은 작은 여성과 Tom Sawyer에게는 무효가되어 해당 타이틀을 빌리지 않았으므로 겹치는 데이터가 없기 때문에 결과를 ​​예측할 수 있어야합니다. 우리는 대출되지 않은 책만 얻습니다. id1 제목 . 이와 같은 이상한 결합은 문자 그대로 테이블 사이에 연결없이 데이터를 선택 해야하는 경우 유용 할 수 있습니다. 아마도 당신은 고아 데이터를 사냥하거나 변환 한 일부 오래된 데이터베이스에서 불일치를 찾고있을 것입니다. 이 쿼리의 결과는 다음과 같은 것을보고 데이터를 반환합니다. id FirstName 마지막 이름 book_id

id1 제목

1 제프리 눈 0 널 널 널 널 널 널 3 작은 여자 널 널 널 널 4 톰 소여 Craig Buckler가 노조와 설명한 방법을 사용하여 외부 조인을 달성 할 수는 있지만 잠재적 인 문제는 없습니다. MySQL에서 전체 외부 조인을 시뮬레이션하기위한 최고의 Google 결과는 2006 년부터 여기에서 찾을 수 있습니다. 다소 복잡해질 수 있습니다.

위의 코드에서 알아야 할 주요 사항은 두 테이블에서 제외하기를 원하기 때문에 조인의 양쪽에서 NULL을 확인하는 것입니다. 양쪽을 확인하지 않고, 우리는 단순히 방금 이야기 한 다른 합류 중 하나로 끝납니다. 이와 같은 쿼리가 얼마나 기괴하거나 지원되었는지에 관계없이, 나는 그것을 사용해야 할 이유를 생각할 수 있다면 유효한 유형의 조인이기 때문에 그것을 포함시키고 싶었습니다.

기타 생각 당신은 항상 실제 필드를 사용하여 NULL을 테스트했다면, 우리가 원하지 않는 행이 포함됩니다! . 크로스 조인 (Cross Join)이라는 또 다른 조인이 있습니다. 한 사용자를 한 권의 책과 일치시키는 대신 모든 사용자가 모든 책과 일치했다고 상상해보십시오! 예, 이는 20 권의 책과 30 권의 고객이있는 경우 크로스 조인으로 30*20 행의 데이터가 발생합니다! 이것이 어떻게 유용 할 수 있는지에 대한 예를 들어이 기사를 확인하십시오.

MySQL에서 조인, 내부 조인 및 크로스 조인은 구문 동등성이며 서로 대체 할 수 있습니다. Join 및 Inner Join이 동일한 작업을 수행하고 On 키워드를 사용하여 열을 일치시켜야하기 때문입니다. 크로스 조인을 사용할 때는 키워드가 없습니다. 테이블 A의 모든 행을 표 B의 모든 행에 일치시키기 때문에 없습니다. 결론 나는이 여분의 합류가 당신에게 의미가 있기를 바랍니다. 어떤 것이 다른 것과 일치하지 않는 테이블 사이에 데이터를 요구할 때마다 그것들을 사용하는 것에 대해 생각하십시오. “이전에 주문하지 않은 모든 고객을 찾으십시오” “블랙리스트에 있지 않은 모든 고객을 찾으십시오” “판매되지 않은 모든 제품을 찾으십시오”. “책을 빌리지 않는 모든 고객을 찾으십시오” “최근에 걷지 않은 모든 개를 찾으십시오”. “지원 티켓을 보낸 적이없는 직원을 찾으십시오”. 요약하면, 데이터베이스 및 테이블이 정의되는 방식에 따라

include 를 정상적인 결합 동작 그래서… 크로스 가입이 필요한 적이 있습니까? 다른 특정 사용 사례는 우리에게 말하고 싶거나 우리에게 다루고 싶은 것이 있습니까? 알려주세요! SQL 조인에 대한 자주 묻는 질문 (FAQ) 다른 유형의 SQL 조인은 무엇이며 서로 어떻게 다릅니 까?

SQL 조인은 관련 열을 기반으로 둘 이상의 테이블의 행을 결합하는 데 사용됩니다. SQL 조인의 4 가지 기본 유형이 있습니다 : 내부 조인, 왼쪽 조인, 오른쪽 조인 및 전체 조인. 내부 조인은 두 테이블에 값이 일치하는 레코드를 반환합니다. 왼쪽 조인은 왼쪽 테이블에서 모든 레코드를 반환하고 오른쪽 테이블에서 일치하는 레코드를 반환합니다. 오른쪽 가입은 오른쪽 테이블에서 모든 레코드를 반환하고 왼쪽 테이블에서 일치하는 레코드를 반환합니다. 전체 조인은 왼쪽 또는 오른쪽 테이블에 일치하는 경우 모든 레코드를 반환합니다.

SQL에서 여러 조인을 사용하는 방법?

SQL 쿼리에 더 많은 조인 명령문을 추가하면 SQL에서 여러 조인을 사용할 수 있습니다. 각 조인 명령문에는 조인 조건을 지정하는 자체의 조항이 있어야합니다. 쿼리의 조인 명령문의 순서는 결과에 영향을 줄 수 있으므로 여러 조인을 사용할 때 쿼리의 논리를 신중하게 고려하는 것이 중요합니다.

SQL의 3 테이블 조인은 무엇이며 어떻게 작동합니까? ?

SQL의 3 테이블 조인은 3 개의 테이블이 관련 열을 기반으로 결합되는 결합 유형입니다. 이것은 SQL 쿼리에 두 개의 조인 명령문을 사용하여 수행됩니다. 첫 번째 조인 명령문은 첫 두 테이블을 결합하고 두 번째 조인 명령문은 첫 번째 조인의 결과와 세 번째 테이블과 결합됩니다. 조인 명령문의 순서 및 ON 조항에 지정된 조건은 테이블이 결합되는 방법을 결정합니다.

왼쪽 조인과 SQL의 올바른 조인의 차이점은 무엇입니까? 메인 왼쪽 조인과 SQL의 오른쪽 조인 간의 차이는 테이블을 결합하는 순서와 결과가 반환됩니다. 왼쪽 결합은 왼쪽 테이블에서 모든 레코드를 반환하고 오른쪽 테이블에서 일치하는 레코드를 반환합니다. 일치가 없으면 결과는 오른쪽에 널입니다. 반면, 오른쪽 조인은 오른쪽 테이블에서 모든 레코드를 반환하고 왼쪽 테이블에서 일치하는 레코드를 반환합니다. 일치가 없으면 결과는 왼쪽에 null입니다.

SQL 조인을 시각화하려면 어떻게해야합니까?

SQL 조인 시각화는 Venn 다이어그램을 사용하여 수행 할 수 있습니다. 다이어그램의 각 원은 테이블을 나타냅니다. 원이 겹치는 영역은 조인에 의해 반환되는 레코드를 나타냅니다. 내부 조인의 경우 겹치는 영역 만 표시됩니다. 왼쪽 결합의 경우 모든 왼쪽 원과 중첩 영역이 표시됩니다. 오른쪽 결합의 경우 모든 오른쪽 원과 겹치는 영역이 표시됩니다. 전체 조인을 위해 두 서클의 전체 영역이 표시됩니다.

SQL에 전체 결합은 무엇이며 언제 사용해야합니까?

SQL에 대한 전체 결합은 거기에있을 때 모든 레코드를 반환합니다. 왼쪽 또는 오른쪽 테이블에서 일치합니다. 일치가 없으면 결과는 양쪽에 널입니다. 이 유형의 조인은 결합 된 열 사이에 일치하지 않더라도 두 테이블에서 모든 레코드를 유지하려는 경우 유용합니다.

2 개 이상의 테이블과 함께 SQL 조인을 사용할 수 있습니까?

예, 2 개 이상의 테이블과 함께 SQL 조인을 사용할 수 있습니다. 이것은 SQL 쿼리에 여러 개의 조인 명세서를 사용하여 수행됩니다. 각 조인 명령문은 2 개의 테이블을 결합하므로 3 개의 테이블에 가입하려면 두 개의 조인 문장을 사용하여 4 개의 테이블을 결합하고 3 개의 조인 문장 등을 사용합니다. SQL에서 다중 조인을 사용하는 성능 영향은 무엇입니까?

SQL에서 다중 조인을 사용하면 쿼리 성능에 큰 영향을 줄 수 있습니다. 특히 결합 된 테이블에 많은 레코드가있는 경우. 각 조인 조작에는 처리 전력 및 메모리가 필요하므로 쿼리에 더 많은 조인이있을수록 쿼리를 실행하는 데 더 많은 리소스가 필요합니다. 그러나 인덱스를 사용하고 쿼리 최적화 및 적절한 하드웨어를 사용하여 성능 영향을 완화 할 수 있습니다.

조인을 사용하는 SQL 쿼리를 최적화 할 수 있습니까? 최적화하는 몇 가지 방법이 있습니다. 결합을 사용하는 SQL 쿼리. 한 가지 방법은 결합 된 열에서 인덱스를 사용하는 것입니다. 이렇게하면 조인 작업 속도가 크게 높아질 수 있습니다. 또 다른 방법은 where 절을 사용하여 쿼리에서 반환하는 레코드 수를 제한하는 것입니다. 또한 쿼리의 조인 명령문의 순서는 성능에 영향을 줄 수 있으므로 쿼리의 논리를 신중하게 고려하는 것이 중요합니다.

SQL 조인을 사용할 때 피해야 할 일반적인 실수는 무엇입니까?

SQL Join을 사용할 때 피해야 할 몇 가지 일반적인 실수에는 ON 절을 지정하는 것을 잊어 버릴 수 있습니다. ON 절을 지정하는 것이 포함됩니다.이 절은 직교 제품을 만들고, 비 인덱스 열에 결합하여 쿼리 성능을 늦추고, 잘못된 유형의 조인을 사용할 수 있습니다. 결과가 잘못되었습니다. 또한 쿼리의 조인 명령문의 순서가 결과에 영향을 줄 수 있으므로 쿼리의 논리를 신중하게 고려하는 것이 중요합니다.

.

id1 제목 . 대출되지 않은 모든 책을 선택하려면 Where Clause를 사용하여 Customers.id 열에서 "널"을 찾습니다. id FirstName 마지막 이름 book_id 널 널 널 널 3 작은 여자 널 널 널 널 4 톰 소여 외부는 제외와 함께 입니다 마지막 조인은 다음과 같습니다. 이 조향은 그다지 유용하지 않지만, 대출이없는 고객 목록과 동시에 대출되지 않은 책을 제공합니다. . 사실, 이런 종류의 조인은 너무 이상해서 MySQL에서도 할 수 없으므로 외부 조인을 지원하지 않습니다. 일반 SQL은 쿼리가 다음과 같습니다 (mysql이 아닌 MSSQL) :

위 내용은 3 더 합류해야합니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿