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

Verwenden Sie den Befehl sed, um die kv-Konfigurationsdatei in Linux zu ändern

sed ist ein Zeichenstromeditor unter Unix, also e...

Tipps zum MySQL-Abfragecache

Inhaltsverzeichnis Vorwort Einführung in QueryCac...

HarborRestart-Vorgang nach dem Ändern der Konfigurationsdatei

Ich werde nicht viel Unsinn erzählen, schauen wir...

So öffnen Sie das MySQL-Binlog-Protokoll

Binlog ist eine binäre Protokolldatei, die alle M...

Mysql-Operation zum Abrufen von Tabellenkommentarfeldern

Ich werde nicht viel Unsinn erzählen, schauen wir...

Detaillierte Erläuterung des MySQL-Isolationsebenen-Operationsprozesses (cmd)

Beispielvorgang für nicht festgeschriebenes Lesen...

JS realisiert einfachen Bildkarusselleffekt

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

Schritte zum Verpacken und Konfigurieren von SVG-Komponenten in Vue-Projekten

Ich bin erst vor Kurzem in eine neue Firma einges...

MySQL fügt automatisch Millionen simulierter Datenoperationscodes ein

Ich verwende Navicat als Datenbanktool. Andere si...

HTML+CSS zum Erstellen einer Schaltfläche im Cyberpunk-Stil

Erster Blick auf die Wirkung: Vorwort: Auf diese ...