Wo liegt meine Heimatstadt, wenn ich nach Nordwesten schaue? Wie oft habe ich den Vollmond im Südosten gesehen? Der Mond steigt langsam wieder am Himmel auf. Während ich vor dem Schlafengehen träume, werde ich alle meine lieben Leser dazu bringen, den letzten Unterabfrageteil von MySql zu erkunden. Hinweis: Einige Abfrageergebnisse können von den Fragenanforderungen abweichen und es können zusätzliche Felder angezeigt werden, um die Lesbarkeit der Ergebnisse zu verbessern. Leser, die dies tatsächlich tun, können die zusätzlichen Felder nach SELECT löschen, um das richtige Ergebnis zu erhalten. #WHERE oder HAVING gefolgt von #1. Skalare Unterabfrage (Einzelzeilen-Unterabfrage) #2. Spaltenunterabfrage (Unterabfrage für mehrere Zeilen) #3. Zeilenunterabfrage (mehrere Spalten und mehrere Zeilen) #Merkmale: # ① Die Unterabfrage wird in Klammern gesetzt. # ② Die Unterabfrage wird normalerweise auf der rechten Seite der Bedingung platziert. # ③ Skalare Unterabfrage: wird normalerweise mit einzeiligen Operatoren verwendet. # Einzeilige Operatoren: > < >= <= <> !- # Spaltenunterabfrage, normalerweise verwendet mit Mehrzeilenoperatoren # IN, ANY/SOME (any), ALL # ④ Die Ausführung der Unterabfrage hat Vorrang vor der Hauptabfrage, und die Bedingung der Hauptabfrage verwendet das Ergebnis der Unterabfrage. #1. Skalare Unterabfrage#Fall 1: Wessen Gehalt ist höher als das von Abel? #①Abfrage Abels GehaltWÄHLEN Sie das Gehalt VON Mitarbeitern WHERE Nachname = 'Abel'; #②Fragen Sie die Mitarbeiterinformationen ab und geben Sie Gehalt>①ResultSELECT * ein. VON Mitarbeitern WHERE Gehalt>(SELECT Gehalt FROM Mitarbeiter WHERE Nachname='Abel'); #Fall 2. Geben Sie den Namen, die Job-ID und das Gehalt des Mitarbeiters zurück, dessen Job-ID mit der von Mitarbeiter Nr. 141 übereinstimmt und dessen Gehalt höher ist als das von Mitarbeiter Nr. 143. #①Überprüfen Sie die Job-ID des Mitarbeiters 141 Wählen Sie job_id VON Mitarbeitern WO Mitarbeiter-ID = "141"; #②Überprüfen Sie das Gehalt des Mitarbeiters 143 SELECT Gehalt VON Mitarbeitern WO Mitarbeiter-ID = "143"; #③Fügen Sie abschließend die Ergebnisse zusammen SELECT CONCAT(last_name,first_name) AS name, job_id AS-Auftragsnummer, Gehalt ALS Gehalt VON Mitarbeitern WO job_id=( Wählen Sie job_id VON Mitarbeitern WO employee_id='141' ) UND Gehalt>( SELECT Gehalt VON Mitarbeitern WO employee_id='143' ); #Fall 3. Geben Sie den Nachnamen, die Job-ID und das Gehalt des Mitarbeiters mit dem niedrigsten Gehalt im Unternehmen zurück. SELECT MIN(Gehalt) VON Mitarbeitern; WÄHLEN last_name AS Nachname, Gehalt ALS Gehalt, job_id AS Stellennummer FROM Mitarbeiter WO Gehalt=( SELECT MIN(Gehalt) VON Mitarbeitern ); #Fall 4. Fragen Sie die Abteilungs-ID und den Mindestlohn der Abteilung ab, deren Mindestlohn höher ist als der Mindestlohn der Abteilung Nr. 50. #①Überprüfen Sie das Mindestgehalt von 50 Abteilungen SELECT MIN(Gehalt) VON Mitarbeitern WO Abteilungs-ID = 50; #Nach der Gruppierung Filterbedingung ①. [Schließen Sie diejenigen ohne Abteilungen nicht aus, filtern Sie also nicht nach der Abteilungsnummer] Wählen Sie Abteilungs-ID als Abteilungs-ID aus. MIN(Gehalt) AS Monatsgehalt FROM Mitarbeiter #WHERE Abteilungs-ID GROUP BY Abteilungs-ID MONATLICHES GEHALT HABEN>( SELECT MIN(Gehalt) VON Mitarbeitern ); #2. Spaltenunterabfrage (Unterabfrage für mehrere Zeilen) #Mehrere Zeilen zurückgeben#Verwenden mehrerer Zeilenvergleichsoperatoren #Fall 1. Gibt die Namen aller Mitarbeiter in der Abteilung zurück, deren Standort-ID 1400 oder 1700 ist. #①Fragen Sie die Abteilungsnummer ab, deren Standort-ID 1400 oder 1700 ist.SELECT DISTINCT department_id VON Abteilungen WO Standort-ID IN (1400,1700); #②Frage den Namen des Mitarbeiters ab, wobei die Abteilungsnummer eines der Elemente in der Liste sein muss ①SELECT CONCAT(last_name,first_name) AS name FROM employees WO Abteilungs-ID IN ( SELECT DISTINCT Abteilungs-ID VON Abteilungen WO Standort-ID IN (1400, 1700) ); Verwenden Sie ANY statt IN, um dasselbe Ergebnis wie oben zu erhalten. SELECT CONCAT(last_name,first_name) AS name FROM employees WO Abteilungs-ID = BELIEBIG( SELECT DISTINCT Abteilungs-ID VON Abteilungen WO Standort-ID IN (1400, 1700) ); # Beispiel. Gibt die Namen aller Mitarbeiter in Abteilungen zurück, deren Standort-ID nicht 1400 oder 1700 ist. SELECT CONCAT(Nachname,Vorname) AS Name FROM Mitarbeiter WO Abteilungs-ID NICHT IN ( SELECT DISTINCT Abteilungs-ID VON Abteilungen WO Standort-ID IN (1400, 1700) ); ============================== SELECT CONCAT(Nachname,Vorname) AS Name FROM Mitarbeiter WO Abteilungs-ID <> ALLE( SELECT DISTINCT Abteilungs-ID VON Abteilungen WO Standort-ID IN (1400, 1700) ); #Fall 2. Geben Sie die Mitarbeiter-ID aller Mitarbeiter in anderen Jobs zurück, die ein niedrigeres Gehalt haben als alle Mitarbeiter in der Abteilung IT_PROG mit der Job-ID. # Name, Job-ID und Gehalt #①Fragen Sie das Gehalt der Abteilung IT_PROG abSELECT DISTINCT salary VON Mitarbeitern WO job_id='IT_PROG'; #②Finden Sie die Informationen anderer Abteilungen als IT_PROGSELECT heraus * VON Mitarbeitern WO job_id != 'IT_PROG'; #③Führen Sie ① und ② zusammen, um dies in der Mitarbeitertabelle herauszufinden: SELECT employee_id AS Mitarbeiternummer, CONCAT(Nachname,Vorname) AS Name, job_id AS-Auftragsnummer, Gehalt ALS Gehalt VON Mitarbeitern WO job_id != 'IT_PROG' UND Gehalt<ANY( SELECT Gehalt VON Mitarbeitern WO job_id='IT_PROG' ); Die Verwendung von MAX statt ANY hat den gleichen Effekt wie oben SELECT employee_id AS employee number, CONCAT(Nachname,Vorname) AS Name, job_id AS-Auftragsnummer, Gehalt ALS Gehalt VON Mitarbeitern WO job_id <> 'IT_PROG' UND Gehalt<( SELECT MAX(Gehalt) VON Mitarbeitern WO job_id='IT_PROG' ); #Fall 3. Geben Sie die Mitarbeiternummer, den Namen, die Job-ID und das Gehalt aller Mitarbeiter in anderen Abteilungen zurück, deren Gehalt niedriger ist als das der Abteilung mit der Job-ID „IT_PROG“. #①Informieren Sie sich zuerst über das Gehalt der Abteilung IT_PROG. SELECT DISTINCT Gehalt VON Mitarbeitern WO job_id='IT_PROG'; Wählen Sie employee_id AS employee_id, CONCAT(Nachname,Vorname) AS Name, job_id AS-Auftragsnummer, Gehalt ALS Gehalt VON Mitarbeitern WO Gehalt<ALL( SELECT DISTINCT Gehalt VON Mitarbeitern WO job_id='IT_PROG' ) UND job_id <> 'IT_PROG'; ============================= MIN statt ALL Wählen Sie employee_id AS employee_id, CONCAT(Nachname,Vorname) AS Name, job_id AS-Auftragsnummer, Gehalt ALS Gehalt VON Mitarbeitern WO Gehalt<( SELECT MIN(Gehalt) VON Mitarbeitern WO job_id='IT_PROG' ) UND job_id <> 'IT_PROG'; #3. Zeilenunterabfrage (Ergebnissatz hat eine Zeile und mehrere Spalten oder mehrere Zeilen und mehrere Spalten) #Fall 1. Fragen Sie den Mitarbeiter mit der kleinsten Mitarbeiternummer und dem höchsten Gehalt ab. Führen Sie SELECT MIN(employee_id) ein. VON Mitarbeitern; ================= SELECT MAX(Gehalt) VON Mitarbeitern; WÄHLEN * VON Mitarbeitern WO employee_id = ( SELECT MIN(Mitarbeiter-ID) VON Mitarbeitern ) UND Gehalt = ( SELECT MAX(Gehalt) VON Mitarbeitern ); Dieses Abfrageergebnis verwendet virtuelle Felder und Einzelzeilenoperatoren müssen konsistent sein, um verwendet werden zu können. Die Ergebnisse sind die gleichen wie oben. WÄHLEN * VON Mitarbeitern WO (Mitarbeiter-ID, Gehalt)=( SELECT MIN(Mitarbeiter-ID), MAX(Gehalt) VON Mitarbeitern ); #2. SELECT-Unterabfrage#Unterstützt nur skalare Unterabfragen, das Ergebnis ist eine Zeile und eine Spalte#Fall 1. Fragen Sie die Anzahl der Mitarbeiter in jeder Abteilung abSELECT d.*,(SELECT COUNT(*) FROM employees) VON Abteilungen d; Fügen Sie die Bedingung SELECT d.*,(SELECT COUNT(*) hinzu. VON Mitarbeitern WO e.Abteilungs-ID=d.Abteilungs-ID ) AS NummerVON Abteilungen d; #Fall 2. Fragen Sie den Abteilungsnamen der Mitarbeiternummer = 102 ab. SELECT Abteilungsname VON Abteilungen; ============== SELECT Mitarbeiter-ID VON Mitarbeitern WO Mitarbeiter-ID = 102; Wählen Sie employee_id, ( SELECT Abteilungsname VON Abteilungen WO e.Abteilungs-ID=d.Abteilungs-ID ) VON Mitarbeitern WO Mitarbeiter-ID=102; #Drei. Hinweis nach FROM: Das Ergebnis der Unterabfrage wird als Tabelle verwendet und es muss ein Alias angegeben werden. #Fall: Abfrage des durchschnittlichen Gehaltsniveaus jeder Abteilung. SELECT ROUND(AVG(Gehalt),2),Abteilungs-ID VON Mitarbeitern GRUPPE NACH Abteilungs-ID; Wählen Sie e.Durchschnittsgehalt,j.Grade_Level VON job_grades AS j ,( SELECT ROUND(AVG(Gehalt),2) AS Durchschnittsgehalt,Abteilungs-ID VON Mitarbeitern GROUP BY Abteilungs-ID ) WIE e WO e.durchschnittlicher_Gehalt ZWISCHEN j.niedrigster_Gehalt UND j.höchster_Gehalt; #1999 Grammatik, Antwort des Lehrers SELECT e.*,j.grade_level AUS ( SELECT ROUND(AVG(Gehalt),2) AS Durchschnittsgehalt,Abteilungs-ID VON Mitarbeitern GROUP BY Abteilungs-ID ) WIE e INNER JOIN job_grades j AUF e.Durchschnittsgehalt ZWISCHEN j.Niedrigster_Gehalt UND j.Höchster_Gehalt; #Vier. Nach EXISTS (korrelierte Unterabfrage) Syntax: EXISTS (vollständige Abfrageanweisung) Hinweis: Die vollständige Abfrageanweisung kann aus einer Zeile und einer Spalte oder aus einer Zeile und mehreren Spalten bestehen. Hinweis: Führen Sie zuerst die äußere Abfrage aus und filtern Sie dann nach dem Wert eines bestimmten Felds. EXISTS bestimmt, ob der Wert (Boolescher Typ) vorhanden ist oder nicht. Es gibt nur zwei Ergebnisse: 1, 0, nein. #Einführung SELECT EXISTS (SELECT employee_id FROM employees); Abfrage der Mitarbeiterinformationen mit Gehalt 3W SELECT EXISTS(SELECT * FROM employees WHERE salary=30000); #Fallvorstellung. Mitarbeitername und Abteilungsname abfragen#Mitarbeitername und Abteilungsnummer abfragenSELECT first_name,department_id VON Mitarbeitern WO Abteilungs-ID; #Abteilungsnamen abfragen SELECT department_name VON Abteilungen; #Überprüfen Sie den Namen des Mitarbeiters und den Namen der Abteilung. SELECT e.Vorname,d.Abteilungsname VON Mitarbeitern INNER JOIN (SELECT Abteilungsname, Abteilungs-ID VON Abteilungen ) WIE d EIN e.Abteilungs-ID=d.Abteilungs-ID; #Fall 1..Fragen Sie den Abteilungsnamen der Mitarbeiter ab SELECT department_name VON Abteilungen WO EXISTIERT( WÄHLEN * VON Mitarbeitern WO d.Abteilungs-ID=e.Abteilungs-ID ); Verwenden Sie IN statt EXISTS, das gleiche Ergebnis wie oben SELECT department_name VON Abteilungen WO d.Abteilungs-ID IN ( SELECT Abteilungs-ID VON Mitarbeitern ); #Fall 2. Fragen Sie die Informationen des männlichen Gottes ab, der keine Freundin hat#IN methodSELECT * VON Jungen Bo WO bo.id NICHT IN( Wählen Sie Freund-ID VON Schönheit sein ); =============== #EXISTS-Methode SELECT * VON Jungen Bo WO NICHT EXISTIERT( Wählen Sie Freund-ID VON Schönheit sein WO bo.id=be.freund_id ); Erweitert 9: Union-Abfrage UNION Union-Merge: Fügt die Ergebnisse mehrerer Abfrageanweisungen zu einem Ergebnis zusammen. Grammatik: Abfrageanweisung 1 UNION Abfrage 2 UNION ... Anwendungsszenarien: Die abzufragenden Ergebnisse stammen aus mehreren Tabellen und es besteht keine direkte Verbindung zwischen den mehreren Tabellen. Aber wenn die Abfrageinformationen konsistent sind. Beim Durchsuchen von Webseiten werden die Inhalte aus verschiedenen Tabellen abgerufen, kombiniert und an den Benutzer zurückgegeben. Merkmale: 1. Die Anzahl der Abfragespalten in mehreren Abfrageanweisungen muss konsistent sein. 2. Typ und Reihenfolge der einzelnen Spalten in mehreren Abfrageanweisungen sollten konsistent sein. 3. Verwenden Sie das Schlüsselwort UNION, um standardmäßig Duplikate zu entfernen. Wenn Sie UNION ALL verwenden, werden alle Elemente angezeigt, einschließlich Duplikate. Vielen Dank an alle, die dies aufmerksam gelesen haben. Der MySql-Abfrageteil ist vorbei. Ich glaube, dass Sie einige einfache SQL-Abfrageanweisungen gemäß den Vorlagen in meinem Blog vervollständigen können. Nachdem Sie nun SQL gelernt haben, sollten Sie in Zukunft mehr üben. Die Syntax von SQL1992 und 1999 ist in gängigen relationalen Datenbanken universell. Ich werde mein Wissen über MySQL in Zukunft weiter ausbauen. Interessierte Freunde, folgt mir bitte! o(^▽^)o Dies ist das Ende dieses Artikels mit der detaillierten Erklärung der Abfrage im Unterabfragebeispiel in MySql. Weitere relevante MySql-Abfragen im Unterabfrageinhalt finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Tutorial zur Installation des Nvidia-Grafikkartentreibers in Ubuntu 18.04 (mit Bildern und Text)
>>: Beispiel zum Deaktivieren der Browser-Cache-Konfiguration im Vue-Projekt
Experimentelle Umgebung Apache und Tomcat sind be...
Statische Dateien Nginx ist für seine hohe Leistu...
Das Thema, das ich heute mit Ihnen teilen möchte,...
Einige Optimierungsregeln für Browser-Webseiten S...
Inhaltsverzeichnis Rekursiver Aufruf der Komponen...
Vorwort Vor ein paar Tagen bin ich zufällig auf d...
In diesem Artikel werden MySQL-Funktionen zum Abf...
Vorwort: Zeitstempelfelder werden häufig in MySQL...
Was ich Ihnen heute zeige, ist die Verwendung von...
In diesem Artikelbeispiel wird der spezifische JS...
Eigentlich ist das ganz einfach. Wir fügen ein a-...
So erstellen Sie einen Dienst und starten ihn aut...
Hintergrund Haben Sie sich jemals gefragt, wie Si...
Bei der Onlinesuche nach Methoden zur Installatio...
bgcolor="Textfarbe" background="Hin...