mysql join문 - 오른쪽 조인 / 왼쪽 조인 또는 내부 조인을 사용할시기를 결정하는 방법 또는 어느 테이블이 어느쪽에 있는지 결정하는 방법은 무엇입니까?




오라클 차이 (4)

조인의 사용법을 알고 있지만 때로는 조인 이 적합한 지, 왼쪽인지 오른쪽 인지를 결정할 수 없을 때 그러한 상황을 보게됩니다.

여기에 내가 붙어있는 쿼리가 있습니다.

    SELECT  count(ImageId) as [IndividualRemaining],
                userMaster.empName AS ID#,
                CONVERT(DATETIME, folderDetails.folderName, 101) AS FolderDate,
                batchDetails.batchName AS Batch#,
                [email protected],
                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 [email protected] 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

Answers

예, 당신이 처한 상황에 달려 있습니다.

왜 SQL JOIN을 사용합니까?

답변 : SQL SELECT 문을 통해 여러 테이블에 액세스해야 할 때마다 SQL JOIN을 사용하고 JOIN 된 테이블이 일치하지 않으면 결과를 반환하지 않아야합니다.

코드 프로젝트대한 이 원본 기사를 읽으면 많은 도움이됩니다. SQL 조인 시각적 표현 .

또한이 게시물을 확인하십시오 : SQL SERVER - 성능 향상 - LEFT JOIN 또는 NOT IN? .

MySQL에서 JOIN과 OUTER JOIN의 차이점 .


난 당신이 찾고있는 LEFT JOIN 테이블에서 LEFT JOIN 테이블에있는 두 개의 동그라미에 의해 표시된대로 합류 한 것들에 유효한 데이터가 있는지 여부에 상관없이 주 테이블에서 모든 레코드를 반환하려면 주 테이블에서 시작 LEFT JOIN 생각하는 것 같아요 )

JOIN이 연속적으로 발생하므로 조인 할 테이블이 4 개 있고 기본 테이블의 모든 레코드를 항상 원할 경우 LEFT JOIN 을 계속 진행해야합니다. 예를 들면 다음과 같습니다.

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 JOIN 가 sub_sub_table을 LEFT JOIN 하면 sub_table에 LEFT JOIN 을 수행 했더라도 즉시 결과 세트를 축소합니다.

LEFT JOIN 수행 할 때 반환되는 NULL 값을 고려해야한다는 것을 기억하십시오. main_table과 조인 할 수있는 레코드가 없으므로 LEFT JOIN 은 해당 필드가 NULL인지 여부와 상관없이 표시되도록합니다. INNER JOIN 은 두 행 사이에 유효한 링크가 없기 때문에 분명히 행을 버리게됩니다 (사용자가 가입 한 ID를 기반으로하는 해당 레코드 없음)

그러나, 당신은 당신이 찾고있는 행을 걸러내는 where 문을 가지고 있다고 말하면 JOIN에 대한 질문은 실제 문제가 아니기 때문에 null & void입니다. (귀하의 의견을 정확하게 이해하는 경우)


두 세트 :

  • 두 세트의 모든 결과를 원하면 완전 외부 조인을 사용하십시오.

  • 두 세트에 나타나는 결과 만 원하면 내부 조인을 사용하십시오.

  • a에서 모든 결과를 원할 때 왼쪽 외부 조인을 사용하십시오. 그러나 세트 b가 세트 a의 레코드 중 일부와 관련이있는 데이터를 가지고 있으면 동일한 조회에서도 해당 데이터를 사용하려고합니다.

다음 이미지를 참조하십시오 :


PostgreSQL 예제 :

UPDATE TableA AS a
SET param_from_table_a=FALSE -- param FROM TableA
FROM TableB AS b
WHERE b.id=a.param_id AND a.amount <> 0; 




mysql sql sql-server oracle tsql