11th Jan 2023 8 Leseminuten Wie man SQL-Unterabfragen übt Ignacio L. Bisso Unterabfrage SQL-Übungen Inhaltsverzeichnis Was ist eine SQL-Unterabfrage? Ein weiteres SQL-Subquery-Beispiel Verwendung von SQL-Unterabfragen in anderen Teilen der Abfrage Üben Sie SQL-Subabfragen, um Ihre Fähigkeiten zu verbessern Haben Sie sich jemals gefragt, was Anfänger von fortgeschrittenen SQL-Benutzern unterscheidet? Dazu gehören Dinge wie zum Beispiel Unterabfragen. In diesem Artikel erkläre ich ihre Bedeutung und warum Sie SQL-Subqueries üben müssen, um ein Experte zu werden. Was ist eine SQL-Unterabfrage? SQL ist eine leicht zu erlernende Sprache. Es gibt jedoch einige komplexe Funktionen und Techniken der Sprache, die geübt werden müssen. Eines dieser Merkmale ist die Subquery, die der Sprache und Ihren Projekten eine große Ausdruckskraft verleiht. In diesem Artikel stellen wir Beispiele vor, mit denen Sie den ersten Schritt zum Üben von Subqueries machen können. Wir erwähnen auch Artikel und Kurse, in denen Sie weiteres Material wie Vorlesungen und Übungen finden, um die Verwendung von Subqueries weiter zu verbessern. Wenn Sie nicht wissen, wovon ich spreche, beginnen Sie mit dem SQL für Anfänger Kurs. Er ist der perfekte Ausgangspunkt für das Erlernen von SQL. Wenn Sie bereits ein wenig über das Thema wissen, aber nicht wissen, wie Sie Unterabfragen üben können, lesen Sie weiter. Einfach ausgedrückt, ist eine Subquery eine Abfrage innerhalb einer Abfrage. SQL erlaubt es uns, Unterabfragen in verschiedene Teile einer SQL-Abfrage einzufügen, wie z. B. in die WHERE- und FROM-Klauseln und andere. Das Erstellen einer Unterabfrage ist sehr einfach, da ihre Struktur die gleiche ist wie die einer normalen Abfrage. Wir müssen nur einige Regeln kennen, wie die Abfrage und die Subquery miteinander verbunden werden. Bevor wir mit den Beispielen beginnen, sollten wir einige Begriffe klären: Im weiteren Verlauf dieses Artikels bezeichnen wir die externe Abfrage, in der sich eine Subquery befindet, als "äußere Abfrage". Lassen Sie uns eine einfache Datenbank mit zwei Tabellen vorstellen: employee und department. Tabelle employee employee_idlast_namefirst_namesalarydepartment_id 1001SmithJohn145000.00100 1002BelleMary115000.00101 1003DalePeter155000.00102 1004GarrahanSusan195000.00100 1005GarrahanMary94000.00102 1006FiesJulia92000.00101 Tabelle department department_iddept_namemanager_idbudgetbuilding 100Sales23240000.00CentralPark 101Accounting56130000.00CentralPark 102IT34150000.00Oblivious Angenommen, wir möchten den Namen der Abteilung mit dem größten Budget ermitteln. Wir können die folgende Abfrage schreiben, die eine Unterabfrage (in blau) enthält: SELECT dept_name, budget FROM department WHERE budget = ( SELECT MAX(budget) FROM department ) Wir haben eine Unterabfrage (in blau) in der WHERE Klausel, die das größte Budget der department Tabelle zurückgibt. Dann verwenden wir diesen Wert in der WHERE-Klausel der äußeren Abfrage zum Vergleich mit der Budgetspalte. Alle Datensätze in der department Tabelle mit einem Budget, das dem Maximalwert des Budgets entspricht, werden zurückgegeben. Beachten Sie, dass die Unterabfrage in Klammern eingeschlossen ist. In SQL müssen Unterabfragen immer in Klammern eingeschlossen werden. Anhand dieses Beispiels haben wir gesehen, wie leicht und einfach es ist, eine Unterabfrage zu erstellen. Es gibt jedoch einige Regeln, wie die Unterabfrage mit der äußeren Abfrage zu verbinden ist. Wir müssen auch wissen, wo eine Subquery innerhalb der Anweisung SELECT stehen soll. Es gibt verschiedene Klauseln (wie WHERE, FROM und HAVING) in der äußeren Abfrage, in die wir eine Subquery einfügen können. Dies sind einige der Gründe, warum die Übung mit Subqueries so wichtig ist. Abschließend empfehle ich denjenigen, die nach Ressourcen zum Üben ihrer SQL-Kenntnisse suchen, den Kurs SQL-Übungssatz. Hier finden Sie mehr als 80 interaktive Übungen, die von einfachen Aufgaben mit SELECT FROM Anweisungen bis hin zu fortgeschrittenen Problemen mit mehreren Unterabfragen reichen. Eine weitere interessante Reihe von SQL-Übungen finden Sie in den monatlichen SQL-Übungssatzs, wo Sie Ihren SQL-Code in Aktion sehen und sofortiges Feedback erhalten. Ein weiteres SQL-Subquery-Beispiel Wir haben eine Subquery gesehen, die eine Ergebnismenge mit einem einzigen Datensatz und einer einzigen Spalte zurückgibt. Diese Art von Subquery ist recht häufig, und es ist einfach, die Subquery mit der äußeren Abfrage zu integrieren oder zu verbinden, indem man den Operator equal (=) verwendet. Sehen wir uns nun eine Unterabfrage an, die eine einzige Spalte, aber mehrere Datensätze zurückgibt, um sie mit einer Unterabfrage zu vergleichen, die einen einzigen Datensatz liefert. Angenommen, wir benötigen die Mitarbeiter-IDs und die Namen der Mitarbeiter, die im CentralPark-Gebäude arbeiten. Wir können eine SQL-Abfrage wie die folgende schreiben. Auch hier ist die Unterabfrage in Blau. SELECT employee_id, last_name, first_name FROM employee WHERE department_id IN ( SELECT department_id FROM department WHERE building = ‘CentralPark’ ) Das erste, was auffällt, ist die Anzahl der Datensätze, die von der Unterabfrage zurückgegeben werden. Sie gibt zwei Datensätze zurück, weil es im CentralPark-Gebäude zwei Abteilungen gibt: Verkauf und Buchhaltung. Die Unterabfrage erzeugt also eine Ergebnismenge mit zwei Abteilungs-IDs, 100 und 101. Die zweite Sache, die zu beachten ist, ist der IN-Operator, der in der WHERE -Klausel der äußeren Abfrage verwendet wird. Wenn eine Unterabfrage mehrere Zeilen zurückgibt, können wir nicht den Gleichheitsoperator (=) wie im ersten Beispiel verwenden. Stattdessen verwenden wir den IN-Operator, der wie der Operator "gehört zu" funktioniert. Mit anderen Worten, die Bedingung: department_id IN ( SELECT department_id FROM department WHERE building = ‘CentralPark’ ) gibt TRUE zurück, wenn der Wert von department_id in der Ergebnismenge der Unterabfrage vorhanden ist, und FALSE, wenn der Wert von department_id nicht in der Ergebnismenge der Unterabfrage enthalten ist. Versuchen Sie immer, im Voraus zu bestimmen, wie viele Datensätze Ihre Unterabfrage zurückgibt. Handelt es sich um eine Multi-Datensatz-Unterabfrage oder um eine Einzel-Datensatz-Unterabfrage? Überlegen Sie auf dieser Grundlage, wie Sie sie mit der äußeren Abfrage verbinden können. Wenn Sie mehr über Multi-Record- und Single-Record-Subqueries erfahren möchten, empfehle ich Ihnen die Artikel "Anleitung für Anfänger zur SQL-Subquery" und "Was sind die verschiedenen Typen von SQL-Unterabfragen?" Für diejenigen, die sich eingehender mit Unterabfragen befassen möchten, ist ein weiterer interessanter Artikel "Unterabfrage vs. JOIN" interessant, in dem Sie verschiedene Möglichkeiten zur Erstellung gleichwertiger SQL-Abfragen mit Hilfe von Joins und Unterabfragen kennenlernen. Verwendung von SQL-Unterabfragen in anderen Teilen der Abfrage Wir haben Beispiele für Unterabfragen in der WHERE-Klausel der Anweisung SELECT gezeigt. In diesem Abschnitt zeigen wir Unterabfragen in anderen Klauseln. In der FROM Klausel geben wir normalerweise die Tabelle an, die in der Abfrage gelesen werden soll. Wir können jedoch eine Unterabfrage in die FROM -Klausel einfügen, um eine Art Zwischenergebnismenge zu erstellen. Danach kann diese Ergebnismenge von der äußeren Abfrage wie eine virtuelle Tabelle verwendet werden. Sehen wir uns ein Beispiel an. Angenommen, es gibt Abteilungen, in denen das Gesamtgehalt aller Mitarbeiter das Abteilungsbudget übersteigt. Um diese Fälle zu erkennen, wollen wir das Budget und den Gesamtbetrag der von jeder Abteilung gezahlten Gehälter ermitteln. Außerdem fügen wir dem Bericht einen mathematischen Ausdruck hinzu, um den nicht verwendeten Teil des Budgets zu ermitteln. Schauen wir uns die Abfrage an: SELECT d1.dept_name, d1.budget, total.total_salaries, d1.budget - total.total_salaries AS budget_after_salaries FROM ( SELECT department_id, SUM(salary) AS total_salaries FROM employee GROUP BY department_id ) AS total INNER JOIN department d1 ON d1.department_id = total.department_id Die blaue Unterabfrage in der FROM Klausel erstellt eine Zwischentabelle namens total mit den Spalten department_id und total_salaries. Danach führen wir eine JOIN zwischen der Zwischentabelle total und der regulären Tabelle department. In der Liste der Spalten in SELECT berechnen wir die Differenz zwischen dem Abteilungsbudget und dem Gesamtbetrag der Gehälter. Wir nennen diesen Wert budget_after_salaries. Schauen wir uns das Ergebnis der Abfrage an: dept_namebudgettotal_salariesbudget_after_salaries Sales240000340000-100000 Accounting28000020700073000 IT2490002500001000 Wir können auch Unterabfragen in andere Klauseln der Anweisung SELECT einfügen, wie die Klausel HAVING, die zum Filtern von Datensatzgruppen verwendet wird. Angenommen, wir möchten die Abteilungen anzeigen, deren Gesamtgehalt größer ist als der Durchschnitt der Abteilungsgesamtbeträge. Wir erhalten den Durchschnitt der Abteilungsgesamtbeträge mit einer Unterabfrage. Schauen wir uns die Abfrage an: SELECT d1.dept_name, SUM(salary) FROM employee e INNER JOIN department d1 ON d1.department_id = e.department_id GROUP BY d1.dept_name HAVING SUM(salary) > ( SELECT SUM(salary)/COUNT(distinct department_id) FROM employee ) Wir erhalten den Gesamtbetrag der Gehälter in jeder Abteilung mit dem Ausdruck SUM(salary). Dann vergleichen wir in der Klausel HAVING diesen Betrag mit der durchschnittlichen Summe der Abteilungen, die wir mit der Unterabfrage erhalten haben. Die Abteilungen, deren SUM(salary) größer ist als das Ergebnis der Unterabfrage, werden im Ergebnis der Abfrage angezeigt, wie wir unten sehen: dept_nametotal_salaries Sales340000 Für diejenigen, die wissen wollen, wo die Subquery in SQL unterstützt wird, erklären die nächsten beiden Artikel andere Stellen, an denen Subqueries platziert werden können. Der Artikel "Subquery vs. CTE: A SQL Primer" erklärt CTEs, und im Artikel "Wie man Unterabfragen in INSERT-, UPDATE- und DELETE-Anweisungen verwendet," lernen Sie, wie der Titel schon sagt, SQL-Subqueries in anderen Anweisungen wie INSERT, UPDATE und DELETE. Üben Sie SQL-Subabfragen, um Ihre Fähigkeiten zu verbessern Wir haben mehrere SQL-Subqueries in verschiedenen Klauseln gesehen. SQL-Subqueries werden in der Regel in einer SELECT -Anweisung verwendet; es ist jedoch möglich, sie in anderen Anweisungen zu verwenden. Es gibt auch andere Arten von SQL-Subqueries, wie z. B. korrelierte Subqueries und CTEs, die der SQL-Sprache noch mehr Ausdruckskraft verleihen. SQL ist einfach und intuitiv zu erlernen, vor allem in den ersten Schritten. Aber wie bei jeder anderen Sprache müssen Sie üben, um das Niveau zu erreichen, auf dem Sie alle Arten von Abfragen und Berichten verwalten und erstellen können. Je mehr Zeit Sie mit dem Lösen von Problemen in der SQL-Sprache verbringen, desto mehr SQL-Kenntnisse erwerben Sie. Abschließend möchte ich Ihnen einige großartige Ressourcen zum Erlernen von SQL vorstellen. Erstens finden Sie hier einige Artikel, die sich auf das Üben von SQL konzentrieren: "Wie viel SQL-Praxis brauchen Sie, um ein Profi zu werden?" und "Warum ist SQL-Übungssatz mein Lieblings-Online-Kurs?" In beiden Artikeln finden Sie viele Vorschläge und Tipps zum Üben von SQL, um das SQL-Master-Niveau zu erreichen. Zweitens finden Sie unter LearnSQL.de in der monatlichen SQL-Praxis im Jahr 2022 verschiedene Möglichkeiten, SQL zu üben. Zu guter Letzt beschreibt der Artikel "5 Tipps von einem erfahrenen SQL-Datenanalysten", wie man Datenanalyst wird, ein Beruf, der solide SQL-Kenntnisse erfordert. Erweitern Sie Ihre Fähigkeiten und investieren Sie in sich selbst! Tags: Unterabfrage SQL-Übungen