Heim  >  Artikel  >  Datenbank  >  Was sind die internen und externen Abfragen von MySQL?

Was sind die internen und externen Abfragen von MySQL?

青灯夜游
青灯夜游Original
2020-10-09 09:33:452794Durchsuche

Die interne Abfrage von MySQL verwendet bedingte Ausdrücke, um bestimmte Datenzeilen in Querverbindungen zu eliminieren, indem sie Verbindungsbedingungen festlegen. Die Abfrageergebnisse sind alle Datensätze, die die Verbindungsbedingungen erfüllen Tabelle und geben Sie dann Datensätze zurück, die die auf der Basistabelle basierenden Bedingungen erfüllen bzw. nicht erfüllen.

Was sind die internen und externen Abfragen von MySQL?

(Empfohlenes Tutorial: MySQL-Video-Tutorial)

MySQL INNER JOIN: Inner Join-Abfrage

Inner JOIN entfernt hauptsächlich Abfrageergebnisse durch Festlegen von Verbindungsbedingungen. Querverbindung bestimmter Datenzeilen in . 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子句]

Die Syntaxbeschreibung lautet wie folgt:

  • Feldname: Der Name des abzufragenden Felds.

  • a3a434d363a63b1c2ecc5a52d2bda7ed97d086c239691a1b38600fefbaf795b7: 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.

Inner Joins können zwei oder mehr Tabellen abfragen. Um allen ein besseres Verständnis zu ermöglichen, erklären wir vorerst nur die Verbindungsabfrage zwischen zwei Tabellen.

Beispiel

Verwenden Sie einen inneren Join zwischen der Tabelle tb_students_info und der Tabelle tb_course, um Studentennamen und entsprechende Kursnamen abzufragen. Die SQL-Anweisung und die laufenden Ergebnisse lauten wie folgt.

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)

In der Abfrageanweisung hier wird die Beziehung zwischen den beiden Tabellen durch INNER JOIN angegeben und die Bedingungen für die Verbindung werden mithilfe der ON-Klausel angegeben.

Hinweis: Bei der Abfrage mehrerer Tabellen müssen Sie nach der SELECT-Anweisung angeben, aus welcher Tabelle die Felder stammen. Daher lautet die Schreibmethode beim Abfragen mehrerer Tabellen nach der SELECT-Anweisung Tabellenname.Spaltenname. Darüber hinaus können Sie bei sehr langen Tabellennamen auch einen Alias ​​für die Tabelle festlegen, sodass Sie den Alias ​​und den Spaltennamen der Tabelle direkt nach der SELECT-Anweisung schreiben können.

MySQL LEFT/RIGHT JOIN: Outer-Join-Abfrage

Die Abfrageergebnisse des Inner-Joins sind alle Datensätze, die die Verbindungsbedingungen erfüllen, und der Outer-Join teilt die verbundene Tabelle zunächst in eine Basistabelle und eine Referenz auf Tabelle und verwenden Sie dann die Basistabelle. Gibt Datensätze zurück, die die auf der Tabelle basierenden Bedingungen erfüllen und nicht 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子句>

Die Syntaxbeschreibung lautet wie folgt.

  • Feldname: der Name des abzufragenden Feldes.

  • a3a434d363a63b1c2ecc5a52d2bda7ed97d086c239691a1b38600fefbaf795b7: 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)

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)

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.

Rechter Join

Der rechte äußere Join wird auch als rechter Join bezeichnet, und der rechte Join ist der umgekehrte Join des linken Joins. Verwenden Sie das Schlüsselwort RIGHT OUTER JOIN, um zwei Tabellen zu verknüpfen, und verwenden Sie die ON-Klausel, um die Verknüpfungsbedingungen festzulegen.

Das Syntaxformat des rechten Joins lautet wie folgt:

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

Die Syntaxbeschreibung lautet wie folgt.

  • Feldname: der Name des abzufragenden Feldes.

  • cc850cc925b27bf1d57f25e37031a14d400ebfdb8c111565a1c54094f4979ff6:需要右连接的表名。

  • 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)

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

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

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

相关推荐:php培训

Das obige ist der detaillierte Inhalt vonWas sind die internen und externen Abfragen von MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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