Bisher haben wir eine Datenbank erstellt, zwei Tabellen hinzugefügt und Daten in beide Tabellen eingefügt. Jetzt werden wir uns ansehen, wie wir diese Daten abrufen können. Aber nicht nur abrufen die Daten, sondern abzufragen die Datenbank dafür.
SQL steht für Structured Query Language . Es ist die Abfrage Bit, das SQL so mächtig macht. SQL ist eine Sprache, mit der Sie Abfragen ausführen können gegen Ihre Datenbank. Es ermöglicht Ihnen Abfragen die Datenbank für die gewünschten Daten.
Die SQL SELECT
Erklärung
Wenn es um die Abfrage Ihrer MySQL-Datenbank geht, ist die SQL SELECT
Aussage macht es möglich. Dies ist wahrscheinlich Ihre am häufigsten verwendete SQL-Anweisung bei der Arbeit mit MySQL. Die SELECT
-Anweisung können Sie MySQL genau beschreiben, welche Daten abgerufen werden sollen.
Betrachten Sie die folgende SQL-Anweisung:
SELECT * FROM Fruit;
Hier ist das Ergebnis:
Dies ist das SELECT
Aussage in ihrer einfachsten Form. Die obige SQL-Anweisung ruft alle Datensätze aus
Fruit
ab Tabelle.
Das Sternchen (*
) weist MySQL an, alle Spalten zurückzugeben. Das spart uns Zeit und Mühe. Ohne dies müssten wir die Namen aller Spalten schreiben, die wir zurückgeben möchten.
Allerdings können Sie MySQL auch anweisen, nur die Spalten zurückzugeben, die Sie zurückgeben möchten. Benennen Sie dazu nur die Spalten, die Sie zurückgegeben haben möchten. So:
SELECT FruitId, FruitName FROM Fruit;
Hier ist das Ergebnis:
Die obige SQL-Anweisung wählt die FruitId aus und Fruchtname Spalten aus Fruit Tabelle.
Dadurch kann Unordnung reduziert werden, sodass Sie nur die Spalten sehen, die Sie interessieren. Es kann auch die Leistung steigern, da MySQL (und jede von Ihnen verwendete Anwendung) keine wertvollen Ressourcen verwenden muss, um unnötige Daten zurückzugeben.
Auch diese Abfrage ruft alle ab Datensätze aus der Tabelle — MySQL gibt alle Datensätze zurück, sofern nicht anders angegeben.
Das WHERE
Klausel
Sie können das WHERE
hinzufügen -Klausel, um die Ergebnismenge auf nur die Datensätze einzugrenzen, an denen Sie interessiert sind. So:
SELECT * FROM Fruit WHERE UnitId = 1;
Ergebnis:
Die obige Abfrage gibt alle Datensätze aus
Fruit
zurück Tabelle, in der die
UnitId
Spalte hat den Wert 1
.
Unterabfragen – Verschachteltes SELECT
Aussagen
Was wäre, wenn wir die
UnitId
nicht kennen würden ? Was wäre, wenn wir nur nach diesen Datensätzen mit dem Einheitsnamen Piece
suchen müssten? ?
Leicht! Wir könnten das obige Beispiel umschreiben, um ein verschachteltes SELECT
zu verwenden -Anweisung (auch bekannt als Unterabfrage ), die eine andere Tabelle abfragt (die
Units
Tisch). Dadurch können wir den tatsächlichen Namen der Einheit verwenden (anstelle seiner ID), da die zweite Tabelle diese im UnitName
enthält Feld:
SELECT * FROM Fruit WHERE UnitId = (SELECT UnitId FROM Units WHERE UnitName = 'Piece');
Ergebnis:
Hier verwenden wir ein verschachteltes SELECT
Anweisung (also ein SELECT
-Anweisung innerhalb eines SELECT
-Anweisung), um die
Units
abzufragen Tabelle für die
UnitId
des Datensatzes, der Piece
enthält als sein
UnitName
Wert. Wir können dies tun, weil
Fruit.UnitId
Spalte ist ein Fremdschlüssel zu
Units.UnitId
Säule.
Hier sind weitere Beispiele für Unterabfragen, falls Sie interessiert sind.
Einen SQL-JOIN
verwenden
Wenn wir noch einen Schritt weiter gehen, könnten wir unser verschachteltes SELECT
umschreiben -Anweisung in einen INNER JOIN
.
In SQL ein JOIN
ermöglicht es Ihnen, mehrere Tabellen abzufragen, die Daten gemeinsam nutzen. In unserem Fall teilen sich beide Tabellen die UnitId
man könnte also sagen, dass sie durch dieses Feld "verbunden" sind.
Es gibt verschiedene Arten von Joins in SQL, wir interessieren uns jedoch hauptsächlich für den INNER JOIN
vorerst.
Der INNER JOIN
Syntax sieht so aus:
SELECT * FROM table_name_1 INNER JOIN table_name_2 ON table_name_1.column_name = table_name_2.column_name
Wir könnten also unsere Unterabfrage aus dem vorherigen Beispiel wie folgt umschreiben:
SELECT Fruit.* FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId WHERE Units.UnitName = 'Piece';
Ergebnis:
Wir haben Fruit.*
angegeben statt nur *
weil wir nur alle Spalten von
Fruit
zurückgeben wollten Tisch. Wenn wir *
verwendet hätten , hätte die Abfrage alle Spalten aus beiden Tabellen zurückgegeben.
Sehen Sie sich auch den LEFT JOIN
an und RIGHT JOIN
um zu sehen, wie Sie je nach Join-Typ unterschiedliche Daten erhalten.
Unterabfrage vs. JOIN
?
Jetzt, da Sie zwei Methoden zum Erzielen des gleichen Ergebnisses gesehen haben, fragen Sie sich wahrscheinlich, welche besser ist?
Unterabfragen sind tendenziell besser lesbar (und vielleicht leichter zu verstehen), was Anfängern das Verständnis erleichtern kann.
Viele SQL-Programmierer finden jedoch JOIN
ist effizienter und leistungsfähiger. Wenn bei Ihren Abfragen oder einer Anwendung Leistungsprobleme auftreten, versuchen Sie, alle Unterabfragen in JOIN
umzuwandeln s oder umgekehrt (in einigen Fällen könnte eine Unterabfrage eine bessere Leistung erbringen).
Außerdem kann es Fälle geben, in denen eine Unterabfrage Ihre einzige Option ist, daher ist dies ebenfalls eine Überlegung.
Weitere Operatoren
Unsere bisherigen Abfragen enthielten alle ein Gleichheitszeichen (=
). Dies wird als Operator bezeichnet . Genauer gesagt ist es ein Vergleichsoperator wie es einen Ausdruck mit einem anderen vergleicht.
Es gibt viele weitere Operatoren, die Sie in Ihren Abfragen verwenden können. Diese können sehr hilfreich sein, um die Ergebnismenge auf die Datensätze einzugrenzen, die Sie benötigen. Es ist nicht ungewöhnlich, dass eine Datenbank Millionen von Datensätzen enthält. Selbst wenn Sie nur Tausende von Datensätzen haben, wäre der Versuch, einen Datensatz (oder auch nur eine Handvoll) unter Tausenden zu finden, eine sehr beängstigende Aufgabe, wenn Ihnen diese Operatoren nicht zur Verfügung stünden.
Hier sind einige der häufiger verwendeten SQL-Operatoren.
Der >
Betreiber
Sie können den >
verwenden Operator, um Daten auszuwählen, die größer sind als ein bestimmter Wert.
SELECT * FROM Fruit WHERE Inventory > 10;
Der <
Betreiber
Sie können den <
verwenden Operator, um weniger Daten auszuwählen als ein bestimmter Wert.
SELECT * FROM Fruit WHERE Inventory < 10;
Der <>
Betreiber
Sie können den <>
verwenden -Operator, um Daten auszuwählen, die kleiner als und sind größer als ein bestimmter Wert.
SELECT * FROM Fruit WHERE Inventory <> 10;
Der >=
Betreiber
Sie können den >=
verwenden Operator zum Auswählen von Daten, die größer oder gleich einem bestimmten Wert sind.
SELECT * FROM Fruit WHERE Inventory >= 10;
Der <=
Betreiber
Sie können den <=
verwenden Operator zum Auswählen von Daten, die kleiner oder gleich einem bestimmten Wert sind.
SELECT * FROM Fruit WHERE Inventory <= 10;
Das AND
Betreiber
Sie können ein AND
hinzufügen Operator zu WHERE
-Klausel, um Ihre Auswahl auf nur die Datensätze zu beschränken, die zwei Bedingungen erfüllen (oder mehr, wenn Sie mehr AND
angeben Betreiber).
Hier ist ein Beispiel:
SELECT * FROM Fruit WHERE Inventory > 10 AND DateEntered > '2015-01-15';
Das OR
Betreiber
Sie können ein OR
verwenden Operator, um Ihre Auswahl auf mehr als ein Kriterium zu erweitern. Wie der Name schon sagt, das OR
-Klausel können Sie Daten auswählen, bei denen das Kriterium entweder dieses ODER ist das. Also das AND
Betreiber Grenzen Ihre Auswahl und das OR
Operator erweitert es.
Hier ist ein Beispiel:
SELECT * FROM Fruit WHERE UnitId = 1 OR UnitId = 2;
Der BETWEEN
Betreiber
Verwenden Sie den BETWEEN
Operator, um Daten auszuwählen, die zwischen zwei gegebenen Werten liegen.
SELECT * FROM Fruit WHERE DateEntered BETWEEN '2015-01-25' AND '2015-02-25';
Das NOT
Betreiber
Verwenden Sie das NOT
Operator, um Daten auszuwählen, die nicht sind entspricht einer gegebenen Bedingung.
SELECT * FROM Fruit WHERE NOT (FruitName = 'Apple');