ホームページ >データベース >mysql チュートリアル >INNER JOIN と OUTER JOIN: SQL 結合を詳しく理解する
SQL では、INNER JOIN と OUTER JOIN を使用して、関連する列に基づいて 2 つ以上のテーブルの行を結合します。主な違いは、これらの結合が一致しない行をどのように処理するかにあります。
INNER JOIN は、両方のテーブルで一致する値を持つ行のみを返します。一致するものがない場合、その行は結果から除外されます。
SELECT columns FROM table1 INNER JOIN table2 ON table1.column = table2.column;
EmployeeID | Name | DepartmentID |
---|---|---|
1 | Alice | 101 |
2 | Bob | 102 |
3 | Charlie | 103 |
DepartmentID | DepartmentName |
---|---|
101 | HR |
102 | IT |
クエリ:
SELECT employees.Name, departments.DepartmentName FROM employees INNER JOIN departments ON employees.DepartmentID = departments.DepartmentID;
Name | DepartmentName |
---|---|
Alice | HR |
Bob | IT |
OUTER JOIN には、一致しない場合でも、一方または両方のテーブルの行が含まれます。 OUTER JOIN には 3 つのタイプがあります:
右のテーブルに一致するものがない場合でも、左のテーブルのすべての行を返します。
構文:
SELECT columns FROM table1 INNER JOIN table2 ON table1.column = table2.column;
クエリ:
SELECT employees.Name, departments.DepartmentName FROM employees INNER JOIN departments ON employees.DepartmentID = departments.DepartmentID;
Name | DepartmentName |
---|---|
Alice | HR |
Bob | IT |
Charlie | NULL |
左側のテーブルに一致するものがない場合でも、右側のテーブルからすべての行を返します。
構文:
SELECT columns FROM table1 LEFT JOIN table2 ON table1.column = table2.column;
クエリ:
SELECT employees.Name, departments.DepartmentName FROM employees LEFT JOIN departments ON employees.DepartmentID = departments.DepartmentID;
Name | DepartmentName |
---|---|
Alice | HR |
Bob | IT |
NULL | Finance |
両方のテーブルからすべての行を返します。一致しない行は NULL で埋められます。
構文:
SELECT columns FROM table1 RIGHT JOIN table2 ON table1.column = table2.column;
クエリ:
SELECT employees.Name, departments.DepartmentName FROM employees RIGHT JOIN departments ON employees.DepartmentID = departments.DepartmentID;
Name | DepartmentName |
---|---|
Alice | HR |
Bob | IT |
Charlie | NULL |
NULL | Finance |
Feature | INNER JOIN | OUTER JOIN |
---|---|---|
Matching Rows | Returns only matching rows. | Returns all rows from one or both tables. |
Unmatched Rows | Excluded from the result. | Included with NULL values for missing columns. |
Performance | Generally faster. | Can be slower due to more data being processed. |
Variants | Single type. | Includes LEFT, RIGHT, and FULL OUTER JOIN. |
使用例
INNER JOIN
: 特定の部門で働く従業員を検索するなど、一致するレコードのみが必要な場合に使用します。LEFT JOIN
: 部門の割り当ての有無にかかわらず、すべての従業員をリストするなど、1 つのテーブルのすべてのレコードが必要な場合に使用します。RIGHT JOIN
: 従業員が割り当てられているまたは割り当てられていないすべての部門をリストするなど、2 番目のテーブルのすべてのレコードが必要な場合に使用します。
結論
以上がINNER JOIN と OUTER JOIN: SQL 結合を詳しく理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。