Erweiterte MySQL-Datenbankabfrage und Mehrtabellenabfrage

Erweiterte MySQL-Datenbankabfrage und Mehrtabellenabfrage

MySQL-Abfrage für mehrere Tabellen

Hinzufügen eines Arbeitsblatts

-- Benutzertabelle (Benutzer)
CREATE TABLE `Benutzer`(
	`id` INT AUTO_INCREMENT PRIMARY KEY COMMENT 'Benutzer-ID (Primärschlüssel)',
	`Benutzername` VARCHAR(50) COMMENT 'Benutzername', 
	`Alter` CHAR(3) COMMENT 'Alter des Benutzers'
);

-- Bestellungen
Tabelle „Bestellungen“ erstellen (
	`id` INT AUTO_INCREMENT PRIMARY KEY COMMENT 'Bestell-ID (Primärschlüssel)',
	`Preis` DOPPELKOMMENTAR 'Bestellpreis',
	`user_id` INT COMMENT 'Benutzer-ID (Fremdschlüssel)'
);

-- Fügen Sie einer vorhandenen Tabelle einen Fremdschlüssel hinzu. Die Syntax lautet wie folgt: alter table table name add constraint [Fremdschlüsselname] foreign key (Fremdschlüsselfeld) verweist auf übergeordnete Tabelle (Primärschlüsselfeld);
ALTER TABLE-Aufträge ADD CONSTRAINT user_fk FOREIGN KEY (Benutzer-ID) REFERENCES `Benutzer` (ID);

-- Daten zur Benutzertabelle hinzufügen INSERT INTO USER VALUES(1,'第一',11);
INSERT INTO USER VALUES(2,'Benutzerwert',12);
INSERT INTO USER VALUES(3,'Benutzerwerte',33);
IN BENUTZERWERTE EINFÜGEN (4, 'Benutzerwert', 24);
IN BENUTZERWERTE EINFÜGEN (5, 'Benutzer', 17);
INSERT INTO USER VALUES(6,'Benutzerwerte',36);
IN BENUTZERWERTE EINFÜGEN (7,'null',18);
IN BENUTZERWERTE EINFÜGEN (8, 'Benutzerwert', NULL);

-- Daten in die Auftragstabelle einfügen INSERT INTO orders VALUES(111,1314,3);
INSERT INTO orders VALUES(112,122,3);
INSERT INTO orders VALUES(113,15,4);
INSERT INTO orders VALUES(114,315,5);
INSERT INTO orders VALUES(115,1014,NULL);
INSERT INTO orders VALUES(116,666,6);
INSERT INTO orders VALUES(117,1111,1);
INSERT INTO orders VALUES(118,8888,NULL);

Bildbeschreibung hier einfügen

Bildbeschreibung hier einfügen

Kartesisches Produkt

  • In der Mathematik wird das kartesische Produkt (auch direktes Produkt genannt) zweier Mengen X und Y als X × Y ausgedrückt, wobei das erste Objekt ein Mitglied von X und das zweite Objekt ein Mitglied aller möglichen geordneten Paare von Y ist. (Kartesisches Produkt) Baidu Enzyklopädie
  • Was ist das kartesische Produkt?
SELECT * FROM `Benutzer`, `Bestellungen`;

Bildbeschreibung hier einfügen

  • Die in der obigen Abbildung enthaltenen Daten sind für uns Programmierer nutzlos.
  • Wie eliminieren wir also das kartesische Produkt? Um doppelte Daten zu entfernen, sind Primär- und Fremdschlüsseleinschränkungen erforderlich.
SELECT * FROM `Benutzer` AS u, `Bestellungen` AS o WHERE u.`id`=o.`user_id`;

Bildbeschreibung hier einfügen

1. Innerer Join

1.1 Implizite innere Verbindung

  • Mehrere Tabellennamen erscheinen direkt nach „from“, was einen impliziten inneren Join darstellt
  • Wählen Sie * aus Tabelle A, Tabelle B, wobei a.id = b.a_id;
SELECT * FROM `Benutzer` AS u, `Bestellungen` AS o WHERE u.`id`=o.`user_id`;

Bildbeschreibung hier einfügen

1.2 Inner Join anzeigen (empfohlen)

  • Verwenden Sie zum Verknüpfen von Tabellen den Inner Join, gefolgt von „Ein“ und „Bedingungen“. (inneres kann weggelassen werden)
  • Wählen Sie * aus Tabelle A, innerer Join zwischen Tabelle B und a.id = b.a_id;
  • Abfrage von Benutzer- und Bestelldaten Erwachsener;
SELECT * FROM „Benutzer“ u JOIN „Bestellungen“ o ON u. „id“=o. „user_id“ WHERE Alter >= 18;

Bildbeschreibung hier einfügen

2. Äußerer Join

  • Externe Links können alle Daten einer einzelnen Tabelle anzeigen, einschließlich Null;

2.1 Richtige externe Links

  • Alle Daten in der Tabelle rechts anzeigen
  • Verwenden Sie den rechten äußeren Join, um die Tabellen zu verknüpfen, gefolgt von „on“ und „conditions“. (äußeres kann weggelassen werden)
  • Wählen Sie * aus Tabelle A den rechten äußeren Join für Tabelle B auf a.id=b.a_id;
SELECT * FROM „Benutzer“ u RIGHT JOIN „Bestellungen“ o ON u. „id“=o. „user_id“;

Bildbeschreibung hier einfügen

Linke Tabellendaten (Benutzer)

Bildbeschreibung hier einfügen

Die Daten in der rechten Tabelle (Bestellungen)

Bildbeschreibung hier einfügen

2.2 Linker Außenlink (empfohlen)

  • Alle Daten in der linken Tabelle anzeigen
  • Verwenden Sie den linken äußeren Join, um Tabellen zu verknüpfen, gefolgt von „Ein“ und „Bedingungen“. (äußeres kann weggelassen werden)
  • Wählen Sie * aus Tabelle A, linker äußerer Join, Tabelle B auf a.id=b.a_id;
SELECT * FROM `Benutzer` u LEFT JOIN `Bestellungen` o ON u.`id`=o.`user_id`;

Bildbeschreibung hier einfügen

Linke Tabellendaten (Benutzer)

Bildbeschreibung hier einfügen

Die Daten in der rechten Tabelle (Bestellungen)

Bildbeschreibung hier einfügen

3. Unterabfrage

  • Unterabfragen, verschachteltes Gefühl. Die Abfrageergebnisse werden als Bedingungen für eine weitere Abfrage verwendet.
  • Abfrage der Bestelldaten des ältesten Benutzers
SELECT * FROM Bestellungen o WHERE o.`user_id` IN (
	SELECT u.`id` FROM `Benutzer` u WHERE u.`Alter` IN (
		SELECT MAX(u.`Alter`) FROM `Benutzer` u
	)
);

Bildbeschreibung hier einfügen

4. Vollständige Verbindung (wird von MySQL nicht unterstützt)

  • Vollständige Verbindung, alle Daten in der linken und rechten Tabelle einschließlich Null. Entspricht der Kombination aus rechtem Außenglied und linkem Außenglied.
  • select * from table a full outer join table b on a.id=b.a_id; (MySQL unterstützt dies nicht und wird nicht vorgeführt)

Weitere MySQL-Artikel finden Sie unter den folgenden Links.

MySQL DDL-Anweisungen

MySQL CRUD-Anweisungen

MySQL-Aggregatfunktionen

MySQL-Abfrage für mehrere Tabellen

ENDE…

Dies ist das Ende dieses Artikels über erweiterte Abfragen und Multitabellenabfragen von MySQL-Datenbanken. Weitere relevante Inhalte zu erweiterten MySQL-Abfragen und Multitabellenabfragen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die verwandten Artikel weiter unten. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • SQL-Abfrage MySql-Datenbanktabellenname und -beschreibung Tabellenfeld- (Spalten-)Informationen
  • Analyse des SELECT-Abfrageausdrucks in der MySQL-Datenbank
  • Detaillierte Erklärung der MySQL-Datenbank - Abfrage mehrerer Tabellen - Inner Join, Outer Join, Unterabfrage, korrelierte Unterabfrage
  • Warum verbessert der Index in der Mysql-Datenbanktabelle nicht die Abfragegeschwindigkeit?
  • MySQL-Datenbankabfrage – erweiterte Multi-Table-Abfrage – detaillierte Erklärung
  • Warum ist die Abfrage langsam, obwohl in der MySQL-Datenbanktabelle ein Index vorhanden ist?

<<:  Detaillierte Erklärung der Anwendungsfälle von Vue-Listenern

>>:  Verwenden Sie Docker, um einen Redis-Master-Slave-Replikationscluster zu erstellen

Artikel empfehlen

JS implementiert einfachen Kalendereffekt

In diesem Artikel wird der spezifische JS-Code zu...

Detaillierte Erklärung von MySQLs Seconds_Behind_Master

Inhaltsverzeichnis Sekunden_hinter_Master Ursprün...

Ein Artikel, der Ihnen hilft, jQuery-Animationen zu verstehen

Inhaltsverzeichnis 1. Steuern Sie die Anzeige und...

Detaillierte Erklärung der langsamen Remote-Verbindung von Navicat zu MySQL

Die endgültige Lösung ist im letzten Bild Wenn Si...

Implementierung der CommonJS-Modularität in Browsern ohne Kompilierung/Server

Inhaltsverzeichnis Einführung 1. Was ist one-clic...

Detaillierte Schritte zur Installation von Nginx unter Linux

1. Nginx-Installationsschritte 1.1 Offizielle Web...

So finden Sie langsame MySQL-Abfragen

Vorwort Ich glaube, dass jeder in seiner tägliche...

So legen Sie MySQL-Berechtigungen mit phpmyadmin fest

Inhaltsverzeichnis Schritt 1: Melden Sie sich als...

Tiefgreifendes Verständnis von globalen Sperren und Tabellensperren in MySQL

Vorwort Je nach Umfang der Sperrung können Sperre...

Detaillierte Erläuterung der MySQL-Benutzerrechteverwaltung

Inhaltsverzeichnis Vorwort: 1. Einführung in die ...

Detaillierte Erläuterung der Funktionen und Methoden des Vue3-Lebenszyklus

1. Übersicht Bei der sogenannten Lifecycle-Funkti...