programing

MySQL: 조인 유형의 빠른 분석

shortcode 2023. 1. 28. 09:41
반응형

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_aLEFT 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

반응형