MySQL: 조인 유형의 빠른 분석
MySQL join의 종류를 간단하게 분류하고 싶습니다.나는 이것들에 대해 알고 있고, 나머지는 무슨 뜻인지 잘 모르겠다.
- 쉼표로 구분됩니다(정확히 이것은 무엇을 의미합니까?
SELECT * FROM a, b WHERE b.id = a.beeId AND ...
- b에 일치하는 것이 없는 경우에도 a로부터의 정보를 표시합니다.
SELECT * FROM a LEFT OUTER JOIN b ON b.id = a.beeId WHERE ...
다른 가입자를 본 적은 있지만 무엇이 다른지, 무엇이 다른지 알고 싶습니다.INNER
/OUTER
는 추가합니까?LEFT
사물을 바꾸다
결합이 어떻게 작동하는지 이미 알고 있습니다. 다른 유형의 결합이 있는지 또는 동일한 결과를 얻기 위한 다른 방법인지 알고 싶을 뿐입니다.
코멘트를 바탕으로 각 유형의 간단한 정의는 W3Schools에서 가장 잘 찾을 수 있습니다. 각 유형의 첫 번째 줄은 조인 유형에 대한 간략한 설명을 제공합니다.
- JOIN: 두 테이블에 하나 이상의 일치 항목이 있을 때 행을 반환합니다.
- 왼쪽 조인: 오른쪽 테이블에 일치하는 항목이 없는 경우에도 왼쪽 테이블의 모든 행을 반환합니다.
- 오른쪽 조인: 왼쪽 테이블에 일치하는 항목이 없는 경우에도 오른쪽 테이블의 모든 행을 반환합니다.
- FULL JOIN: 테이블 중 하나에 일치하는 항목이 있으면 행을 반환합니다.
편집 종료
간단히 말하면, 다음과 같은 콤마 구분 예시를 제시합니다.
SELECT * FROM a, b WHERE b.id = a.beeId AND ...
테이블 a와 b에서 콤마를 사용하여 테이블을 구분하여 모든 레코드를 선택합니다.이것은 다음과 같은 컬럼에서도 사용할 수 있습니다.
SELECT a.beeName,b.* FROM a, b WHERE b.id = a.beeId AND ...
그런 다음 예시에서 b.id 열과 a.beeId 열이 일치하는 행에 지시된 정보를 가져옵니다.따라서 이 예에서는 테이블a 및 b에서 모든 정보를 가져옵니다.여기서 b.id은 a.beeId와 동일합니다.이 예에서는 b.id이 a.beeId와 동일한 경우 b 테이블에서 모든 정보를 얻고 a.beeName 열에서만 정보를 가져옵니다.AND 절도 있으므로 결과를 구체화하는 데 도움이 됩니다.
mySQL join 및 left join에 대한 간단한 튜토리얼과 설명은 Tizag의 mySQL 튜토리얼을 참조하십시오.가입에 대한 자세한 내용은 Keith J. Brown의 웹사이트를 참조하십시오.
이게 도움이 됐으면 좋겠는데
다음과 같은 테이블이 두 개 있습니다.
> SELECT * FROM table_a;
+------+------+
| id | name |
+------+------+
| 1 | row1 |
| 2 | row2 |
+------+------+
> SELECT * FROM table_b;
+------+------+------+
| id | name | aid |
+------+------+------+
| 3 | row3 | 1 |
| 4 | row4 | 1 |
| 5 | row5 | NULL |
+------+------+------+
이너 조인은 두 테이블 다 신경 쓰고
INSER JOIN은 양쪽 테이블을 신경 쓰기 때문에 양쪽 테이블이 1개일 경우에만 행이 표시됩니다.일치하는 쌍이 두 개 이상 있으면 여러 행이 표시됩니다.
> SELECT * FROM table_a a INNER JOIN table_b b ON a.id=b.aid;
+------+------+------+------+------+
| id | name | id | name | aid |
+------+------+------+------+------+
| 1 | row1 | 3 | row3 | 1 |
| 1 | row1 | 4 | row4 | 1 |
+------+------+------+------+------+
순서를 반대로 해도 INSER JOIN에는 차이가 없습니다.이것은, 양쪽의 테이블에 관심이 있기 때문입니다.
> SELECT * FROM table_b b INNER JOIN table_a a ON a.id=b.aid;
+------+------+------+------+------+
| id | name | aid | id | name |
+------+------+------+------+------+
| 3 | row3 | 1 | 1 | row1 |
| 4 | row4 | 1 | 1 | row1 |
+------+------+------+------+------+
같은 행이 표시되지만 테이블 순서가 다르기 때문에 열의 순서가 다릅니다.
LEFT JOIN은 첫 번째 테이블에만 신경을 씁니다.
LEFT JOIN은 첫 번째 테이블에 관심이 있고 두 번째 테이블에는 관심이 없기 때문에 두 번째 테이블에 대응하는 행이 없어도 항상 첫 번째 테이블에서 행을 가져옵니다.
> SELECT * FROM table_a a LEFT JOIN table_b b ON a.id=b.aid;
+------+------+------+------+------+
| id | name | id | name | aid |
+------+------+------+------+------+
| 1 | row1 | 3 | row3 | 1 |
| 1 | row1 | 4 | row4 | 1 |
| 2 | row2 | NULL | NULL | NULL |
+------+------+------+------+------+
위의 table_a의 모든 행은 테이블 b의 어떤 행과도 일치하지 않지만 table_b의 모든 행은 table_a의 어떤 행과 일치하는 행만 볼 수 있습니다.
테이블의 순서를 반대로 하면, LEFT JOIN 의 동작은 다릅니다.
> SELECT * FROM table_b b LEFT JOIN table_a a ON a.id=b.aid;
+------+------+------+------+------+
| id | name | aid | id | name |
+------+------+------+------+------+
| 3 | row3 | 1 | 1 | row1 |
| 4 | row4 | 1 | 1 | row1 |
| 5 | row5 | NULL | NULL | NULL |
+------+------+------+------+------+
이제 table_b의 모든 행이 표시되지만 table_a의 행과 일치하는 행만 표시됩니다.
RIGHT JOIN은 두 번째 테이블만 신경 쓰고
a RIGHT JOIN b
gets gets gets gets as as as as as as as as as as as as와 같은 행을 .b LEFT JOIN a
이치노
> SELECT * FROM table_a a RIGHT JOIN table_b b ON a.id=b.aid;
+------+------+------+------+------+
| id | name | id | name | aid |
+------+------+------+------+------+
| 1 | row1 | 3 | row3 | 1 |
| 1 | row1 | 4 | row4 | 1 |
| NULL | NULL | 5 | row5 | NULL |
+------+------+------+------+------+
은 이 행과 행입니다.table_b LEFT JOIN table_a
LEFT JOIN(왼쪽 조인)
마찬가지로:
> SELECT * FROM table_b b RIGHT JOIN table_a a ON a.id=b.aid;
+------+------+------+------+------+
| id | name | aid | id | name |
+------+------+------+------+------+
| 3 | row3 | 1 | 1 | row1 |
| 4 | row4 | 1 | 1 | row1 |
| NULL | NULL | NULL | 2 | row2 |
+------+------+------+------+------+
이 같다, 행이 ,table_a LEFT JOIN table_b
.
가입하지 않으면 모든 복사본이 제공됩니다.
JOIN 구를 사용하지 않고 쉼표로 구분하여 테이블을 쓰면 첫 번째 테이블의 모든 행이 두 번째 테이블의 각 행 옆에 가능한 모든 조합으로 기록됩니다.
> SELECT * FROM table_b b, table_a;
+------+------+------+------+------+
| id | name | aid | id | name |
+------+------+------+------+------+
| 3 | row3 | 1 | 1 | row1 |
| 3 | row3 | 1 | 2 | row2 |
| 4 | row4 | 1 | 1 | row1 |
| 4 | row4 | 1 | 2 | row2 |
| 5 | row5 | NULL | 1 | row1 |
| 5 | row5 | NULL | 2 | row2 |
+------+------+------+------+------+
(이것은 제 블로그 포스트의 SQL join type 예에서 인용한 것입니다.)
전체 외부 조인은 mysql에 없습니다. 왼쪽 조인과 오른쪽 조인의 조합을 사용해야 할 수 있습니다.
언급URL : https://stackoverflow.com/questions/6294778/mysql-quick-breakdown-of-the-types-of-joins
'programing' 카테고리의 다른 글
vue, 소품으로서의 방출 vs 통과 기능 (0) | 2023.01.28 |
---|---|
SQL 방언 미설정(Phpstorm) (0) | 2023.01.28 |
IE9은 console.log를 지원합니까?실제 기능입니까? (0) | 2023.01.28 |
클래스 메서드 내에서 함수를 호출하시겠습니까? (0) | 2023.01.28 |
네스트된 디렉토리를 안전하게 작성하려면 어떻게 해야 합니까? (0) | 2023.01.28 |