<p>Cet article vous guidera à travers les opérations de requête de jointure et de définition dans MySQL. J'espère qu'il vous sera utile ! </p>
<p><img src="https://img.php.cn/upload/article/000/000/024/6145d21cb7577613.jpg" alt="Une brève analyse des requêtes de jointure et des opérations définies dans l'apprentissage MySQL" ></p>
<h2><strong>Requête de jointure</strong></h2>
<p>La requête de jointure fait référence à une requête de correspondance entre deux ou plusieurs tables. On l'appelle généralement une opération horizontale, c'est-à-dire que le résultat final contiendra toutes les colonnes de ces tables. Il existe trois types d'opérations de jointure : jointure croisée, jointure interne et jointure externe. [Recommandations associées : <a href="https://www.php.cn/course/list/51.html" target="_blank" textvalue="mysql视频教程">Tutoriel vidéo mysql</a>]</p>
<p>La jointure croisée s'appelle <code>CROSS JOIN</code> Elle effectue un produit cartésien sur deux tables et renvoie la composition de toutes les colonnes des deux tables, telles que. gauche Il y a n éléments de données dans le tableau, et il y a m éléments de données dans le tableau de droite, alors le résultat final est <code>n*m</code>, mais vous pouvez également le connecter à vous-même, puis le le résultat final est <code>n*n, comme l'instruction suivante. <code>CROSS JOIN</code>,他对两个表执行笛卡儿积,他将返回两个表中所有列的组成,比如左表中有n条数据,右表中有m条数据,那么最终结果就是<code>n*m</code>条,但是也可以自己与自己联结,那么最终结果就是<code>n*n</code>条,比如下面语句。</code></p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">select * from orders as a cross join orders as b;
+---------+--------+---------+--------+
| orderId | userId | orderId | userId |
+---------+--------+---------+--------+
| 10007 | 2 | 10001 | 1 |
| 10006 | 4 | 10001 | 1 |
.....
| 10002 | 1 | 10007 | 2 |
| 10001 | 1 | 10007 | 2 |
+---------+--------+---------+--------+
49 rows in set (0.01 sec)</pre><div class="contentsignin">Copier après la connexion</div></div><p>由于orders表中有7条数据,那么最后将生成49条数据,还有一种写法是下面这样的。</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">mysql> select * from orders as a ,orders as b;</pre><div class="contentsignin">Copier après la connexion</div></div><p>他们的结果都相同,只是写法不同,上面的写法是在1989年,美国国家标准学会对SQL进行的规范,称之为ANSI SQL 89标准,而第一种写法是92年规定的。</p><p>交叉联结有个用处就是快速生成重复数据,比如下面语句。</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">insert orders select a.orderId,a.userId from orders as a ,orders as b limit 10;</pre><div class="contentsignin">Copier après la connexion</div></div><p>下面就是内联结,分为两部,首先产生笛卡儿积,然后在根据后面ON的过滤条件来过滤,他产生两个表中具有相同记录的值。</p><p><img src="https://img.php.cn/upload/image/218/908/717/1631965602120211.png" title="1631965602120211.png" alt="1 (2).png"/></p><p>在ON后面除了等于运算符 (=) 之外,还可以使用其他运算符,例如大于 ( <code>></code>)、小于 ( <code><</code>) 和不等于 ( <code><></code>) 运算符来构成连接条件。</p><p>最后一个是OUTER JOIN,可以按照一些过滤条件来匹配表之间的数据,与INNER JOIN不同的是,在通过OUTER JOIN添加的保留表中存在未找到的匹配数据,MySQL支持LEFT OUTER JOIN、RIGHT OUTER JOIN,写的时候可以省略OUTER 。</p><p>下面是LEFT JOIN所示图,LEFT JOIN返回左表 (table1) 中的所有记录,以及右表 (table2) 中的匹配记录。</p><p><img src="https://img.php.cn/upload/image/297/131/340/1631965607545060.png" title="1631965607545060.png" alt="Une brève analyse des requêtes de jointure et des opérations définies dans lapprentissage MySQL"/></p><p>下面是RIGHT JOIN所示图,RIGHT JOIN返回右表 (table2) 中的所有记录,以及左表 (table1) 中的匹配记录。</p><p><img src="https://img.php.cn/upload/image/383/403/226/163196561126076Une brève analyse des requêtes de jointure et des opérations définies dans lapprentissage MySQL" title="163196561126076Une brève analyse des requêtes de jointure et des opérations définies dans lapprentissage MySQL" alt="Une brève analyse des requêtes de jointure et des opérations définies dans lapprentissage MySQL"/></p><h2><strong>集合操作</strong></h2><p>MySQL中有个UNION运算符,用于组合2个或多个SELECT结果集,并删除SELECT语句之间的重复行,使用他时候要遵循以下基本规则:</p><ul><li>所有<code>SELECT</code><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">CREATE TABLE t1 (
id INT PRIMARY KEY
);
CREATE TABLE t2 (
id INT PRIMARY KEY
);
INSERT INTO t1 VALUES (1),(2),(3);
INSERT INTO t2 VALUES (2),(3),(4);</pre><div class="contentsignin">Copier après la connexion</div></div></li>Comme il y a 7 éléments de données dans le tableau des commandes, 49 éléments de données seront générés à la fin. Une autre façon de l'écrire est la suivante. <li><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">SELECT id FROM t1
UNION
SELECT id FROM t2;</pre><div class="contentsignin">Copier après la connexion</div></div></li>Leurs résultats sont les mêmes, mais la méthode d'écriture est différente. La méthode d'écriture ci-dessus a été normalisée pour SQL par l'American National Standards Institute en 1989, appelée norme ANSI SQL 89, et la première méthode d'écriture a été stipulée en 1992. </ul><p>La jointure croisée est utile pour générer rapidement des données répétées, telles que l'instruction suivante. </p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
+----+
4 rows in set (0.00 sec)</pre><div class="contentsignin">Copier après la connexion</div></div><p>Ce qui suit est une jointure interne, qui est divisée en deux parties. Tout d'abord, un produit cartésien est généré, puis il est filtré en fonction des conditions de filtrage ON suivantes. Il génère des valeurs avec les mêmes enregistrements dans les deux. tableaux. </p><p><img src="https://img.php.cn/upload/image/218/908/717/1631965602120211.png" title="1631965602120211.png" alt="1 (2).png"/> </p><p>En plus de l'opérateur égal (=), vous pouvez également utiliser d'autres opérateurs après ON, tels que supérieur à (<code>></code>), inférieur à (<code><</code>) et non Equals ( <code><></code>) pour former la condition de jointure. </p><p>Le dernier est OUTER JOIN, qui peut faire correspondre les données entre les tables selon certaines conditions de filtrage. Différent de INNER JOIN, il y a des données correspondantes introuvables dans la table réservée ajoutées via OUTER JOIN. MySQL prend en charge LEFT OUTER JOIN, RIGHT OUTER JOIN, vous pouvez omettre OUTER lors de l'écriture. </p><p>Ce qui suit est un diagramme de LEFT JOIN. LEFT JOIN renvoie tous les enregistrements de la table de gauche (table1) et les enregistrements correspondants dans la table de droite (table2). </p><p><img src="https://img.php.cn/upload/image/297/131/340/1631965607545060.png" title="1631965607545060.png" alt="Une brève analyse des requêtes de jointure et des opérations définies dans lapprentissage MySQL"/><img src="https://img.php.cn/upload/image/410/849/290/1631965648883159.png" title="1631965648883159.png" alt="Une brève analyse des requêtes de jointure et des opérations définies dans lapprentissage MySQL"/></p>Ci-dessous Voici l'image affichée dans RIGHT JOIN. RIGHT JOIN renvoie tous les enregistrements de la table de droite (table2) et les enregistrements correspondants dans la table de gauche (table1). <blockquote><p><img src="https://img.php.cn/upload/image/383/403/226/163196561126076Une brève analyse des requêtes de jointure et des opérations définies dans lapprentissage MySQL" title="163196561126076Une brève analyse des requêtes de jointure et des opérations définies dans lapprentissage MySQL" alt="Une brève analyse des requêtes de jointure et des opérations définies dans lapprentissage MySQL"/></p><p></p> Opération d'ensemble </blockquote><p><a href="https://www.php.cn/course.html" target="_blank" textvalue="编程视频">Il existe un opérateur UNION dans MySQL, qui est utilisé pour combiner 2 jeux de résultats SELECT ou plus et supprimer les lignes en double entre les instructions SELECT. Lorsque vous l'utilisez, suivez les règles de base suivantes : </a><ul></p>Tous Le nombre. et l'ordre des colonnes apparaissant dans l'instruction <code>SELECT</code> doit être le même. 🎜🎜Les colonnes doivent également être du même type de données. 🎜🎜🎜Si vous avez le tableau suivant maintenant🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">SELECT id FROM t1
UNION ALL
SELECT id FROM t2;</pre><div class="contentsignin">Copier après la connexion</div></div>🎜Exécutez le SQL suivant🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 2 |
| 3 |
| 4 |
+----+
6 rows in set (0.00 sec)</pre><div class="contentsignin">Copier après la connexion</div></div>🎜Le résultat final est comme ceci. 🎜rrreee🎜L'instruction UNION supprimera les données en double de la ligne de résultat définie par défaut, cependant, vous pouvez utiliser UNION ALL pour obtenir des enregistrements en double. 🎜rrreee🎜Le résultat est le suivant🎜rrreee🎜La différence fondamentale entre UNION et JOIN est que UNION combine l'ensemble de résultats horizontalement, tandis que l'instruction JOIN combine l'ensemble de résultats verticalement. 🎜🎜🎜🎜🎜🎜Adresse originale : https://juejin.cn/post/7001772087534682143🎜🎜Auteur : i Listen to the Wind Passing Night🎜🎜🎜Pour plus de connaissances liées à la programmation, veuillez visiter : 🎜Vidéo de programmation🎜 ! ! 🎜
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!