Maison >base de données >tutoriel mysql >Quelle est la façon d'écrire des connexions chinoises et étrangères dans MySQL ?

Quelle est la façon d'écrire des connexions chinoises et étrangères dans MySQL ?

青灯夜游
青灯夜游original
2020-10-19 14:23:514345parcourir

Les jointures MySQL chinoises et étrangères peuvent être divisées en jointures externes gauche et jointures externes droites. Les méthodes d'écriture sont "SELECT nom du champ FROM table 1 LEFT OUTER JOIN table 2 ON clause" et "SELECT nom du champ FROM table 1". RIGHT OUTER JOIN" Clause ON du tableau 2".

Quelle est la façon d'écrire des connexions chinoises et étrangères dans MySQL ?

(Tutoriel recommandé : Tutoriel vidéo MySQL)

Les jointures externes peuvent être divisées en jointures externes gauche et en jointures externes droites. jointures

  • Jointure externe gauche : contient toutes les lignes du tableau de gauche (qu'il y ait ou non des lignes correspondantes dans le tableau de droite) et toutes les lignes correspondantes du tableau de droite

  • Jointure externe droite : contient toutes les lignes du tableau de droite (qu'il y ait ou non des lignes correspondantes dans le tableau de gauche) et toutes les lignes correspondantes du tableau de gauche

Jointure gauche

Jointure externe gauche, également connue sous le nom de jointure gauche, utilise le mot-clé LEFT OUTER JOIN pour connecter deux tables et utilise la clause ON pour définir les conditions de connexion.

Le format de syntaxe de la jointure gauche est le suivant :

SELECT <字段名> FROM <表1> LEFT OUTER JOIN <表2> <ON子句>

La description de la syntaxe est la suivante :

  • Nom du champ : Le nom du champ à interroger.

  • 05cee8b6ad5efd33489a0be0260a7bbca31a6b5c4a9ac86f75409c3950db0e23 : le nom de la table qui nécessite une jointure à gauche.

  • LEFT OUTER JOIN : Le mot-clé OUTER peut être omis dans la jointure gauche et seul le mot-clé LEFT JOIN est utilisé.

  • Clause ON : utilisée pour définir la condition de connexion de la jointure gauche et ne peut pas être omise.

Dans la syntaxe ci-dessus, "Tableau 1" est la table de base et "Tableau 2" est la table de référence. Lors d'une requête avec une jointure gauche, vous pouvez interroger tous les enregistrements du « Tableau 1 » et les enregistrements correspondant aux conditions de jointure du « Tableau 2 ». Si une ligne du « Tableau 1 » n'a pas de ligne correspondante dans le « Tableau 2 », alors dans le résultat renvoyé, les valeurs de champ du « Tableau 2 » seront des valeurs nulles (NULL).

Exemple 1

Avant d'effectuer la requête de jointure gauche, nous vérifions d'abord les données dans les tables tb_course et tb_students_info. Les instructions SQL et les résultats d'exécution sont les suivants.

mysql> SELECT * FROM tb_course;
+----+-------------+
| id | course_name |
+----+-------------+
|  1 | Java        |
|  2 | MySQL       |
|  3 | Python      |
|  4 | Go          |
|  5 | C++         |
|  6 | HTML        |
+----+-------------+
6 rows in set (0.00 sec)

mysql> SELECT * FROM tb_students_info;
+----+--------+------+------+--------+-----------+
| id | name   | age  | sex  | height | course_id |
+----+--------+------+------+--------+-----------+
|  1 | Dany   |   25 | 男   |    160 |         1 |
|  2 | Green  |   23 | 男   |    158 |         2 |
|  3 | Henry  |   23 | 女   |    185 |         1 |
|  4 | Jane   |   22 | 男   |    162 |         3 |
|  5 | Jim    |   24 | 女   |    175 |         2 |
|  6 | John   |   21 | 女   |    172 |         4 |
|  7 | Lily   |   22 | 男   |    165 |         4 |
|  8 | Susan  |   23 | 男   |    170 |         5 |
|  9 | Thomas |   22 | 女   |    178 |         5 |
| 10 | Tom    |   23 | 女   |    165 |         5 |
| 11 | LiMing |   22 | 男   |    180 |         7 |
+----+--------+------+------+--------+-----------+
11 rows in set (0.00 sec)

Interrogez tous les noms d'étudiants et les noms de cours correspondants dans les tables tb_students_info et tb_course, y compris les étudiants sans cours. L'instruction SQL et les résultats d'exécution sont les suivants.

mysql> SELECT s.name,c.course_name FROM tb_students_info s LEFT OUTER JOIN tb_course c 
    -> ON s.`course_id`=c.`id`;
+--------+-------------+
| name   | course_name |
+--------+-------------+
| Dany   | Java        |
| Henry  | Java        |
| NULL   | Java        |
| Green  | MySQL       |
| Jim    | MySQL       |
| Jane   | Python      |
| John   | Go          |
| Lily   | Go          |
| Susan  | C++         |
| Thomas | C++         |
| Tom    | C++         |
| LiMing | NULL        |
+--------+-------------+
12 rows in set (0.00 sec)

Comme vous pouvez le voir, les résultats en cours affichent 12 enregistrements. L'étudiant nommé LiMing n'a actuellement aucun cours, car il n'y a aucune information de cours pour l'étudiant dans la table tb_course correspondante, donc cet enregistrement est uniquement supprimé. de la table tb_students_info. La valeur correspondante dans la table tb_course et la valeur extraite de la table tb_course est NULL.

Jointure à droite

La jointure externe droite est également appelée jointure à droite, et la jointure à droite est la jointure inversée de la jointure à gauche. Utilisez le mot-clé RIGHT OUTER JOIN pour joindre les deux tables et utilisez la clause ON pour définir les conditions de jointure.

Le format syntaxique de la jointure à droite est le suivant :

SELECT <字段名> FROM <表1> RIGHT OUTER JOIN <表2> <ON子句>

La description de la syntaxe est la suivante :

  • Nom du champ : le nom du champ à interroger.

  • 05cee8b6ad5efd33489a0be0260a7bbca31a6b5c4a9ac86f75409c3950db0e23 : le nom de la table qui nécessite une jointure à droite.

  • RIGHT OUTER JOIN : Le mot-clé OUTER peut être omis dans la jointure de droite et seul le mot-clé RIGHT JOIN est utilisé.

  • Clause ON : utilisée pour définir la condition de connexion de la jointure de droite et ne peut pas être omise.

Contrairement à la jointure de gauche, la jointure de droite utilise "Table 2" comme table de base et "Table 1" comme table de référence. Lorsque vous effectuez une requête de jointure à droite, vous pouvez interroger tous les enregistrements du « Tableau 2 » et les enregistrements correspondant aux conditions de jointure du « Tableau 1 ». Si une ligne du « Tableau 2 » n'a pas de ligne correspondante dans le « Tableau 1 », alors dans le résultat renvoyé, les valeurs des champs du « Tableau 1 » seront nulles (NULL).

Exemple 2

Requérez tous les cours dans les tables tb_students_info et tb_course, y compris les cours sans étudiants, l'instruction SQL et les résultats en cours d'exécution sont les suivants.

mysql> SELECT s.name,c.course_name FROM tb_students_info s RIGHT OUTER JOIN tb_course c 
    -> ON s.`course_id`=c.`id`;
+--------+-------------+
| name   | course_name |
+--------+-------------+
| Dany   | Java        |
| Green  | MySQL       |
| Henry  | Java        |
| Jane   | Python      |
| Jim    | MySQL       |
| John   | Go          |
| Lily   | Go          |
| Susan  | C++         |
| Thomas | C++         |
| Tom    | C++         |
| NULL   | HTML        |
+--------+-------------+
11 rows in set (0.00 sec)

Comme vous pouvez le voir, le résultat affiche 11 enregistrements. Le cours nommé HTML n'a actuellement aucun étudiant. Parce que la table tb_students_info correspondante ne contient pas les informations de l'étudiant, cet enregistrement est donc uniquement retiré de la table tb_course. . La valeur correspondante, tandis que la valeur extraite de la table tb_students_info est NULL.

Lorsque plusieurs tables sont jointes gauche/droite, utilisez simplement LEFT/RIGHT OUTER JOIN ou LEFT/RIGHT JOIN en continu après la clause ON.

Lorsque vous utilisez une requête de jointure externe, vous devez distinguer le résultat de la requête, si vous devez afficher tous les enregistrements de la table de gauche ou tous les enregistrements de la table de droite, puis sélectionner la jointure gauche et la jointure droite correspondantes. .

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn