En SQL, INNER JOIN et OUTER JOIN sont utilisés pour combiner des lignes de deux ou plusieurs tables en fonction d'une colonne associée. La principale différence réside dans la façon dont ces jointures gèrent les lignes sans correspondance.
INNER JOIN renvoie uniquement les lignes qui ont des valeurs correspondantes dans les deux tables. S'il n'y a pas de correspondance, la ligne est exclue du résultat.
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 |
Requête :
SELECT employees.Name, departments.DepartmentName FROM employees INNER JOIN departments ON employees.DepartmentID = departments.DepartmentID;
Name | DepartmentName |
---|---|
Alice | HR |
Bob | IT |
L'OUTER JOIN inclut les lignes d'une ou des deux tables, même s'il n'y a pas de correspondance. Il existe trois types de OUTER JOIN :
Renvoie toutes les lignes du tableau de gauche, même s'il n'y a aucune correspondance dans le tableau de droite.
Syntaxe :
SELECT columns FROM table1 INNER JOIN table2 ON table1.column = table2.column;
Requête :
SELECT employees.Name, departments.DepartmentName FROM employees INNER JOIN departments ON employees.DepartmentID = departments.DepartmentID;
Name | DepartmentName |
---|---|
Alice | HR |
Bob | IT |
Charlie | NULL |
Renvoie toutes les lignes du tableau de droite, même s'il n'y a aucune correspondance dans le tableau de gauche.
Syntaxe :
SELECT columns FROM table1 LEFT JOIN table2 ON table1.column = table2.column;
Requête :
SELECT employees.Name, departments.DepartmentName FROM employees LEFT JOIN departments ON employees.DepartmentID = departments.DepartmentID;
Name | DepartmentName |
---|---|
Alice | HR |
Bob | IT |
NULL | Finance |
Renvoie toutes les lignes des deux tables. Les lignes sans correspondance sont remplies de NULL.
Syntaxe :
SELECT columns FROM table1 RIGHT JOIN table2 ON table1.column = table2.column;
Requête :
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. |
Cas d'utilisation
INNER JOIN
: à utiliser lorsque vous avez uniquement besoin de faire correspondre des enregistrements, par exemple pour rechercher des employés travaillant dans des départements spécifiques.LEFT JOIN
: à utiliser lorsque vous avez besoin de tous les enregistrements d'une table, par exemple pour répertorier tous les employés avec ou sans affectations de service.RIGHT JOIN
: à utiliser lorsque vous avez besoin de tous les enregistrements de la deuxième table, par exemple pour répertorier tous les départements avec ou sans employés affectés.
Conclusion
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!