복붙노트

[SQL] 누구나 사용 오른쪽 외부 조인합니까?

SQL

누구나 사용 오른쪽 외부 조인합니까?

나는 INNER JOIN을 사용하고 LEFT OUTER는 모든 시간을 결합합니다. 그러나, 나는 RIGHT OUTER 적, 조인해야 할 것 같습니다하지 않습니다.

나는 용도를 잘 조인 불쾌한 자동으로 생성 된 SQL을 많이 본 적이 있지만 나에게, 그 코드 주위에 내 머리를 얻는 것은 불가능하다. 나는 항상 내부 사용하여 다시 작성해야하고 왼쪽 머리 또는 그것의 꼬리를 만들기 위해 결합한다.

사람이 실제로 오른쪽 조인을 사용하여 쿼리를 작성합니까?

해결법

  1. ==============================

    1.그것은 당신이 각 테이블을 넣어 조인의 어떤 측면에 달려있다.

    그것은 당신이 각 테이블을 넣어 조인의 어떤 측면에 달려있다.

    오른쪽 테이블과 일치하는 데이터가 존재하지 않는 경우에도 왼쪽 테이블에서 모든 행을 반환하려면 ... 당신은 왼쪽 조인을 사용.

    왼쪽 테이블에 일치가없는 경우에도 오른쪽 테이블에서 모든 행을 반환하려는 경우, 당신은 가입 바로 사용합니다.

    흥미롭게도, 나는 거의 바로 조인을 사용하지 않습니다.

  2. ==============================

    2.권리가 유용 할 수 있습니다 가입 한 예를 제공합니다.

    권리가 유용 할 수 있습니다 가입 한 예를 제공합니다.

    사람, 애완 동물 및 애완 동물 액세서리 세 개의 테이블이 있다고 가정하자. 사람들은 선택적으로 애완 동물을 가질 수 있으며, 이러한 애완 동물 선택적 부속품이 다를 수 있습니다

    CREATE TABLE Persons
      (
         PersonName VARCHAR(10) PRIMARY KEY
      );
    
    INSERT INTO Persons
    VALUES      ('Alice'),
                ('Bob'),
                ('Charles');
    
    CREATE TABLE Pets
      (
         PetName    VARCHAR(10) PRIMARY KEY,
         PersonName VARCHAR(10)
      );
    
    INSERT INTO Pets
    VALUES      ('Rover',
                 'Alice'),
                ('Lassie',
                 'Alice'),
                ('Fifi',
                 'Charles');
    
    CREATE TABLE PetAccessories
      (
         AccessoryName VARCHAR(10) PRIMARY KEY,
         PetName       VARCHAR(10)
      );
    
    INSERT INTO PetAccessories
    VALUES      ('Ball', 'Rover'),
                ('Bone', 'Rover'),
                ('Mouse','Fifi');
    

    요구 사항에 관계없이 그들이 어떤 애완 동물에 대한 애완 동물과 정보를 소유 여부에 모든 사람을 나열하는 결과를 얻을 경우 그들은 그 또한 부속품이 소유하고 있습니다.

    문제가 해결되지 않는 (제외 밥)

    SELECT P.PersonName,
           Pt.PetName,
           Pa.AccessoryName
    FROM   Persons P
           LEFT JOIN Pets Pt
             ON P.PersonName = Pt.PersonName
           INNER JOIN PetAccessories Pa
             ON Pt.PetName = Pa.PetName; 
    

    이 작동하지 않습니다 (래쉬 포함)

    SELECT P.PersonName,
           Pt.PetName,
           Pa.AccessoryName
    FROM   Persons P
           LEFT JOIN Pets Pt
             ON P.PersonName = Pt.PersonName
           LEFT JOIN PetAccessories Pa
             ON Pt.PetName = Pa.PetName; 
    

    이 작업을 수행 (하지만 원하는 논리적 순서 가입 달성 연속 두 ON 절을 요구 구문은 일반적으로 덜 이해된다)

    SELECT P.PersonName,
           Pt.PetName,
           Pa.AccessoryName
    FROM   Persons P
           LEFT JOIN Pets Pt
                      INNER JOIN PetAccessories Pa
                        ON Pt.PetName = Pa.PetName
             ON P.PersonName = Pt.PersonName;
    

    모든 아마 가장 쉬운의 모든 조인 RIGHT를 사용하는

    SELECT P.PersonName,
           Pt.PetName,
           Pa.AccessoryName
    FROM   Pets Pt
           JOIN PetAccessories Pa
             ON Pt.PetName = Pa.PetName
           RIGHT JOIN Persons P
             ON P.PersonName = Pt.PersonName;
    

    이를 방지하기로 결정하면 비록 다른 옵션은 왼쪽에 결합 할 수있는 파생 테이블을 소개하는 것

    SELECT P.PersonName,
           T.PetName,
           T.AccessoryName
    FROM   Persons P
           LEFT JOIN (SELECT Pt.PetName,
                             Pa.AccessoryName,
                             Pt.PersonName
                      FROM   Pets Pt
                             JOIN PetAccessories Pa
                               ON Pt.PetName = Pa.PetName) T
             ON T.PersonName = P.PersonName; 
    

    SQL 바이올린 : MySQL은, PostgreSQL을, SQL 서버

  3. ==============================

    3.당신은 일반적으로 RIGHT OUTER가 다른 테이블에서 항목을 고아 찾을 JOINS 사용합니다.

    당신은 일반적으로 RIGHT OUTER가 다른 테이블에서 항목을 고아 찾을 JOINS 사용합니다.

  4. ==============================

    4.아니, 난 내부 또는 왼쪽 조인과 함께 모든 것을 달성 할 수있는 이유는 간단하지 않습니다.

    아니, 난 내부 또는 왼쪽 조인과 함께 모든 것을 달성 할 수있는 이유는 간단하지 않습니다.

  5. ==============================

    5.나는 기존의 쿼리 및 (내부에서 일반적으로)를 변경해야하는 작업입니다 때 조인 오른쪽 외부를 사용하는 유일한 시간이다. 내가 가입 리버스 만들 수 그것을 떠나 아마 괜찮을하지만 시도하고 내가 코드를 수정할 때 변경 일의 양을 줄일 수 있습니다.

    나는 기존의 쿼리 및 (내부에서 일반적으로)를 변경해야하는 작업입니다 때 조인 오른쪽 외부를 사용하는 유일한 시간이다. 내가 가입 리버스 만들 수 그것을 떠나 아마 괜찮을하지만 시도하고 내가 코드를 수정할 때 변경 일의 양을 줄일 수 있습니다.

  6. ==============================

    6.난 단지 왼쪽으로 사용하지만, 내가 그들이 따라 정말 동일 가정 해 봅시다 어떻게 어떻게 물건을 주문한다. 그들이 밖으로 내부에서 쿼리를 구축하고 따라서 만 사용 오른쪽으로 감각을 만들어 그들의 마음에 바닥에 자신의 주요 항목을 유지하기 위해 좋아 변경할 수 없기 나는, 단지 바로 사용 어떤 사람들과 함께 일했다.

    난 단지 왼쪽으로 사용하지만, 내가 그들이 따라 정말 동일 가정 해 봅시다 어떻게 어떻게 물건을 주문한다. 그들이 밖으로 내부에서 쿼리를 구축하고 따라서 만 사용 오른쪽으로 감각을 만들어 그들의 마음에 바닥에 자신의 주요 항목을 유지하기 위해 좋아 변경할 수 없기 나는, 단지 바로 사용 어떤 사람들과 함께 일했다.

    여기에있어 중요한 것은

    더 정크 필요

    더 많은 정크 오른쪽 외부 메인 재료에 가입

    나는 ... 정크 다음 주 물건을 선호 그래서 나를 위해 외부 작품을 떠났다.

    그래서 귀하의 보트를 수레 뭐든간에.

  7. ==============================

    7.우리의 표준 관행은 여기에 가능하면 LEFT 조인의 관점에서 모든 것을 작성하는 것입니다. 우리는 때때로 우리에게 필요 한 경우 FULL OUTER 조인을 사용하지만, RIGHT 조인 적이 없어요.

    우리의 표준 관행은 여기에 가능하면 LEFT 조인의 관점에서 모든 것을 작성하는 것입니다. 우리는 때때로 우리에게 필요 한 경우 FULL OUTER 조인을 사용하지만, RIGHT 조인 적이 없어요.

  8. ==============================

    8.당신은 왼쪽 또는 오른쪽 조인을 사용하여 같은 일을 수행 할 수 있습니다. 우리는 왼쪽에서 오른쪽으로 읽기 때문에 일반적으로 대부분의 사람들이 왼쪽 측면에서 생각은 아마 가입 할 수 있습니다. 정말 일관되고 내려 온다. 당신의 팀은 본질적으로 똑같은 일이 다르게 기록 된대로 중 하나를 오른쪽 또는 왼쪽이, 둘, 조인 사용에 초점을 맞추어야한다.

    당신은 왼쪽 또는 오른쪽 조인을 사용하여 같은 일을 수행 할 수 있습니다. 우리는 왼쪽에서 오른쪽으로 읽기 때문에 일반적으로 대부분의 사람들이 왼쪽 측면에서 생각은 아마 가입 할 수 있습니다. 정말 일관되고 내려 온다. 당신의 팀은 본질적으로 똑같은 일이 다르게 기록 된대로 중 하나를 오른쪽 또는 왼쪽이, 둘, 조인 사용에 초점을 맞추어야한다.

  9. ==============================

    9.언급 한 바와 같이 드물게, 당신은 일반적으로 재정렬 할 수 있고 왼쪽 조인을 사용합니다. 그 왼쪽이 내가 필요로하는 데이터를 가져 오기위한 작업을 조인 있도록 또한 자연스럽게 데이터를 주문하는 경향이있다. 저도 같은이 완전 외부라고 할 수 있다고 생각하고 조인 크로스, 대부분의 사람들은 그들을 멀리하는 경향이있다.

    언급 한 바와 같이 드물게, 당신은 일반적으로 재정렬 할 수 있고 왼쪽 조인을 사용합니다. 그 왼쪽이 내가 필요로하는 데이터를 가져 오기위한 작업을 조인 있도록 또한 자연스럽게 데이터를 주문하는 경향이있다. 저도 같은이 완전 외부라고 할 수 있다고 생각하고 조인 크로스, 대부분의 사람들은 그들을 멀리하는 경향이있다.

  10. from https://stackoverflow.com/questions/689963/does-anyone-use-right-outer-joins by cc-by-sa and MIT license