Comment interroger deux tables : 1. Utilisez l'instruction SELECT et le mot-clé "CROSS JOIN" pour effectuer une requête de jointure croisée ; 2. Utilisez l'instruction SELECT et le mot-clé "INNER JOIN" pour effectuer une requête de jointure interne ; . Utilisez l'instruction SELECT et le mot-clé "INNER JOIN" pour interroger le mot-clé OUTER JOIN" pour la requête de jointure externe.
L'environnement d'exploitation de ce tutoriel : système windows7, version mysql8, ordinateur Dell G3.
Dans une base de données relationnelle, les tables sont liées, donc dans les applications pratiques, des requêtes multi-tables sont souvent utilisées. La requête multi-tables consiste à interroger deux ou plusieurs tables en même temps.
Dans MySQL, les requêtes multi-tables incluent principalement les jointures croisées, les jointures internes et les jointures externes.
MySQL Cross Join
Cross JOIN (CROSS JOIN) est généralement utilisé pour renvoyer le produit cartésien de la table jointe.
Le format syntaxique de la connexion croisée est le suivant :
SELECT <字段名> FROM <表1> CROSS JOIN <表2> [WHERE子句]
Copier après la connexion
ou
SELECT <字段名> FROM <表1>, <表2> [WHERE子句]
Copier après la connexion
La description de la syntaxe est la suivante :
Nom du champ : le nom du champ à interroger.
: le nom de la table qui doit être interconnectée.
Clause WHERE : utilisée pour définir les conditions de requête pour les connexions croisées.
Remarque : lors de la jointure croisée de plusieurs tables, utilisez simplement CROSS JOIN ou , en continu après FROM. Les résultats de retour des deux syntaxes ci-dessus sont les mêmes, mais la première syntaxe est la méthode d'écriture standard officiellement recommandée. ,即可。以上两种语法的返回结果是相同的,但是第一种语法才是官方建议的标准写法。
当连接的表之间没有关系时,我们会省略掉 WHERE 子句,这时返回结果就是两个表的笛卡尔积,返回结果数量就是两个表的数据行相乘。需要注意的是,如果每个表有 1000 行,那么返回结果的数量就有 1000×1000 = 1000000 行,数据量是非常巨大的。
内连接使用 INNER JOIN 关键字连接两张表,并使用 ON 子句来设置连接条件。如果没有连接条件,INNER JOIN 和 CROSS JOIN
Lorsqu'il n'y a pas de relation entre les tables connectées, nous omettrons la clause WHERE. Dans ce cas, le résultat renvoyé est le produit cartésien des deux tables, et le nombre de résultats renvoyés est la multiplication des lignes de données de la. deux tableaux. Il convient de noter que si chaque table comporte 1 000 lignes, alors le nombre de résultats renvoyés sera de 1 000 × 1 000 = 1 000 000 lignes et la quantité de données est très énorme.
Exemple :
Interrogez le tableau d'informations sur l'élève et le tableau d'informations sur le sujet, et obtenez un produit cartésien. Afin de faciliter l'observation des résultats en cours après la connexion croisée de la table d'informations sur l'étudiant et de la table sujet, nous interrogeons d'abord les données de ces deux tables séparément, puis effectuons la requête de connexion croisée.
1) Interrogez les données dans la table tb_students_info, l'instruction SQL et les résultats d'exécution sont les suivants :
SELECT <字段名> FROM <表1> INNER JOIN <表2> [ON子句]
Copier après la connexion
2) Interrogez les données dans la table tb_course, 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 INNER 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++ |
+--------+-------------+
10 rows in set (0.00 sec)
Copier après la connexion
3) Utilisez CROSS JOIN pour interroger les deux tables. Le produit cartésien, l'instruction SQL et les résultats d'exécution sont les suivants :
SELECT <字段名> FROM <表1> LEFT OUTER JOIN <表2> <ON子句>
Copier après la connexion
Copier après la connexion
Comme le montrent les résultats d'exécution, 50 enregistrements ont été renvoyés après une requête de connexion croisée entre les tables tb_course et tb_students_info. . Comme vous pouvez l'imaginer, lorsqu'il y a beaucoup de données dans le tableau, les résultats courants obtenus seront très longs et les résultats courants obtenus ne sont pas très significatifs. Par conséquent, cette méthode de requête multi-tables via connexion croisée n’est pas couramment utilisée et nous devrions essayer d’éviter ce type de requête.
MySQL Inner Join
Inner JOIN supprime principalement les connexions croisées de certaines lignes de données dans les résultats de la requête en définissant des conditions de connexion. Pour faire simple, les expressions conditionnelles sont utilisées pour éliminer certaines lignes de données dans les connexions croisées.
La jointure interne utilise le mot-clé INNER JOIN pour connecter deux tables et utilise la clause ON pour définir les conditions de connexion. Sans conditions de jointure, INNER JOIN et CROSS JOIN sont syntaxiquement équivalents et interchangeables. Le format syntaxique de la connexion interne est le suivant :
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)
Copier après la connexion
Copier après la connexion
La description de la syntaxe est la suivante : Nom du champ : le nom du champ à interroger.
: le nom de la table qui nécessite une jointure interne. INNER JOIN : Vous pouvez omettre le mot-clé INNER dans les jointures internes et utiliser uniquement le mot-clé JOIN. 🎜🎜Clause ON : utilisée pour définir les conditions de connexion des jointures internes. 🎜🎜🎜🎜🎜INNER JOIN peut également utiliser la clause WHERE pour spécifier les conditions de connexion, mais la syntaxe INNER JOIN ... ON est la méthode d'écriture standard officielle, et la clause WHERE affectera les performances de la requête à un moment donné. 🎜🎜🎜Lorsque vous connectez plusieurs tables, utilisez simplement INNER JOIN ou JOIN en continu après FROM. 🎜🎜Les jointures internes peuvent interroger deux tables ou plus. Afin de permettre à chacun de mieux comprendre, nous n'expliquerons pour le moment que la requête de connexion entre deux tables. 🎜🎜Exemple : 🎜
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)
Copier après la connexion
Copier après la connexion
🎜Dans l'instruction de requête ici, la relation entre les deux tables est spécifiée via INNER JOIN et les conditions de connexion sont données à l'aide de la clause ON. 🎜🎜Remarque : lors de l'interrogation de plusieurs tables, vous devez spécifier de quelle table proviennent les champs après l'instruction SELECT. Par conséquent, lors de l'interrogation de plusieurs tables, la méthode d'écriture après l'instruction SELECT est nom de la table.nom de la colonne. De plus, si le nom de la table est très long, vous pouvez également définir un alias pour la table, afin de pouvoir écrire l'alias de la table et le nom de la colonne directement après l'instruction SELECT. 🎜🎜🎜🎜Jointure externe MySQL🎜🎜🎜🎜Les résultats de la requête de la jointure interne sont tous les enregistrements qui remplissent les conditions de connexion. La jointure externe divisera d'abord la table connectée en une table de base et une table de référence, puis renverra les enregistrements. qui satisfont à la somme basée sur la table de base. Enregistrements qui ne remplissent pas les conditions. 🎜
外连接可以分为左外连接和右外连接,下面根据实例分别介绍左外连接和右外连接。
左连接
左外连接又称为左连接,使用 LEFT OUTER JOIN 关键字连接两个表,并使用 ON 子句来设置连接条件。
左连接的语法格式如下:
SELECT <字段名> FROM <表1> LEFT OUTER JOIN <表2> <ON子句>
Copier après la connexion
Copier après la connexion
语法说明如下。
字段名:需要查询的字段名称。
<表1><表2>:需要左连接的表名。
LEFT OUTER JOIN:左连接中可以省略 OUTER 关键字,只使用关键字 LEFT JOIN。
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)
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)
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