Verbindungsabfrage für MySQL-Datenabfrage
- Verbindungsbeziehungen sind die Hauptmerkmale des relationalen Datenbankmodells. Dies ist auch die wichtigste Abfrage, die hauptsächlich innere Verknüpfungen, äußere Verknüpfungen usw. umfasst.
- Mehrere Tabellenabfragen können über Verbindungsoperatoren implementiert werden.
- In einem relationalen Datenbankverwaltungssystem muss die Beziehung zwischen den einzelnen Daten nicht bestimmt werden, wenn die Tabelle erstellt wird. Alle Informationen einer Entität werden häufig in einer Tabelle gespeichert. Beim Abfragen von Daten werden Informationen zu verschiedenen Entitäten, die in mehreren Tabellen gespeichert sind, über Verbindungsvorgänge abgefragt. Wenn in zwei oder mehr Tabellen Felder mit derselben Bedeutung vorhanden sind, können Sie diese Felder verwenden, um Join-Abfragen für verschiedene Tabellen durchzuführen.
Im Folgenden werden drei Verbindungsmethoden zwischen mehreren Tabellen vorgestellt:
(1) Innere Join-Abfrage
(2) Äußere Join-Abfrage
(3) Zusammengesetzte bedingte Join-Abfrage
(Kostenlose Lernempfehlung: MySQL-Video-Tutorial)
(1), Inner-Join-Abfrage (Inner-Join)
- Inner-Join verwendet Vergleichsoperatoren, um bestimmte (bestimmte) Spaltendaten zwischen Tabellen zu vergleichen, und listet die Daten in diesen Tabellen auf, die den Join-Bedingungen entsprechen. Datenzeilen bilden neue Datensätze Das heißt, in einer Inner-Join-Abfrage können nur Datensätze in der Ergebnisbeziehung erscheinen, die die Bedingungen erfüllen.
Erstellen Sie die folgenden Datentabellenlieferanten zur Demonstration:
mysql> create table suppliers -> ( -> s_id int not null auto_increment, -> s_name char(50) not null, -> s_city char(50) null, -> s_zip char(10) null, -> s_call char(50) not null, -> primary key(s_id) -> );Query OK, 0 rows affected (0.17 sec)mysql> insert into suppliers(s_id,s_name,s_city,s_zip,s_call) -> values(101,'FastFruit Inc.','Tianjin','300000','48075'), -> (102,'LT Supplies','Chongqing','400000','44333'), -> (103,'ACME','Shanghai','200000','90046'), -> (104,'FNK Inc.','Zhongshan','528437','11111'), -> (105,'Good Set','Taiyuan','030000','22222'), -> (106,'Just Eat Ours','Beijing','010','45678'), -> (107,'DK Inc','Zhengzhou','450000','33332');Query OK, 7 rows affected (0.07 sec)Records: 7 Duplicates: 0 Warnings: 0
[Beispiel 1] Verwenden Sie eine Inner-Join-Abfrage zwischen der Obsttabelle und der Lieferantentabelle.
mysql> desc fruits;+---------+--------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+---------+--------------+------+-----+---------+-------+| f_id | char(10) | NO | PRI | NULL | || s_id | int(11) | NO | | NULL | || f_name | char(255) | NO | | NULL | || f_price | decimal(8,2) | NO | | NULL | |+---------+--------------+------+-----+---------+-------+4 rows in set (0.06 sec)mysql> desc suppliers;+--------+----------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+--------+----------+------+-----+---------+----------------+| s_id | int(11) | NO | PRI | NULL | auto_increment || s_name | char(50) | NO | | NULL | || s_city | char(50) | YES | | NULL | || s_zip | char(10) | YES | | NULL | || s_call | char(50) | NO | | NULL | |+--------+----------+------+-----+---------+----------------+5 rows in set (0.00 sec)
Sie können sehen, dass sowohl die Früchte- als auch die Lieferantentabelle das gleiche Datentypfeld s_id haben und die beiden Tabellen über das s_id-Feld verbunden sind.
Als nächstes fragen Sie die Felder „f_name“ und „f_price“ aus der Tabelle „Früchte“ ab und fragen die Felder „s_id“ und „s_name“ aus der Tabelle „Lieferanten“ ab. Die SQL-Anweisung lautet wie folgt:
mysql> select suppliers.s_id,s_name,f_name,f_price -> from fruits,suppliers -> where fruits.s_id=suppliers.s_id;+------+----------------+------------+---------+| s_id | s_name | f_name | f_price |+------+----------------+------------+---------+| 104 | FNK Inc. | lemon | 6.40 || 101 | FastFruit Inc. | apple | 5.20 || 103 | ACME | apricot | 2.20 || 101 | FastFruit Inc. | blackberry | 10.20 || 104 | FNK Inc. | berry | 7.60 || 107 | DK Inc | xxxx | 3.60 || 102 | LT Supplies | orange | 11.20 || 105 | Good Set | melon | 8.20 || 101 | FastFruit Inc. | cherry | 3.20 || 106 | Just Eat Ours | mango | 15.70 || 105 | Good Set | xbabay | 2.60 || 105 | Good Set | xxtt | 11.60 || 103 | ACME | coconut | 9.20 || 102 | LT Supplies | banana | 10.30 || 102 | LT Supplies | grape | 5.30 || 107 | DK Inc | xbabay | 3.60 |+------+----------------+------------+---------+16 rows in set (0.00 sec)
- Hinweis: Da die Tabelle „Früchte“ und die Tabelle „Lieferanten“ dasselbe Feld haben s_id, also im Vergleich Wenn Sie den Tabellennamen vollständig qualifizieren müssen, lautet das Format „Tabellenname.Spaltenname“. Wenn nur s_id angegeben wird, weiß MySQL nicht, auf welche es sich bezieht, und gibt eine Fehlermeldung zurück.
[Beispiel 2] Verwenden Sie zwischen der Fruit-Tabelle und der Lieferantentabelle die Inner-Join-Syntax für die Inner-Join-Abfrage. Die SQL-Anweisung lautet wie folgt:
mysql> select suppliers.s_id,s_name,f_name,f_price -> from fruits inner join suppliers -> on fruits.s_id = suppliers.s_id;+------+----------------+------------+---------+| s_id | s_name | f_name | f_price |+------+----------------+------------+---------+| 104 | FNK Inc. | lemon | 6.40 || 101 | FastFruit Inc. | apple | 5.20 || 103 | ACME | apricot | 2.20 || 101 | FastFruit Inc. | blackberry | 10.20 || 104 | FNK Inc. | berry | 7.60 || 107 | DK Inc | xxxx | 3.60 || 102 | LT Supplies | orange | 11.20 || 105 | Good Set | melon | 8.20 || 101 | FastFruit Inc. | cherry | 3.20 || 106 | Just Eat Ours | mango | 15.70 || 105 | Good Set | xbabay | 2.60 || 105 | Good Set | xxtt | 11.60 || 103 | ACME | coconut | 9.20 || 102 | LT Supplies | banana | 10.30 || 102 | LT Supplies | grape | 5.30 || 107 | DK Inc | xbabay | 3.60 |+------+----------------+------------+---------+16 rows in set (0.00 sec)
- Es ist relativ einfach und klar, die Where-Klausel zum Definieren der Verbindung zu verwenden Bedingungen und die Inner-Join-Syntax sind ANSI. Die Standardspezifikation von SQL kann durch die Verwendung der Inner-Join-Verbindungssyntax sicherstellen, dass die Verbindungsbedingungen nicht vergessen werden und die Where-Klausel irgendwann die Leistung der Abfrage beeinträchtigt.
Wenn es sich bei den beiden an einer Join-Abfrage beteiligten Tabellen um dieselbe Tabelle handelt, wird dieser Abfragetyp als Self-Join-Abfrage bezeichnet. Self-Join ist ein spezieller innerer Join. Dies bedeutet, dass die miteinander verbundenen Tabellen physisch dieselben Tabellen sind, aber logisch in zwei Tabellen unterteilt werden können.
[Beispiel 3] Fragen Sie die vom Obstlieferanten bereitgestellten Obstsorten ab, die f_id='a1'
liefern. Die SQL-Anweisung lautet wie folgt: f_id='a1'
的水果供应商提供的水果种类,SQL语句如下:
mysql> select f1.f_id,f1.f_name -> from fruits as f1,fruits as f2 -> where f1.s_id =f2.s_id and f2.f_id ='a1';+------+------------+| f_id | f_name |+------+------------+| a1 | apple || b1 | blackberry || c0 | cherry |+------+------------+3 rows in set (0.00 sec)
(2)、外连接查询
- 外连接查询将查询多个表中相关联的行。
- 内连接时,返回查询结果集合中的仅是符合查询条件和连接条件的行。但有时候需要包含没有关联的行中数据,即返回查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接或左连接)、右表(右外连接或右连接)或两个边接表(全外连接)中的所有数据行。外连接分为左外连接或左连接和右外连接或右连接:
①左连接:返回包括左表中的所有记录和右表中连接字段相等的记录。
②右连接:返回包括右表中的记录和左表中连接字段相等的记录。
1.左连接left join
首先创建表orders,SQL语句如下;
mysql> create table orders -> ( -> o_num int not null auto_increment, -> o_date datetime not null, -> c_id int not null, -> primary key (o_num) -> );Query OK, 0 rows affected (0.11 sec)mysql> insert into orders(o_num,o_date,c_id) -> values(30001,'2008-09-01',10001), -> (30002,'2008-09-12',10003), -> (30003,'2008-09-30',10004), -> (30004,'2008-10-03',10005), -> (30005,'2008-10-08',10001);Query OK, 5 rows affected (0.06 sec)Records: 5 Duplicates: 0 Warnings: 0
【例】在customers表和orders表中,查询所有客户,包括没有订单的客户,SQL语句如下:
mysql> select * from customers;+-------+----------+---------------------+---------+--------+-----------+-------------------+| c_id | c_name | c_address | c_city | c_zip | c_contact | c_email |+-------+----------+---------------------+---------+--------+-----------+-------------------+| 10001 | redhool | 200 Street | Tianjin | 300000 | LiMing | LMing@163.com || 10002 | Stars | 333 Fromage Lane | Dalian | 116000 | Zhangbo | Jerry@hotmail.com || 10003 | Netbhood | 1 Sunny Place | Qingdao | 266000 | LuoCong | NULL || 10004 | JOTO | 829 Riverside Drive | Haikou | 570000 | YangShan | sam@hotmail.com |+-------+----------+---------------------+---------+--------+-----------+-------------------+4 rows in set (0.00 sec)mysql> select * from orders;+-------+---------------------+-------+| o_num | o_date | c_id |+-------+---------------------+-------+| 30001 | 2008-09-01 00:00:00 | 10001 || 30002 | 2008-09-12 00:00:00 | 10003 || 30003 | 2008-09-30 00:00:00 | 10004 || 30004 | 2008-10-03 00:00:00 | 10005 || 30005 | 2008-10-08 00:00:00 | 10001 |+-------+---------------------+-------+5 rows in set (0.00 sec)mysql> select customers.c_id , orders.o_num -> from customers left outer join orders -> on customers.c_id = orders.c_id;+-------+-------+| c_id | o_num |+-------+-------+| 10001 | 30001 || 10003 | 30002 || 10004 | 30003 || 10001 | 30005 || 10002 | NULL |+-------+-------+5 rows in set (0.00 sec)
2.右连接right join
mysql> select customers.c_id, orders.o_num -> from customers right outer join orders -> on customers.c_id = orders.c_id;+-------+-------+| c_id | o_num |+-------+-------+| 10001 | 30001 || 10003 | 30002 || 10004 | 30003 || NULL | 30004 || 10001 | 30005 |+-------+-------+5 rows in set (0.00 sec)
(2 ), äußere Verbindungsabfrage
- Äußere Join-Abfragen fragen verwandte Zeilen in mehreren Tabellen ab.
Beim Ausführen eines Inner Joins werden nur die Zeilen im Abfrageergebnissatz zurückgegeben, die die Abfragebedingungen und Verbindungsbedingungen erfüllen. Manchmal ist es jedoch erforderlich, Daten in nicht zusammenhängende Zeilen einzuschließen, d Outer-Join oder Right-Join) oder alle Datenzeilen in zwei Edge-Tabellen (vollständiger Outer-Join). Äußere Verknüpfungen werden in linke äußere Verknüpfungen oder linke Verknüpfungen und rechte äußere Verknüpfungen oder rechte Verknüpfungen unterteilt:
①Linke Verknüpfung: Gibt alle Datensätze in der linken Tabelle und Datensätze mit gleichen Verknüpfungsfeldern in der rechten Tabelle zurück.
②Rechter Join: Gibt Datensätze zurück, einschließlich Datensätzen in der rechten Tabelle, die den Join-Feldern in der linken Tabelle entsprechen.- 1. Left Join
Left Join
mysql> select customers.c_id,orders.o_num -> from customers inner join orders -> on customers.c_id = orders.c_id and customers.c_id = 10001;+-------+-------+| c_id | o_num |+-------+-------+| 10001 | 30001 || 10001 | 30005 |+-------+-------+2 rows in set (0.00 sec)
mysql> select suppliers.s_id,s_name,f_name,f_price -> from fruits inner join suppliers -> on fruits.s_id = suppliers.s_id -> order by fruits.s_id;+------+----------------+------------+---------+| s_id | s_name | f_name | f_price |+------+----------------+------------+---------+| 101 | FastFruit Inc. | apple | 5.20 || 101 | FastFruit Inc. | blackberry | 10.20 || 101 | FastFruit Inc. | cherry | 3.20 || 102 | LT Supplies | orange | 11.20 || 102 | LT Supplies | banana | 10.30 || 102 | LT Supplies | grape | 5.30 || 103 | ACME | apricot | 2.20 || 103 | ACME | coconut | 9.20 || 104 | FNK Inc. | lemon | 6.40 || 104 | FNK Inc. | berry | 7.60 || 105 | Good Set | melon | 8.20 || 105 | Good Set | xbabay | 2.60 || 105 | Good Set | xxtt | 11.60 || 106 | Just Eat Ours | mango | 15.70 || 107 | DK Inc | xxxx | 3.60 || 107 | DK Inc | xbabay | 3.60 |+------+----------------+------------+---------+16 rows in set (0.00 sec)
rechter Join
Die Verbindungsabfrage für zusammengesetzte Bedingungen ist in der Verbindung Während des Abfragevorgangs werden Filterbedingungen hinzugefügt, um die Abfrageergebnisse einzuschränken und die Abfrageergebnisse genauer zu machen. 🎜🎜🎜[Beispiel 1] Verwenden Sie in der Kundentabelle und der Bestelltabelle die Inner-Join-Syntax, um die Kundentabelle abzufragen und die Bestellinformationen des Kunden mit der ID 10001 zusammenzufassen. Die SQL-Anweisung lautet wie folgt: 🎜rrreee🎜[Beispiel 2] Verwenden Sie zwischen der Fruchttabelle und der Lieferantentabelle die Inner-Join-Syntax, um eine Inner-Join-Abfrage durchzuführen, und sortieren Sie die Abfrageergebnisse wie folgt: 🎜rrreee🎜🎜🎜 Weitere verwandte kostenlose Lernempfehlungen: 🎜🎜🎜MySQL-Tutorial🎜🎜 🎜(Video)🎜🎜🎜Der rechte Join ist der umgekehrte Join des linken Joins und gibt alle Zeilen der rechten Tabelle zurück . Wenn eine Zeile in der rechten Tabelle keine entsprechende Zeile in der linken Tabelle hat, gibt die linke Tabelle einen Nullwert zurück. [Beispiel] Fragen Sie in der Kundentabelle und der Bestelltabelle alle Bestellungen ab, einschließlich Bestellungen ohne Kunden. Die SQL-Anweisung lautet wie folgt: rrreee(3), Verbindungsabfrage für zusammengesetzte Bedingungen
Das obige ist der detaillierte Inhalt vonVerbindungsabfrage für MySQL-Datenabfrage. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



MySQL ist für Anfänger geeignet, da es einfach zu installieren, leistungsfähig und einfach zu verwalten ist. 1. Einfache Installation und Konfiguration, geeignet für eine Vielzahl von Betriebssystemen. 2. Unterstützung grundlegender Vorgänge wie Erstellen von Datenbanken und Tabellen, Einfügen, Abfragen, Aktualisieren und Löschen von Daten. 3. Bereitstellung fortgeschrittener Funktionen wie Join Operations und Unterabfragen. 4. Die Leistung kann durch Indexierung, Abfrageoptimierung und Tabellenpartitionierung verbessert werden. 5. Backup-, Wiederherstellungs- und Sicherheitsmaßnahmen unterstützen, um die Datensicherheit und -konsistenz zu gewährleisten.

MySQL ist ein Open Source Relational Database Management System. 1) Datenbank und Tabellen erstellen: Verwenden Sie die Befehle erstellte und creatEtable. 2) Grundlegende Vorgänge: Einfügen, aktualisieren, löschen und auswählen. 3) Fortgeschrittene Operationen: Join-, Unterabfrage- und Transaktionsverarbeitung. 4) Debugging -Fähigkeiten: Syntax, Datentyp und Berechtigungen überprüfen. 5) Optimierungsvorschläge: Verwenden Sie Indizes, vermeiden Sie ausgewählt* und verwenden Sie Transaktionen.

Sie können PhpMyAdmin in den folgenden Schritten öffnen: 1. Melden Sie sich beim Website -Bedienfeld an; 2. Finden und klicken Sie auf das Symbol phpmyadmin. 3. Geben Sie MySQL -Anmeldeinformationen ein; 4. Klicken Sie auf "Login".

Erstellen Sie eine Datenbank mit Navicat Premium: Stellen Sie eine Verbindung zum Datenbankserver her und geben Sie die Verbindungsparameter ein. Klicken Sie mit der rechten Maustaste auf den Server und wählen Sie Datenbank erstellen. Geben Sie den Namen der neuen Datenbank und den angegebenen Zeichensatz und die angegebene Kollektion ein. Stellen Sie eine Verbindung zur neuen Datenbank her und erstellen Sie die Tabelle im Objektbrowser. Klicken Sie mit der rechten Maustaste auf die Tabelle und wählen Sie Daten einfügen, um die Daten einzufügen.

MySQL und SQL sind wesentliche Fähigkeiten für Entwickler. 1.MYSQL ist ein Open -Source -Relational Database Management -System, und SQL ist die Standardsprache, die zum Verwalten und Betrieb von Datenbanken verwendet wird. 2.MYSQL unterstützt mehrere Speichermotoren durch effiziente Datenspeicher- und Abruffunktionen, und SQL vervollständigt komplexe Datenoperationen durch einfache Aussagen. 3. Beispiele für die Nutzung sind grundlegende Abfragen und fortgeschrittene Abfragen wie Filterung und Sortierung nach Zustand. 4. Häufige Fehler umfassen Syntaxfehler und Leistungsprobleme, die durch Überprüfung von SQL -Anweisungen und Verwendung von Erklärungsbefehlen optimiert werden können. 5. Leistungsoptimierungstechniken umfassen die Verwendung von Indizes, die Vermeidung vollständiger Tabellenscanning, Optimierung von Join -Operationen und Verbesserung der Code -Lesbarkeit.

Sie können eine neue MySQL -Verbindung in Navicat erstellen, indem Sie den Schritten folgen: Öffnen Sie die Anwendung und wählen Sie eine neue Verbindung (Strg N). Wählen Sie "MySQL" als Verbindungstyp. Geben Sie die Hostname/IP -Adresse, den Port, den Benutzernamen und das Passwort ein. (Optional) Konfigurieren Sie erweiterte Optionen. Speichern Sie die Verbindung und geben Sie den Verbindungsnamen ein.

Das Wiederherstellen von gelöschten Zeilen direkt aus der Datenbank ist normalerweise unmöglich, es sei denn, es gibt einen Backup- oder Transaktions -Rollback -Mechanismus. Schlüsselpunkt: Transaktionsrollback: Führen Sie einen Rollback aus, bevor die Transaktion Daten wiederherstellt. Sicherung: Regelmäßige Sicherung der Datenbank kann verwendet werden, um Daten schnell wiederherzustellen. Datenbank-Snapshot: Sie können eine schreibgeschützte Kopie der Datenbank erstellen und die Daten wiederherstellen, nachdem die Daten versehentlich gelöscht wurden. Verwenden Sie eine Löschanweisung mit Vorsicht: Überprüfen Sie die Bedingungen sorgfältig, um das Verhandlich von Daten zu vermeiden. Verwenden Sie die WHERE -Klausel: Geben Sie die zu löschenden Daten explizit an. Verwenden Sie die Testumgebung: Testen Sie, bevor Sie einen Löschvorgang ausführen.

Redis verwendet eine einzelne Gewindearchitektur, um hohe Leistung, Einfachheit und Konsistenz zu bieten. Es wird E/A-Multiplexing, Ereignisschleifen, nicht blockierende E/A und gemeinsame Speicher verwendet, um die Parallelität zu verbessern, jedoch mit Einschränkungen von Gleichzeitbeschränkungen, einem einzelnen Ausfallpunkt und ungeeigneter Schreib-intensiver Workloads.
