Heim > Datenbank > MySQL-Tutorial > Hauptteil

Was sind die Verbindungsabfragen für MySQL-Tabellen?

青灯夜游
Freigeben: 2020-10-19 17:35:15
Original
6077 Leute haben es durchsucht

MySQL-Tabellenverbindungsabfragen umfassen: 1. Querverbindung, die im Allgemeinen verwendet wird, um das kartesische Produkt der verbundenen Tabelle zurückzugeben. 2. Innere Verknüpfung, die hauptsächlich die Überschneidung bestimmter Datenzeilen in den Abfrageergebnissen durch Festlegen von Verbindungsbedingungen entfernt. Verbindung; 3. Äußere Verbindung: Teilen Sie die verbundene Tabelle zunächst in eine Basistabelle und eine Referenztabelle auf und verwenden Sie dann die Basistabelle als Grundlage für die Rückgabe von Datensätzen, die die Bedingungen erfüllen und nicht erfüllen.

Was sind die Verbindungsabfragen für MySQL-Tabellen?

(Empfohlenes Tutorial: MySQL-Video-Tutorial)

In einer relationalen Datenbank besteht eine Beziehung zwischen Tabellen, daher werden in praktischen Anwendungen häufig Abfragen mit mehreren Tabellen verwendet. Bei der Abfrage mehrerer Tabellen werden zwei oder mehr Tabellen gleichzeitig abgefragt.

In MySQL umfassen Abfragen mit mehreren Tabellen hauptsächlich Cross-Joins, Inner-Joins und Outer-Joins.

Cross Join

Cross Join (CROSS JOIN) wird im Allgemeinen verwendet, um das kartesische Produkt der Join-Tabelle zurückzugeben.

Das Syntaxformat der Querverbindung lautet wie folgt:

SELECT <字段名> FROM <表1> CROSS JOIN <表2> [WHERE子句]
Nach dem Login kopieren

oder

SELECT <字段名> FROM <表1>, <表2> [WHERE子句]
Nach dem Login kopieren

Die Syntaxbeschreibung lautet wie folgt:

  • Feldname: Der Name des abzufragenden Felds.

  • : Der Name der Tabelle, die querverbunden werden muss.

  • WHERE-Klausel: Wird zum Festlegen von Abfragebedingungen für Querverbindungen verwendet.

Hinweis: Wenn Sie mehrere Tabellen über Kreuz verbinden, verwenden Sie CROSS JOIN oder fortlaufend nach FROM. Die Rückgabeergebnisse der beiden oben genannten Syntaxen sind gleich, die erste Syntax ist jedoch die offiziell empfohlene Standardschreibmethode.

Wenn zwischen den verbundenen Tabellen keine Beziehung besteht, lassen wir die WHERE-Klausel weg. In diesem Fall ist das zurückgegebene Ergebnis das kartesische Produkt der beiden Tabellen und die Anzahl der zurückgegebenen Ergebnisse ist die Multiplikation der Datenzeilen der zwei Tische. Es ist zu beachten, dass, wenn jede Tabelle 1000 Zeilen hat, die Anzahl der zurückgegebenen Ergebnisse 1000 x 1000 = 1000000 Zeilen beträgt und die Datenmenge sehr groß ist.

Inner JOIN

Inner JOIN entfernt hauptsächlich Querverbindungen bestimmter Datenzeilen in den Abfrageergebnissen, indem Verbindungsbedingungen festgelegt werden. Vereinfacht ausgedrückt werden bedingte Ausdrücke verwendet, um bestimmte Datenzeilen in Querverbindungen zu eliminieren.

Inner Join verwendet das Schlüsselwort INNER JOIN, um zwei Tabellen zu verbinden, und verwendet die ON-Klausel, um die Verbindungsbedingungen festzulegen. Ohne Join-Bedingungen sind INNER JOIN und CROSS JOIN syntaktisch gleichwertig und austauschbar.

Das Syntaxformat des Inner Join lautet wie folgt:

SELECT <字段名> FROM <表1> INNER JOIN <表2> [ON子句]
Nach dem Login kopieren

Die Syntaxbeschreibung lautet wie folgt.

  • Feldname: der Name des abzufragenden Feldes.

  • : Der Name der Tabelle, die eine innere Verknüpfung erfordert.

  • INNER JOIN: Sie können das Schlüsselwort INNER in Inner Joins weglassen und nur das Schlüsselwort JOIN verwenden.

  • ON-Klausel: Wird zum Festlegen der Verbindungsbedingungen von Inner Joins verwendet.

  • INNER JOIN kann auch die WHERE-Klausel verwenden, um Verbindungsbedingungen anzugeben, aber die INNER JOIN ... ON-Syntax ist die offizielle Standardschreibmethode, und die WHERE-Klausel wirkt sich irgendwann auf die Leistung der Abfrage aus.

Wenn Sie mehrere Tabellen verbinden, verwenden Sie einfach INNER JOIN oder JOIN fortlaufend nach FROM.

Äußerer Join

Die Abfrageergebnisse des inneren Joins sind alle Datensätze, die die Verbindungsbedingungen erfüllen. Der äußere Join teilt die verbundene Tabelle zunächst in eine Basistabelle und eine Referenztabelle auf und gibt dann die erfüllten zurück und nicht erfüllte Datensätze basierend auf den Datensätzen der Basistabelle, die die Bedingungen erfüllen.

Äußere Verknüpfungen können in linke äußere Verknüpfungen und rechte äußere Verknüpfungen unterteilt werden. Im Folgenden werden linke äußere Verknüpfungen bzw. rechte äußere Verknüpfungen anhand von Beispielen beschrieben.

Linker Join

Der linke äußere Join, auch als linker Join bekannt, verwendet das Schlüsselwort LEFT OUTER JOIN, um zwei Tabellen zu verbinden, und verwendet die ON-Klausel, um die Verbindungsbedingungen festzulegen.

Das Syntaxformat des Left Join lautet wie folgt:

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

Die Syntaxbeschreibung lautet wie folgt.

Feldname: der Name des abzufragenden Feldes.

  • : Der Name der Tabelle, die eine Linksverknüpfung erfordert.

  • LEFT OUTER JOIN: Sie können das OUTER-Schlüsselwort im Left Join weglassen und nur das Schlüsselwort LEFT JOIN verwenden.

  • ON-Klausel: Wird zum Festlegen der Verbindungsbedingungen des linken Joins verwendet und kann nicht weggelassen werden.

In der obigen Syntax ist „Tabelle 1“ die Basistabelle und „Tabelle 2“ die Referenztabelle. Bei der Abfrage mit einem Left-Join können Sie alle Datensätze in „Tabelle 1“ und die Datensätze, die den Join-Bedingungen entsprechen, in „Tabelle 2“ abfragen. Wenn eine Zeile in „Tabelle 1“ keine passende Zeile in „Tabelle 2“ hat, dann sind die Feldwerte von „Tabelle 2“ im zurückgegebenen Ergebnis Nullwerte (NULL).

Beispiel 1

Bevor wir die Left-Join-Abfrage durchführen, überprüfen wir zunächst die Daten in den beiden Tabellen tb_course und tb_students_info. Die SQL-Anweisungen und Ausführungsergebnisse lauten wie folgt.

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)
Nach dem Login kopieren

Fragen Sie alle Studentennamen und entsprechenden Kursnamen in den Tabellen tb_students_info und tb_course ab, einschließlich Studenten ohne Kurse. Die SQL-Anweisung und die laufenden Ergebnisse lauten wie folgt.

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)
Nach dem Login kopieren

Sie können sehen, dass das laufende Ergebnis 12 Datensätze anzeigt. Der Student namens LiMing hat derzeit keine Kursinformationen für den Studenten in der entsprechenden tb_course-Tabelle, dieser Datensatz übernimmt nur den entsprechenden Wert in der tb_students_info-Tabelle . und der aus der Tabelle tb_course entnommene Wert ist NULL.

右连接

右外连接又称为右连接,右连接是左连接的反向连接。使用 RIGHT OUTER JOIN 关键字连接两个表,并使用 ON 子句来设置连接条件。

右连接的语法格式如下:

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

语法说明如下。

  • 字段名:需要查询的字段名称。

  • <表1><表2>:需要右连接的表名。

  • RIGHT OUTER JOIN:右连接中可以省略 OUTER 关键字,只使用关键字 RIGHT JOIN。

  • ON 子句:用来设置右连接的连接条件,不能省略。

与左连接相反,右连接以“表2”为基表,“表1”为参考表。右连接查询时,可以查询出“表2”中的所有记录和“表1”中匹配连接条件的记录。如果“表2”的某行在“表1”中没有匹配行,那么在返回结果中,“表1”的字段值均为空值(NULL)。

例 2

在 tb_students_info 表和 tb_course 表中查询所有课程,包括没有学生的课程,SQL 语句和运行结果如下。
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)
Nach dem Login kopieren

可以看到,结果显示了 11 条记录,名称为 HTML 的课程目前没有学生,因为对应的 tb_students_info 表中并没有该学生的信息,所以该条记录只取出了 tb_course 表中相应的值,而从 tb_students_info 表中取出的值为 NULL。

多个表左/右连接时,在 ON 子句后连续使用 LEFT/RIGHT OUTER JOIN 或 LEFT/RIGHT JOIN 即可。

使用外连接查询时,一定要分清需要查询的结果,是需要显示左表的全部记录还是右表的全部记录,然后选择相应的左连接和右连接。

Das obige ist der detaillierte Inhalt vonWas sind die Verbindungsabfragen für MySQL-Tabellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage