Detaillierte Erklärung von Abfragebeispielen innerhalb von Unterabfragen in MySql

Detaillierte Erklärung von Abfragebeispielen innerhalb von Unterabfragen in MySql

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 zu Spalten- und Zeilenunterabfrageoperationen in MySQL
  • Beispielanalyse zur Optimierung von MySQL-Unterabfragen und verschachtelten Abfragen
  • Unterabfragebeispiele in MySQL
  • Detaillierte Erläuterung von MySQL-Unterabfragen (verschachtelte Abfragen), Verknüpfungstabellen und kombinierten Abfragen
  • MySQL-Tutorial: Ausführliche Erklärung zum Unterabfragebeispiel

<<:  Tutorial zur Installation des Nvidia-Grafikkartentreibers in Ubuntu 18.04 (mit Bildern und Text)

>>:  Beispiel zum Deaktivieren der Browser-Cache-Konfiguration im Vue-Projekt

Artikel empfehlen

Was ist ein MySQL-Tablespace?

Das Thema, das ich heute mit Ihnen teilen möchte,...

Implementierung der VUE-Anzeige unendlicher Ebenenbaum-Datenstrukturen

Inhaltsverzeichnis Rekursiver Aufruf der Komponen...

Verwendung des MySQL-Zeitstempels

Vorwort: Zeitstempelfelder werden häufig in MySQL...

Verwenden von jQuery zum Implementieren des Karusselleffekts

Was ich Ihnen heute zeige, ist die Verwendung von...

JS implementiert einen Stoppuhr-Timer

In diesem Artikelbeispiel wird der spezifische JS...

Einstellungen für den Ubuntu-Boot-Autostart-Dienst

So erstellen Sie einen Dienst und starten ihn aut...

CSS erzielt farbenfrohe und intelligente Schatteneffekte

Hintergrund Haben Sie sich jemals gefragt, wie Si...

Einfache Methode zur Installation von MySQL unter Linux

Bei der Onlinesuche nach Methoden zur Installatio...

Zusammenfassung der wichtigsten Attribute des Body-Tags

bgcolor="Textfarbe" background="Hin...