[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.예, 당신이있는 상황에 따라 달라집니다.
예, 당신이있는 상황에 따라 달라집니다.
사용하는 SQL JOIN 이유는 무엇입니까?
답변 : 여러 테이블이 SQL SELECT 문을 통해 액세스 할 수 있어야하며, 조인 된 테이블 사이에 일치하는 항목이없는 경우에는 결과가 반환해야 할 때마다 사용 SQL이 가입.
강령 프로젝트에이 원래의 기사를 읽으면 많은 도움이 될 것입니다 : SQL의 시각적 표현을 결합합니다.
또한이 게시물을 확인 : SQL 서버 - 성능 향상 - 왼쪽에있는 가입 또는 NOT?
가입 및 외부의 MySQL에 가입 차이 :에서 원래 하나를 찾을 수 있습니다.
-
==============================
2.두 세트의 경우 :
두 세트의 경우 :
다음 그림을 참조하십시오 :
-
==============================
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 & 무효 가입하세요. (내가 제대로 귀하의 의견을 이해하는 경우입니다)
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
'SQL' 카테고리의 다른 글
[SQL] VARCHAR 대 SQL SELECT 속도 INT (0) | 2020.04.06 |
---|---|
[SQL] MySQL의 테이블에 VARCHAR 길이의 중요성 (0) | 2020.04.06 |
[SQL] 동적으로 열 SQL을 생성 (0) | 2020.04.06 |
[SQL] SQLite는 - 어떻게 다른 데이터베이스에서 테이블을 조인합니까? (0) | 2020.04.06 |
[SQL] 이 쿼리 페이징 (/ 건너 뛰기 걸릴) 기능을 구현 (0) | 2020.04.06 |