SQL-Abfragen sind schnell. Teil 1

Einleitung


Die SQL-Sprache ist aufgrund ihrer Einfachheit, Bequemlichkeit und Verbreitung sehr stark in das Leben von Geschäftsanalysten und die Anforderungen an Kandidaten integriert. Aus eigener Erfahrung kann ich sagen, dass SQL am häufigsten zum Erstellen von Uploads, Storefronts (mit anschließender Erstellung von Berichten basierend auf diesen Storefronts) und zur Datenbankverwaltung verwendet wird. Und da die tägliche Arbeit des Analysten unweigerlich mit dem Hochladen von Daten und Storefronts verbunden ist, kann die Fähigkeit zum Schreiben von SQL-Abfragen zu einem Faktor werden, aufgrund dessen der Kandidat entweder einen Vorteil erlangt oder eliminiert wird. Die traurige Nachricht ist, dass nicht jeder damit rechnen kann, es auf eine Studentenbank zu bekommen. Die gute Nachricht ist, dass das Erlernen von SQL nicht kompliziert, schnell und die Abfragesyntax einfach und unkompliziert ist. Dies gilt insbesondere für diejenigen, die bereits auf komplexere Sprachen gestoßen sind.

Ich habe das SQL-Training in drei Teile unterteilt. Dieser Teil ist der grundlegenden Syntax gewidmet, die in 80-90% der Fälle verwendet wird. Die nächsten beiden Teile sind Unterabfragen, Join'am und speziellen Operatoren, gewidmet. Der Zweck der Handbücher besteht darin, die SQL-Syntax schnell und praktisch zu üben, um sie dem Arsenal an Fähigkeiten hinzuzufügen.

Übe


Eine Einführung in die Syntax wird anhand einer offenen Datenbank untersucht, die speziell für die SQL-Praxis entwickelt wurde. Damit Ihr Training so effektiv wie möglich ist, öffnen Sie den folgenden Link in einem neuen Tab und führen Sie sofort die obigen Beispiele aus. Auf diese Weise können Sie das Material besser konsolidieren und selbst mit der Syntax arbeiten.

Klicken Sie hier

Nachdem Sie auf den Link geklickt haben, sehen Sie den Abfrageeditor selbst und die Datenausgabe im zentralen Teil des Bildschirms. Die Liste der Datenbanktabellen befindet sich rechts.

SQL-Abfragestruktur


Die allgemeine Struktur der Anfrage lautet wie folgt:

SELECT ('  *    ; ') FROM ('; ') WHERE ('/, , city = 'Moscow'; ') GROUP BY (',     ; ') HAVING ('/    ; ') ORDER BY (',     ; ') 

Lassen Sie uns die Struktur analysieren. Der Einfachheit halber wird der aktuelle Lerngegenstand in der Anforderung von CAPS hervorgehoben.

SELECT, FROM


SELECT, FROM - Erforderliche Elemente der Abfrage, die die ausgewählten Spalten, ihre Reihenfolge und Datenquelle definieren.

Wählen Sie alle (mit * gekennzeichnet) aus der Kundentabelle aus:

 SELECT * FROM Customers 

Wählen Sie in der Customers-Tabelle die Spalten CustomerID und CustomerName aus:

 SELECT CustomerID, CustomerName FROM Customers 


WO?


WHERE ist ein optionales Abfrageelement, das verwendet wird, wenn Sie Daten nach der gewünschten Bedingung filtern müssen. Sehr oft wird innerhalb des where-Elements IN / NOT IN verwendet, um eine Spalte nach mehreren Werten zu filtern, UND / ODER, um eine Tabelle nach mehreren Spalten zu filtern.

Filtern nach einer Bedingung und einem Wert:

 select * from Customers WHERE City = 'London' 

Filtern nach einer Bedingung und mehreren Werten mit IN (Einschluss) oder NOT IN (Ausnahme):

 select * from Customers where City IN ('London', 'Berlin') 

 select * from Customers where City NOT IN ('Madrid', 'Berlin','Bern') 

Filtern nach mehreren Bedingungen mit AND (alle Bedingungen sind erfüllt) oder OR (mindestens eine Bedingung ist erfüllt) und mehreren Werten:

 select * from Customers where Country = 'Germany' AND City not in ('Berlin', 'Aachen') AND CustomerID > 15 

 select * from Customers where City in ('London', 'Berlin') OR CustomerID > 4 

GROUP BY


GROUP BY ist ein optionales Abfrageelement, mit dem Sie die Aggregation nach der gewünschten Spalte angeben können (z. B. wenn Sie herausfinden möchten, wie viele Kunden in jeder Stadt leben).

Bei Verwendung von GROUP BY ist Folgendes obligatorisch:

  1. Die Liste der zum Schneiden verwendeten Spalten war innerhalb von SELECT und GROUP BY identisch.
  2. Aggregatfunktionen (SUM, AVG, COUNT, MAX, MIN) sollten auch in SELECT mit der Spalte angegeben werden, auf die eine solche Funktion angewendet wird.

Gruppierung der Anzahl der Kunden nach Stadt:

 select City, count(CustomerID) from Customers GROUP BY City 

Gruppieren der Anzahl der Kunden nach Land und Stadt:

 select Country, City, count(CustomerID) from Customers GROUP BY Country, City 

Gruppieren von Verkäufen nach Produkt-ID mit verschiedenen Aggregatfunktionen: Anzahl der Bestellungen mit diesem Produkt und Anzahl der verkauften Teile:

 select ProductID, COUNT(OrderID), SUM(Quantity) from OrderDetails GROUP BY ProductID 

Verkaufsgruppierung mit Filterung der Quelltabelle. In diesem Fall ist die Ausgabe eine Tabelle mit der Anzahl der Kunden in deutschen Städten:

 select City, count(CustomerID) from Customers WHERE Country = 'Germany' GROUP BY City 

Benennen Sie eine aggregierte Spalte mit dem AS-Operator um. Standardmäßig entspricht der Name der aggregierten Spalte der angewendeten Aggregatfunktion, was für die Wahrnehmung möglicherweise nicht sehr praktisch ist.

 select City, count(CustomerID) AS Number_of_clients from Customers group by City 

HABEN


HAVING ist ein optionales Abfrageelement, das für das Filtern auf der Ebene der gruppierten Daten verantwortlich ist (in der Tat WHERE, aber nur eine Ebene höher).

Wenn Sie die aggregierte Tabelle mit der Anzahl der Kunden nach Stadt filtern, werden in diesem Fall nur die Städte entladen, in denen mindestens 5 Kunden vorhanden sind:

 select City, count(CustomerID) from Customers group by City HAVING count(CustomerID) >= 5 


Im Fall einer umbenannten Spalte in HAVING können Sie sowohl die Anzahl der Aggregationskonstrukte (CustomerID) als auch den neuen Spaltennamen number_of_clients angeben:

 select City, count(CustomerID) as number_of_clients from Customers group by City HAVING number_of_clients >= 5 

Eine Beispielabfrage mit WHERE und HAVING. In dieser Abfrage wird zunächst die ursprüngliche Tabelle nach Benutzern gefiltert, die Anzahl der Kunden nach Städten berechnet und es verbleiben nur die Städte, in denen die Anzahl der Kunden mindestens 5 beträgt:

 select City, count(CustomerID) as number_of_clients from Customers WHERE CustomerName not in ('Around the Horn','Drachenblut Delikatessend') group by City HAVING number_of_clients >= 5 

BESTELLEN DURCH


ORDER BY ist ein optionales Abfrageelement, das für das Sortieren der Tabelle zuständig ist.

Ein einfaches Beispiel für das Sortieren nach einer Spalte. In dieser Anfrage erfolgt die Sortierung nach der vom Kunden angegebenen Stadt:

 select * from Customers ORDER BY City 

Sie können nach mehreren Spalten sortieren. In diesem Fall erfolgt die Sortierung in der Reihenfolge der angegebenen Spalten:

 select * from Customers ORDER BY Country, City 

Standardmäßig erfolgt die Sortierung für Zahlen in aufsteigender Reihenfolge und für Textwerte in alphabetischer Reihenfolge. Wenn eine umgekehrte Sortierung erforderlich ist, fügen Sie in der ORDER BY-Klausel nach dem Spaltennamen DESC hinzu:

 select * from Customers order by CustomerID DESC 

Umgekehrte Sortierung nach einer Spalte und Standardsortierung nach der zweiten:

 select * from Customers order by Country DESC, City 

Mach mit


JOIN - ein optionales Element, das zum Verknüpfen von Tabellen mit dem in beiden Tabellen vorhandenen Schlüssel verwendet wird. Vor dem Schlüssel steht eine ON-Anweisung.

Eine Abfrage, in der wir die Order- und Customer-Tabellen mit der Schlüssel-CustomerID und dem Tabellennamen verbinden, wird vor den Spaltennamen des Schlüssels durch einen Punkt hinzugefügt:

 select * from Orders JOIN Customers ON Orders.CustomerID = Customers.CustomerID 

Oft kann es vorkommen, dass Sie eine Tabelle mit Werten aus einer anderen zuordnen müssen. Je nach Aufgabe können unterschiedliche Verbindungsarten verwendet werden. INNER JOIN - Kreuzung, RIGHT / LEFT JOIN zum Abbilden einer Tabelle mit Wissen von einer anderen,

 select * from Orders join Customers on Orders.CustomerID = Customers.CustomerID where Customers.CustomerID >10 

In der gesamten JOIN-Anforderung ist nach dem from-Element eine Beispielanforderung in das where-Element eingebettet:

Andere Arten von JOINs sind im folgenden Bild zu sehen:


Im nächsten Teil werden wir mehr über JOIN-Typen und verschachtelte Abfragen sprechen.

Wenn Sie Fragen / Anregungen haben, wenden Sie sich bitte an!

Source: https://habr.com/ru/post/de480838/


All Articles