LEFT JOIN을 사용할 때와 INNER JOIN을 사용할 때?
저는 항상 사용법을 배운 것 같습니다.LEFT JOIN
그리고 나는 종종 그것들이 섞이는 것을 봅니다.INNER
다른 페이지에서 동일한 작업을 수행해야 하는 여러 코드 조각에 걸쳐 동일한 유형의 쿼리를 수행합니다.다음과 같습니다.
SELECT ac.reac, pt.pt_name, soc.soc_name, pt.pt_soc_code
FROM
AECounts ac
INNER JOIN 1_low_level_term llt on ac.reac = llt.llt_name
LEFT JOIN 1_pref_term pt ON llt.pt_code = pt.pt_code
LEFT JOIN 1_soc_term soc ON pt.pt_soc_code = soc.soc_code
LIMIT 100,10000
제가 연구하고 있는 것입니다.
다음과 같은 것이 많이 보입니다.
SELECT COUNT(DISTINCT p.`case`) as count
FROM FDA_CaseReports cr
INNER JOIN ae_indi i ON i.isr = cr.isr
LEFT JOIN ae_case_profile p ON cr.isr = p.isr
이것은 좌파가 내부에 있는 것처럼 보입니다. 뭔가 포착할 수 있는 것이 있습니까?
뭔가 잡히는 게 있나요?네, 왼쪽 조인은 바깥쪽 조인의 한 형태인 반면, 안쪽 조인은 안쪽 조인의 한 형태입니다.
여기 그 차이를 보여주는 예가 있습니다.기본 데이터부터 시작하겠습니다.
mysql> select * from j1;
+----+------------+
| id | thing |
+----+------------+
| 1 | hi |
| 2 | hello |
| 3 | guten tag |
| 4 | ciao |
| 5 | buongiorno |
+----+------------+
mysql> select * from j2;
+----+-----------+
| id | thing |
+----+-----------+
| 1 | bye |
| 3 | tschau |
| 4 | au revoir |
| 6 | so long |
| 7 | tschuessi |
+----+-----------+
다음은 내부 조인과 왼쪽 조인의 차이점입니다.
mysql> select * from j1 inner join j2 on j1.id = j2.id;
+----+-----------+----+-----------+
| id | thing | id | thing |
+----+-----------+----+-----------+
| 1 | hi | 1 | bye |
| 3 | guten tag | 3 | tschau |
| 4 | ciao | 4 | au revoir |
+----+-----------+----+-----------+
음, 3줄.
mysql> select * from j1 left join j2 on j1.id = j2.id;
+----+------------+------+-----------+
| id | thing | id | thing |
+----+------------+------+-----------+
| 1 | hi | 1 | bye |
| 2 | hello | NULL | NULL |
| 3 | guten tag | 3 | tschau |
| 4 | ciao | 4 | au revoir |
| 5 | buongiorno | NULL | NULL |
+----+------------+------+-----------+
와, 5열!무슨 일입니까?
다음과 같은 외부 결합left join
일치하지 않는 행 유지 - ID가 2 및 5인 행은 왼쪽 조인 쿼리에 의해 유지됩니다.나머지 열은 NULL로 채워집니다.
즉, 왼쪽과 안쪽 조인은 서로 교환할 수 없습니다.
여기 대략적인 대답이 있습니다. 그것이 제가 조인에 대해 생각하는 방식입니다.앞에서 언급한 수학 문제로 인해 매우 정확한 답보다 이것이 더 도움이 되기를 바랍니다... ;-)
내부 조인은 행 반환 집합을 좁힙니다.외부 조인(왼쪽 또는 오른쪽)은 반환되는 행 수를 변경하지 않고 가능한 경우 추가 열을 "픽업"하기만 하면 됩니다.
첫 번째 예제에서 결과는 다음 행이 됩니다.AECounts
에 지정된 조건과 일치하는 경우1_low_level_term
테이블. 그런 다음 해당 행에 대해 결합을 시도합니다.1_pref_term
그리고.1_soc_term
그러나 일치하는 항목이 없으면 행이 남아 있고 결합된 열은 null입니다.
내부 조인은 두 테이블에 일치하는 값이 있는 행만 반환하는 반면, 왼쪽 조인은 오른쪽 테이블에 일치하는 행이 없더라도 왼쪽 테이블의 모든 행을 반환합니다.
간단한 예
TableA
ID Value
1 TableA.Value1
2 TableA.Value2
3 TableA.Value3
TableB
ID Value
2 TableB.ValueB
3 TableB.ValueC
이너 조인은 다음을 생성합니다.
SELECT a.ID,a.Value,b.ID,b.Value
FROM TableA a INNER JOIN TableB b ON b.ID = a.ID
a.ID a.Value b.ID b.Value
2 TableA.Value2 2 TableB.ValueB
3 TableA.Value3 3 TableB.ValueC
왼쪽 조인은 다음을 생성합니다.
SELECT a.ID,a.Value,b.ID,b.Value
FROM TableA a LEFT JOIN TableB b ON b.ID = a.ID
a.ID a.Value b.ID b.Value
1 TableA.Value1 NULL NULL
2 TableA.Value2 2 TableB.ValueB
3 TableA.Value3 3 TableB.ValueC
표 B에 일치하는 행이 없는 경우에도 표 B에 ID = 1인 LEFT JOIN에는 표 A의 행이 포함되어 있지만 표 B에 일치하는 행이 없기 때문에 특히 INER JOIN에는 해당 행이 제외됩니다.
HTH
두 테이블 모두에 조인 조건과 일치하는 결과만 표시하려면 내부 조인을 사용합니다.
표 A의 모든 결과를 원할 때는 왼쪽 조인을 사용하지만 표 B에 표 A의 일부 레코드와 관련된 데이터가 있는 경우 동일한 쿼리에서도 해당 데이터를 사용할 수 있습니다.
두 표의 모든 결과를 원하는 경우 전체 조인을 사용합니다.
초보자들에게는, 제가 어렸을 때 도움이 되었기 때문입니다. 이너 조인은 항상 왼쪽 또는 오른쪽 조인의 하위 집합이며, 이 모든 것은 항상 전체 조인의 하위 집합입니다.그것은 기본적인 생각을 이해하는 데 도움이 되었습니다.
언급URL : https://stackoverflow.com/questions/9798020/when-to-use-left-join-and-when-to-use-inner-join
'source' 카테고리의 다른 글
iOS 자동 레이아웃: 두 개의 동일한 너비의 버튼이 나란히 있습니다. (0) | 2023.08.29 |
---|---|
Swift에서 Int를 16진수 문자열로 변환하는 방법 (0) | 2023.08.29 |
jQuery 플러그인 검증 - 단일 필드의 유효성 검사 트리거 (0) | 2023.08.29 |
데이터베이스의 테이블 크기를 결정하기 위한 쿼리?(계속) (0) | 2023.08.29 |
오라클에서 DBlink의 동의어를 사용하는 방법은 무엇입니까? (0) | 2023.08.29 |