Heim > Datenbank > MySQL-Tutorial > Hauptteil

Lust auf Verständnis --- MySQL-Mehrtabellenabfrage

花姐姐
Freigeben: 2020-05-06 11:12:12
nach vorne
2638 Leute haben es durchsucht

Lust auf Verständnis --- MySQL-Mehrtabellenabfrage

1. SELECT-Klausel für Mehrtabellenabfrage verwenden

SELECT 字段名 FROM 表1,表2 … WHERE 表1.字段 = 表2.字段 AND 其它查询条件

SELECT a.id,a.name,a.address,a.date,b.math,b.english,b.chinese FROM tb_demo065_tel AS b,tb_demo065 AS a WHERE a.id=b.id
Nach dem Login kopieren

Hinweis: Im obigen Code wird die Zuordnung zwischen den beiden Tabellen unter der Bedingung hergestellt, dass die ID-Feldinformationen der beiden Tabellen identisch sind. Sie sollten jedoch in der tatsächlichen Entwicklung nicht auf diese Weise verwendet werden Verwenden Sie am besten Primär- und Fremdschlüsseleinschränkungen, um

2 zu erreichen. Verwenden Sie Tabellenaliase für Abfragen mit mehreren Tabellen
Zum Beispiel:

SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065  a,tb_demo065_tel  b WHERE a.id=b.id AND b.id='$_POST[textid]'
Nach dem Login kopieren

In In der SQL-Sprache können Sie Aliase für Tabellen auf zwei Arten angeben:
Die erste besteht darin, sie über das Schlüsselwort AS anzugeben, z. B.

SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065 AS a,tb_demo065_tel AS b WHERE a.id=b.id
Nach dem Login kopieren

Die zweite besteht darin, den Alias ​​der Tabelle direkt danach hinzuzufügen der Tabellenname, um

SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065  a,tb_demo065_tel  b WHERE a.id=b.id
Nach dem Login kopieren

mithilfe des Alias ​​der Tabelle zu erreichen. Beachten Sie einige Punkte
(1) Ein Alias ​​ist normalerweise ein verkürzter Tabellenname, der verwendet wird, um auf bestimmte Spalten in einer Tabelle in einem zu verweisen Wenn in der Verbindung Spalten mit demselben Namen in mehreren Tabellen vorhanden sind, müssen diese verwendet werden. Tabellennamen oder Tabellenaliase qualifizieren Spaltennamen
(2) Wenn ein Tabellenalias definiert ist, kann der Tabellenname nicht verwendet werden

3. Mehrere Ergebnismengen zusammenführen
In der SQL-Sprache können die Abfrageergebnisse mehrerer SELECT-Anweisungen kombiniert und über UNION oder ALL ausgegeben werden wie folgt:
UNION: Dieses Schlüsselwort kann verwendet werden, um die Abfrageergebnisse mehrerer SELECT-Anweisungen zusammenzuführen und doppelte Zeilen zu löschen.
ALL: Verwenden Sie dieses Schlüsselwort, um die Abfrageergebnisse mehrerer SELECT-Anweisungen für die Ausgabe zusammenzuführen Doppelte Zeilen werden nicht gelöscht
Verwenden Sie das Schlüsselwort UNION oder ALL, um mehrere Tabellen für die Ausgabe zusammenzuführen. Bei Verwendung von UNION müssen die Abfrageergebnisse dieselbe Struktur haben und die Datentypen müssen kompatibel sein. Außerdem muss bei Verwendung von UNION die Anzahl kompatibel sein Die Anzahl der Felder in den beiden Tabellen muss ebenfalls gleich sein, andernfalls wird ein Fehler in der SQL-Anweisung angezeigt.

e.x:SELECT id,name,pwd FROM tb_demo067 UNION SELECT  uid,price,date FROM tb_demo067_tel
Nach dem Login kopieren

4. Einfache verschachtelte Abfrage
Unterabfrage: Eine Unterabfrage ist eine SELECT-Abfrage, die einen einzelnen Wert zurückgibt und in SELECT-, INSERT-, UPDATE- und DELETE-Anweisungen verschachtelt ist oder andere Abfrageanweisungen, Unterabfragen können überall dort verwendet werden, wo Ausdrücke verwendet werden können

SELECT id,name,sex,date FROM tb_demo068 WHERE id in(SELECT id FROM tb_demo068 WHERE id='$_POST[test]')
Nach dem Login kopieren

Inner Join: Die Verwendung der Abfrageergebnisse als Abfragebedingungen der WHERE-Klausel wird als Inner Join bezeichnet

5. Komplexe verschachtelte Abfragen
Verschachtelte Abfragen zwischen mehreren Tabellen können über das Prädikat IN implementiert werden. Das Syntaxformat lautet wie folgt:
test_expression[NOT] IN{. <code>test_expression[NOT] IN{<br/> subquery<br/>}Unterabfrage
}
Parameterbeschreibung: test_expression bezieht sich auf den SQL-Ausdruck, Unterabfrage enthält die Unterabfrage einer bestimmten Ergebnismenge

Das Prinzip der verschachtelten Abfrage mit mehreren Tabellen: egal wie viele Es gibt Tabellen. Zum Verschachteln muss eine gewisse Korrelation zwischen Tabellen bestehen. Diese Korrelation wird durch die WHERE-Klausel zur Implementierung der Abfrage hergestellt

6. Anwendung verschachtelter Abfragen in Abfragestatistiken

Wann Bei der Implementierung von Abfragen mit mehreren Tabellen können Sie die Prädikate ANY, SOME und ALL gleichzeitig verwenden. Diese Prädikate werden als quantitative Vergleichsprädikate bezeichnet und können in Verbindung mit Vergleichsoperatoren verwendet werden, um zu bestimmen, ob alle Rückgabewerte die Suchbedingungen erfüllen Die Prädikate „SOME“ und „ANY“ sind quantitativ, es geht nur darum, ob es einen Rückgabewert gibt, der die Suchbedingungen erfüllt. Die beiden Prädikate haben die gleiche Bedeutung und können austauschbar verwendet werden kümmert sich darum, ob es ein Prädikat gibt, das die Suchanforderungen erfüllt.

SELECT * FROM tb_demo069_people WHERE uid IN(SELECT deptID FROM tb_demo069_dept WHERE deptName=&#39;$_POST[select]&#39;)
SELECT a.id,a.name FROM tb_demo067 AS a WHERE id<3)
Nach dem Login kopieren


>ANY ist größer als ein bestimmter Wert in der Unterabfrage
>=ANY ist größer oder gleich zu einem bestimmten Wert in der Unterabfrage
<=ANY ist kleiner oder gleich einem bestimmten Wert in der Unterabfrage
=ANY ist gleich einem Wert in der Unterabfrage
!=ANY oder <> ANY ist nicht gleich einem Wert in der Unterabfrage
>ALL ist größer als alle Werte in der Unterabfrage
> =ALL ist größer oder gleich allen Werten in der Unterabfrage
<=ALL ist kleiner oder gleich allen Werten in der Unterabfrage
=ALL ist gleich allen Werten in der Unterabfrage
!=ALL oder <>ALL ist nicht gleich alle Werte in der Unterabfrage

7. Unterabfragen als abgeleitete Tabellen verwenden

Im tatsächlichen Projektentwicklungsprozess wird es häufig zum Vergleichen von Informationen verwendet 1 Aus der vollständigen Tabelle wird eine Informationstabelle abgeleitet, die nur wenige Schlüsselfelder enthält. Dieses Ziel kann durch Unterabfragen erreicht werden, z. B.

SELECT people.name,people.chinese,people.math,people.english FROM (SELECT name,chinese,math,english FROM tb_demo071) AS people
Nach dem Login kopieren

Hinweis: Unterabfragen sollten den folgenden Regeln folgen:
( 1) Die durch den Vergleichsoperator eingeführte innere Unterabfrage enthält nur einen Ausdruck oder Spaltennamen. Die in der WHERE-Klausel in der äußeren Anweisung genannte Spalte muss mit der durch die innere Unterabfrage benannten Spalte kompatibel sein
( 2) Durch unveränderliche eingeführte Unterabfragen Vergleichsoperatoren (auf den Vergleichsoperator folgt nicht das Schlüsselwort ANY oder ALL) enthalten keine GROUP BY- oder HAVING-Klausel, es sei denn, die Gruppen- oder Einzelwerte sind vorbestimmt
(3) Die mit EXISTS eingeführte SELECT-Liste besteht im Allgemeinen aus *, und es ist nicht erforderlich, Spaltennamen anzugeben
(4) Unterabfragen können ihre Ergebnisse nicht intern verarbeiten

8. Verwenden Sie Unterabfragen für die Ausdrucksformel

SELECT (SELECT AVG(chinese)FROM tb_demo071),(SELECT AVG(english)FROM tb_demo071),(SELECT AVG(math)FROM tb_demo071) FROM tb_demo071
Nach dem Login kopieren

Hinweis: Geben Sie den Listenelementen am besten einen Alias, wenn Sie eine Unterabfrage verwenden. Dies erleichtert Benutzern das Zuweisen von Werten zu den Tabellenelementen, wenn sie die Funktion mysql_fetch_array() verwenden, z. B.

SELECT (SELECT AVG(chinese) FROM tb_demo071) AS yuwen ,(SELECT AVG(english) FROM tb_demo071) AS yingyu,(SELECT AVG(math) FROM tb_demo071) AS shuxue FROM tb_demo071
Nach dem Login kopieren
9. Verwenden Sie Unterabfragen, um Daten zuzuordnen

SELECT * FROM tb_demo072_student WHERE id=(SELECT id FROM tb_demo072_class WHERE className = &#39;$_POST[text]&#39;)
Nach dem Login kopieren
10. Verwenden Sie SQL Die Anweisung UNION kann qualifizierte Dateninformationen in verschiedenen Tabellen in derselben Spalte anzeigen.

e.x:SELECT * FROM tb_demo074_student UNION SELECT * FROM tb_demo074_fasten
Nach dem Login kopieren

注:使用UNION时应注意以下两点:
(1)在使用UNION运算符组合的语句中,所有选择列表的表达式数目必须相同,如列名、算术表达式及聚合函数等
(2)在每个查询表中,对应列的数据结构必须一样。

十一、对联合后的结果进行排序
为了UNION的运算兼容,要求所有SELECT语句都不能有ORDER BY语句,但有一种情况例外,那就是在最后一个SELECT语句中放置ORDER BY 子句实现结果的最终排序输出。

e.x:SELECT * FROM tb_demo074_student UNION SELECT * FROM tb_demo074_fasten ORDER BY id
Nach dem Login kopieren

使用UNION条件上相对比较苛刻,所以使用此语句时一定要注意两个表项数目和字段类型是否相同

十二、条件联合语句

SELECT * FROM tb_demo076_BEIJING GROUP BY name HAVING name=&#39;人民邮电出版社&#39; OR name=&#39;机械工业出版社&#39; UNION SELECT * FROM tb_demo076_BEIJING GROUP BY name HAVING name <>&#39;人民邮电出版社&#39; AND name <>&#39;机械工业再版社&#39; ORDER BY id
Nach dem Login kopieren

上面语句应用了GROUP BY分组语句和HAVING语句实现条件联合查询。其实现目的是先保证将'人民邮电出版社'和'机械工业出版社'始终位于名单最前列,然后再输出其它的出版社

十三、简单内连接查询

SELECT filedlist FROM table1 [INNER] JOIN table2 ON table1.column1 = table2.column1
Nach dem Login kopieren

其中,filedlist是要显示的字段,INNER表示表之间的连接方式为内连接,table1.column1=table2.column1用于指明两表间的连接条件,如:

SELECT a.name,a.address,a.date,b.chinese,b.math,b.english FROM tb_demo065 AS a INNER JOIN tb_demo065_tel AS b on a.id=b.id
Nach dem Login kopieren

十四、复杂内连接查询
复杂的内连接查询是在基本的内连接查询的基础上再附加一些查询条件,如:

SELECT a.name,a.address,a.date,b.chinese,b.math,b.english FROM tb_demo065 AS a INNER JOIN tb_demo065_tel AS b on a.id=b.id WHERE b.id=(SELECT id FROM  tb_demo065 WHERE tb_demo065.name=&#39;$_POST[text]&#39;)
Nach dem Login kopieren

总之,实现表与表之间的关联的本质是两表之间存在共同的数据项或者相同的数据项,通过WHERE 子句或内连接INNER JOIN … ON 语句将两表连接起来,实现查询

十五、使用外连接实现多表联合查询
(1)LEFT OUTER JOIN表示表之间通过左连接方式相互连接,也可简写成LEFT JOIN,它是以左侧的表为基准故称左连接,左侧表中所有信息将被全部输出,而右侧表信息则只会输出符合条件的信息,对不符合条件的信息则返回NULL

e.x:SELECT a.name,a.address,b.math,b.english FROM tb_demo065 AS A LEFT OUTER JOIN tb_demo065_tel AS b ON a.id=b.id
Nach dem Login kopieren

(2)RIGHT OUTER JOIN表示表之间通过右连接方式相互连接,也可简写成RIGHT JOIN,它是以右侧的表为基准故称右连接,右侧表中所有信息将被全部输出,而左侧表信息则只会输出符合条件的信息,对不符合条件的信息则返回NULL

E.X:SELECT a.name,a.address,b.math,b.english FROM tb_demo065 AS A RIGHT OUTER JOIN tb_demo065_tel AS b ON a.id=b.id
Nach dem Login kopieren

十六、利用IN或NOTIN关键字限定范围

e.x:SELECT * FROM tb_demo083 WHERE code IN(SELECT code FROM tb_demo083 WHERE code BETWEEN &#39;$_POST[text1]&#39; AND &#39;$_POST[text2]&#39;)
Nach dem Login kopieren

利用IN可指定在范围内查询,若要求在某范围外查询可以用NOT IN代替它

十七、由IN引入的关联子查询

e.x:SELECT * FROM tb_demo083 WHERE code IN(SELECT code FROM tb_demo083 WHERE code = &#39;$_POST[text]&#39;)
Nach dem Login kopieren

十八、利用HAVING语句过滤分组数据
HAVING子句用于指定组或聚合的搜索条件,HAVING通常与GROUP BY 语句一起使用,如果SQL语句中不含GROUP BY子句,则HAVING的行为与WHERE子句一样.

e.x:SELECT name,math FROM tb_demo083 GROUP BY id HAVING math > &#39;95&#39;
Nach dem Login kopieren

推荐学习:mysql教程

Das obige ist der detaillierte Inhalt vonLust auf Verständnis --- MySQL-Mehrtabellenabfrage. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:sina.com
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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!