<p>Dieser Artikel führt Sie durch die Join-Abfrage und Set-Operationen in MySQL. Ich hoffe, er wird Ihnen hilfreich sein! </p>
<p><img src="https://img.php.cn/upload/article/000/000/024/6145d21cb7577613.jpg" alt="Eine kurze Analyse von Join-Abfragen und Set-Operationen beim MySQL-Lernen" ></p>
<h2><strong>Join-Abfrage</strong></h2>
<p>Join-Abfrage bezieht sich auf eine übereinstimmende Abfrage zwischen zwei oder mehr Tabellen. Dies wird im Allgemeinen als horizontale Operation bezeichnet, das heißt, das Endergebnis enthält alle Spalten in diesen Tabellen Es gibt drei Arten von Join-Operationen: Cross-Join, Inner-Join und Outer-Join. [Verwandte Empfehlungen: <a href="https://www.php.cn/course/list/51.html" target="_blank" textvalue="mysql视频教程">MySQL-Video-Tutorial</a>]</p>
<p>Cross Join heißt <code>CROSS JOIN</code>. Es führt ein kartesisches Produkt für zwei Tabellen durch und gibt die Zusammensetzung aller Spalten in den beiden Tabellen zurück, z Die linke Tabelle enthält n Datenelemente und die rechte Tabelle enthält m Datenelemente. Das Endergebnis ist <code>n*m</code>, aber Sie können es auch mit sich selbst verbinden Das Endergebnis ist <code>n*n, wie zum Beispiel die folgende Anweisung. <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">Nach dem Login kopieren</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">Nach dem Login kopieren</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">Nach dem Login kopieren</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="Eine kurze Analyse von Join-Abfragen und Set-Operationen beim MySQL-Lernen"/></p><p>下面是RIGHT JOIN所示图,RIGHT JOIN返回右表 (table2) 中的所有记录,以及左表 (table1) 中的匹配记录。</p><p><img src="https://img.php.cn/upload/image/383/403/226/163196561126076Eine kurze Analyse von Join-Abfragen und Set-Operationen beim MySQL-Lernen" title="163196561126076Eine kurze Analyse von Join-Abfragen und Set-Operationen beim MySQL-Lernen" alt="Eine kurze Analyse von Join-Abfragen und Set-Operationen beim MySQL-Lernen"/></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">Nach dem Login kopieren</div></div></li>Da die Auftragstabelle 7 Daten enthält, werden am Ende 49 Daten generiert. Eine andere Möglichkeit, sie zu schreiben, ist wie folgt. <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">Nach dem Login kopieren</div></div></li>Ihre Ergebnisse sind die gleichen, aber die Schreibmethode ist unterschiedlich. Die obige Schreibmethode wurde 1989 vom American National Standards Institute als ANSI SQL 89-Standard standardisiert und die erste Schreibmethode wurde 1992 festgelegt. </ul><p>Cross-Join ist nützlich, um schnell wiederholte Daten zu generieren, wie zum Beispiel die folgende Anweisung. </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">Nach dem Login kopieren</div></div><p>Das Folgende ist ein innerer Join, der in zwei Teile unterteilt ist. Zuerst wird ein kartesisches Produkt generiert und dann gemäß den nachfolgenden ON-Filterbedingungen gefiltert. Es werden Werte mit denselben Datensätzen in beiden generiert Tische. </p><p><img src="https://img.php.cn/upload/image/218/908/717/1631965602120211.png" title="1631965602120211.png" alt="1 (2).png"/> </p><p>Neben dem Gleichheitsoperator (=) nach ON können Sie auch andere Operatoren verwenden, z. B. größer als ( <code>></code>), kleiner als ( <code><</code>) und nicht den Operator „Gleich“ ( <code><></code>), um die Join-Bedingung zu bilden. </p><p>Der letzte ist OUTER JOIN, der Daten zwischen Tabellen gemäß einigen Filterbedingungen abgleichen kann. Anders als INNER JOIN werden nicht gefundene übereinstimmende Daten in der reservierten Tabelle hinzugefügt, die über OUTER JOIN hinzugefügt werden. MySQL unterstützt LEFT OUTER JOIN, RIGHT OUTER JOIN. Sie können OUTER beim Schreiben weglassen. </p><p>Das Folgende ist ein Diagramm von LEFT JOIN, das alle Datensätze in der linken Tabelle (Tabelle1) und übereinstimmende Datensätze in der rechten Tabelle (Tabelle2) zurückgibt. </p><p><img src="https://img.php.cn/upload/image/297/131/340/1631965607545060.png" title="1631965607545060.png" alt="Eine kurze Analyse von Join-Abfragen und Set-Operationen beim MySQL-Lernen"/><img src="https://img.php.cn/upload/image/410/849/290/1631965648883159.png" title="1631965648883159.png" alt="Eine kurze Analyse von Join-Abfragen und Set-Operationen beim MySQL-Lernen"/></p>Unten Dies ist das in RIGHT JOIN gezeigte Bild. RIGHT JOIN gibt alle Datensätze in der rechten Tabelle (Tabelle2) und die passenden Datensätze in der linken Tabelle (Tabelle1) zurück. <blockquote><p><img src="https://img.php.cn/upload/image/383/403/226/163196561126076Eine kurze Analyse von Join-Abfragen und Set-Operationen beim MySQL-Lernen" title="163196561126076Eine kurze Analyse von Join-Abfragen und Set-Operationen beim MySQL-Lernen" alt="Eine kurze Analyse von Join-Abfragen und Set-Operationen beim MySQL-Lernen"/></p><p></p> Set-Operation </blockquote><p><a href="https://www.php.cn/course.html" target="_blank" textvalue="编程视频">In MySQL gibt es einen UNION-Operator, der zum Kombinieren von zwei oder mehr SELECT-Ergebnismengen und zum Löschen doppelter Zeilen zwischen SELECT-Anweisungen verwendet wird. Befolgen Sie bei der Verwendung die folgenden Grundregeln: </a><ul></p>Alle Die Zahl und die Reihenfolge der Spalten, die in der <code>SELECT</code>-Anweisung erscheinen, müssen gleich sein. 🎜🎜Spalten müssen außerdem vom gleichen Datentyp sein. 🎜🎜🎜Wenn Sie jetzt die folgende Tabelle haben🎜<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">Nach dem Login kopieren</div></div>🎜Führen Sie die folgende SQL aus🎜<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">Nach dem Login kopieren</div></div>🎜Das Endergebnis sieht so aus. 🎜rrreee🎜Die UNION-Anweisung entfernt standardmäßig doppelte Daten aus dem Ergebniszeilensatz. Sie können jedoch UNION ALL verwenden, um doppelte Datensätze zu erhalten. 🎜rrreee🎜Die Ergebnisse sind wie folgt🎜rrreee🎜Der grundlegende Unterschied zwischen UNION und JOIN besteht darin, dass UNION die Ergebnismenge horizontal kombiniert, während die JOIN-Anweisung die Ergebnismenge vertikal kombiniert. 🎜🎜🎜🎜🎜🎜Originaladresse: https://juejin.cn/post/7001772087534682143🎜🎜Autor: i Listen to the Wind Passing Night🎜🎜🎜Weitere Programmierkenntnisse finden Sie unter: 🎜Programmiervideo🎜! ! 🎜
Das obige ist der detaillierte Inhalt vonEine kurze Analyse von Join-Abfragen und Set-Operationen beim MySQL-Lernen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!