복붙노트

[SQL] 바로 조인 내부 조인 또는 어떻게하는 편에있는 테이블을 결정하기 위해 왼쪽 / 조인 사용할 때 어떻게 결정합니까?

SQL

바로 조인 내부 조인 또는 어떻게하는 편에있는 테이블을 결정하기 위해 왼쪽 / 조인 사용할 때 어떻게 결정합니까?

내가 조인의 사용을 알고 있지만, 내가 적합 할 것이다 가입 결정할 수 아니다 때 가끔 그런 상황 건너, a는 왼쪽 또는 오른쪽으로.

저는 여기에 붙어 오전 쿼리입니다.

    SELECT  count(ImageId) as [IndividualRemaining],
                userMaster.empName AS ID#,
                CONVERT(DATETIME, folderDetails.folderName, 101) AS FolderDate,
                batchDetails.batchName AS Batch#,
                Client=@ClientName,
                TotalInloaded = IsNull(@TotalInloaded,0),
                PendingUnassigned = @PendingUnassigned,
                InloadedAssigned =     IsNull(@TotalAssigned,0),
                TotalProcessed = @TotalProcessed,
                Remaining = @Remaining
        FROM
                batchDetails
                    Left JOIN  folderDetails ON batchDetails.folderId = folderDetails.folderId
                    Left JOIN  imageDetails ON batchDetails.batchId = imageDetails.batchId
                    Left JOIN  userMaster ON imageDetails.assignedToUser = userMaster.userId

        WHERE   folderDetails.ClientId =@ClientID and verifyflag='n'
                and folderDetails.FolderName IN (SELECT convert(VARCHAR,Value) FROM dbo.Split(@Output,','))
                and userMaster.empName <> 'unused'

        GROUP BY userMaster.empName, folderDetails.folderName, batchDetails.batchName

        Order BY folderDetails.Foldername asc

해결법

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

    1.예, 당신이있는 상황에 따라 달라집니다.

    예, 당신이있는 상황에 따라 달라집니다.

    사용하는 SQL JOIN 이유는 무엇입니까?

    답변 : 여러 테이블이 SQL SELECT 문을 통해 액세스 할 수 있어야하며, 조인 된 테이블 사이에 일치하는 항목이없는 경우에는 결과가 반환해야 할 때마다 사용 SQL이 가입.

    강령 프로젝트에이 원래의 기사를 읽으면 많은 도움이 될 것입니다 : SQL의 시각적 표현을 결합합니다.

    또한이 게시물을 확인 : SQL 서버 - 성능 향상 - 왼쪽에있는 가입 또는 NOT?

    가입 및 외부의 MySQL에 가입 차이 :에서 원래 하나를 찾을 수 있습니다.

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

    2.두 세트의 경우 :

    두 세트의 경우 :

    다음 그림을 참조하십시오 :

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

    3.난 당신이 왼쪽 상단의 그래픽에 2 원을 왼쪽으로 표시된 바와 같이 그들은 (결합 된 것들에 유효한 데이터가있는 경우에 관계없이 기본 테이블에서 모든 레코드를 반환 메인 테이블에서 시작 JOIN하는 것입니다 무엇을 찾고 있는지 생각 )

    난 당신이 왼쪽 상단의 그래픽에 2 원을 왼쪽으로 표시된 바와 같이 그들은 (결합 된 것들에 유효한 데이터가있는 경우에 관계없이 기본 테이블에서 모든 레코드를 반환 메인 테이블에서 시작 JOIN하는 것입니다 무엇을 찾고 있는지 생각 )

    의 당신이 가입 4 개 테이블이 그렇다면, 연속적으로 발생, 당신은 항상 기본 테이블의 모든 레코드, 당신은 LEFT를 계속 예를 들어, 전체에 가입해야합니다 가입하기 :

    SELECT * FROM main_table
    LEFT JOIN sub_table ON main_table.ID = sub_table.main_table_ID
    LEFT JOIN sub_sub_table on main_table.ID = sub_sub_table.main_table_ID
    

    당신 INNER이 sub_sub_table 가입하면 즉시 결과가 당신이 LEFT는 sub_table에 가입 ​​한 경우에도 아래로 설정 축소됩니다.

    LEFT이 가입 할 때, 당신은 NULL 값이 반환되는 고려해야 기억하십시오. 어떤 레코드가 main_table와 결합 할 수없는 경우이므로, 왼쪽 필드에 관계없이 나타날와 NULL을 포함 할 것이라고 힘을 가입. INNER은 (가입 한 년대 ID를 기반으로 어떤 해당 레코드) 둘 사이에 유효한 링크가 없기 때문에 분명히 단지 대신 행을 "던져"것이다 가입

    그러나 당신이 당신의 질문 있도록 행 아웃 필터 당신이 찾고있는 곳 문이 언급 그게 당신의 진짜 문제가되지 않습니다 때문에의가 null & 무효 가입하세요. (내가 제대로 귀하의 의견을 이해하는 경우입니다)

  4. from https://stackoverflow.com/questions/3308122/how-do-i-decide-when-to-use-right-joins-left-joins-or-inner-joins-or-how-to-dete by cc-by-sa and MIT license