Einer der größten Vorteile der Verwendung relationaler Datenbanken wie MySQL besteht darin, dass Sie aufgrund der relationalen Struktur Informationen auf einfache Weise in mehreren Tabellen speichern und abfragen können.
Lassen Sie uns untersuchen, wie Sie genau die gewünschten Daten aus mehreren Datenbanktabellen abrufen und welche verschiedenen Verknüpfungen verfügbar sind, mit denen Sie genau die gewünschten Ergebnisse erzielen können.
Beispieldatenbank initialisieren
Dies ist nicht erforderlich. Wenn Sie jedoch den Beispielen in diesem Artikel folgen möchten, können Sie eine Beispieldatenbank lokal mit den folgenden Terminalbefehlen initialisieren:
Git-Klon https://github.com/mdizak/sample-select-db.git
cd sample-select-db
sudo mysql sudo mysql sampledb
mysql> SELECT COUNT (*) FROM customers;
Sie sollten ein Ergebnis erhalten, das besagt, dass sich 2000 Zeilen in der befinden Kunden Tabelle.
Standard / INNER Join
Der Standard-Join, der in verwendet wird MySQL-Datenbanken wird als INNER-Join bezeichnet und ist der häufigste und direkteste. Dieser Join gibt alle Datensätze zurück, für die in beiden Tabellen übereinstimmende Datensätze vorhanden sind, und schließt alle anderen Datensätze ab.
Java bietet JDBC als Teil des Java SDK. In diesem Artikel sehen wir uns die Details zum Herstellen einer Verbindung zu einer MySQL-Datenbank und zum Ausführen von Abfragen an.
Wenn Sie beispielsweise den Vor- und Nachnamen des Kunden sowie den Bestellbetrag und das Datum für alle Bestellungen über 1000 USD anzeigen möchten, können Sie die folgende SQL-Anweisung verwenden:
WÄHLEN
c.id, c.first_name, c.last_name, o.amount, o.created_at
VON
Kunden c, Bestellungen o
WO
o.customer_id = c.id AND o.amount> = 1000;
Einige Anmerkungen zur obigen Abfrage:
- Es werden fünf verschiedene Spalten ausgewählt, drei aus der Kundentabelle und zwei aus der Auftragstabelle.
- Innerhalb der FROM-Klausel werden die beiden Tabellen definiert, jedoch mit den Buchstaben "c" und "o" versehen. Diese geben einfach Aliase in SQL an, können beliebig sein und werden verwendet, um die SQL-Abfrage zu verkürzen.
- Das o.customer_id = c.id. ist der Join-Aspekt der Abfrage und stellt die ordnungsgemäße Korrelation zwischen Kunden und Bestellungen sicher.
Im Folgenden finden Sie eine andere und technisch syntaktisch korrektere Methode zum Schreiben derselben Abfrage:
WÄHLEN
c.id, c.first_name, c.last_name, o.amount, o.created_at
VON
Kunden c INNER JOIN Bestellungen o
AUF
customer_id = c.id.
WO
o.Betrag> = 1000;
Die obige Abfrage ist in der Regel etwas einfacher zu lesen, da Sie die Verknüpfung zwischen der Kunden- und der Auftragstabelle leicht erkennen können. Diese beiden Abfragen sind jedoch in jeder Hinsicht gleich und erzeugen genau die gleichen Datensätze.
LINKS tritt bei
Linke Verknüpfungen geben alle Datensätze aus der linken Tabelle zurück, die auch mit Datensätzen aus der rechten Tabelle übereinstimmen, und schließen alle anderen Datensätze. Wenn Sie beispielsweise den Gesamtumsatz für jedes Produkt in der Datenbank anzeigen möchten, können Sie versuchen, eine Abfrage wie die folgende zu verwenden:
WÄHLEN
p.name, sum (item.amount) AS tamount
VON
orders_items item LEFT JOIN Produkte p
AUF
item.product_id = p.id.
GROUP BY item.product_id ORDER BY tamount DESC
Dies führt zu einer schönen zweispaltigen Ansicht, in der der Produktname mit dem Gesamtumsatz angezeigt wird, und funktioniert wie erwartet. Die Abfrage durchlief alle Produkte in der Tabelle "orders_items", verband sie mit Datensätzen in der Tabelle "products" und gab den Gesamtumsatz jedes Produkts zurück.
RICHTIG tritt bei
Beachten Sie anhand des obigen Beispiels, dass die obige Abfrage nur 19 Datensätze zurückgegeben hat, während sich insgesamt 22 Produkte in der Datenbank befinden. Dies liegt daran, dass die Abfrage mit der Tabelle "orders_items" begann und mit der Tabelle "products" verknüpft wurde Da einige Produkte noch nie bestellt wurden, sind in den orders_items keine Datensätze dieser Produkte vorhanden Tabelle.
Was passiert, wenn Sie eine Liste aller Produkte mit Verkaufsmengen erhalten möchten, einschließlich nicht bestellter Produkte? Versuchen Sie einen rechten Join mit der folgenden Abfrage:
WÄHLEN
p.name, sum (item.amount) AS tamount
VON
orders_items item RIGHT JOIN Produkte p
AUF
item.product_id = p.id.
GROUP BY p.id ORDER BY tamount DESC
Das ist besser, und die Abfrage gibt jetzt die vollständigen 22 Produkte zurück, von denen drei eine Menge von haben Null. Dies liegt daran, dass anstelle der Verwendung von orders_items als primäre Tabelle, die mit der Produkttabelle verknüpft wird, die rechte Verknüpfung die Bestellung umdreht und die Produkttabelle mit der Tabelle orders_items verbindet.
Mehrere Verknüpfungen in einer Abfrage
Manchmal müssen Sie drei oder mehr Tabellen zusammenfügen, um bestimmte Ergebnisse zu erzielen.
Beispielsweise möchten Sie möglicherweise eine Liste aller Kunden, die die Mikrowelle gekauft haben (Produkt-ID Nr. 1), einschließlich ihres Namens und Bestelldatums. Dies erfordert ein SELECT über drei Tabellen hinweg, das mithilfe von zwei Joins mit der folgenden Abfrage durchgeführt werden kann:
WÄHLEN
c.first_name, c.last_name, o.amount, o.created_at
VON
Kunden c INNER JOIN Bestellungen o
AUF
c.id = o.customer_id INNER JOIN orders_items item
AUF
item.order_id = o.id.
WO
item.product_id = 1 ORDER BY o.created_at;
Diese Abfrage gibt alle 426 Bestellungen der Mikrowelle zurück und funktioniert wie erwartet. Es ordnet zuerst alle Kunden ihren jeweiligen Bestellungen zu, dann weitere Abfragen, die sich aus ergeben Alle Bestellungen werden nur mit denen in der Tabelle "orders_items" abgeglichen, die das Mikrowellenprodukt enthalten (ID # 1).
Verwenden Sie niemals Unterabfragen mit IN-Klauseln
Als kurze Randnotiz sollten Sie unbedingt vermeiden, Unterabfragen in Ihren SQL-Abfragen zu verwenden, z. B.:
SELECT Vorname, Nachname FROM Kunden WHERE ID IN (SELECT Kunden_id FROM Bestellungen WHERE Status = 'genehmigt' UND Betrag <100);
Abfragen wie die oben genannten sind sehr ineffizient, verbrauchen eine große Anzahl von Ressourcen und sollten so weit wie möglich vermieden werden. Verwenden Sie stattdessen die richtigen Verknüpfungen, wie in den obigen Abschnitten beschrieben. Zum Beispiel sollte die obige Abfrage wie folgt umgeschrieben werden:
SELECT c.first_name, c.last_name FROM Kunden c LEFT JOIN Bestellungen o ON o.customer_id = c.id WHERE o.status = 'genehmigt' AND o.amount <100;
Sparen Sie Zeit mit SQL Joins
Dieser Artikel soll Ihnen hoffentlich helfen, die Leistungsfähigkeit relationaler Datenbanken wie MySQL und das Erstellen zu demonstrieren SQL-Abfragen Damit können Datensätze aus mehreren Tabellen innerhalb einer Abfrage mithilfe von Verknüpfungen abgerufen werden, sodass Sie genau die gewünschten Ergebnisse abrufen können.
Sie haben drei verschiedene Verknüpfungen in SQL kennengelernt, wie Sie Spalten- und Tabellennamen aliasisieren, mehrere Verknüpfungen in einer Abfrage verwenden und warum Sie Unterabfragen vermeiden sollten. Versuchen Sie nie wieder, verschiedene Datensätze manuell zu einem zusammenzustellen, und verwenden Sie Joins, um Ihre Arbeitskollegen zu beeindrucken und Zeit zu sparen.
Google Text & Tabellen ist jetzt ein Büro-Kraftpaket. Mithilfe dieser Add-Ons können Sie Ihre Google Text & Tabellen hübsch und stilvoll gestalten.
- Programmierung
- SQL
- Datenbank
Abonniere unseren Newsletter
Abonnieren Sie unseren Newsletter für technische Tipps, Rezensionen, kostenlose E-Books und exklusive Angebote!
Noch ein Schritt…!
Bitte bestätigen Sie Ihre E-Mail-Adresse in der E-Mail, die wir Ihnen gerade gesendet haben.