Dieser Artikel beschreibt die MySQL-Einzeltabellenabfrageoperation. Teilen Sie uns die Einzelheiten zu Ihrer Information mit: Grammatik 1. Abfragesyntax für einzelne Tabellen
2. Schlüsselwortausführungspriorität (Schlüsselpunkte) Der wichtigste Punkt: Keyword-Ausführungspriorität aus 1. Finden Sie die Tabelle: 2. Nehmen Sie die von where angegebenen Einschränkungen und rufen Sie die Datensätze einzeln aus der Datei/Tabelle ab 3. Gruppieren Sie die abgerufenen Datensätze nach „group by“. Wenn keine Gruppierung vorhanden ist, wird der gesamte Datensatz als einer gruppiert. 4. Filtern Sie die gruppierten Ergebnisse, indem Sie 5. Select ausführen 6. Deduplizierung 7. Sortieren Sie die Ergebnisse nach Bedingung: order by 8. Begrenzen Sie die Anzahl der angezeigten Ergebnisse (1) wenn Einschränkung wobei der Operator Die Where-Klausel kann verwendet werden (2) Gruppieren nach Abfrage
Bei der Ausführung der folgenden SQL-Anweisung wird kein Fehler gemeldet, sie ist jedoch an sich bedeutungslos mysql> select * aus Mitarbeitergruppe nach Post; +----+--------+--------+-----+------------+-----------------------------------------+---------------+-------------+--------+-----------+ | ID | Name | Geschlecht | Alter | Einstellungsdatum | Post | Post-Kommentar | Gehalt | Büro | Abreise-ID | +----+--------+--------+-----+------------+-----------------------------------------+---------------+-------------+--------+-----------+ | 14 | Zhang Ye | männlich | 28 | 11.03.2016 | Vorgang | NULL | 10000,13 | 403 | 3 | | 9 | 歪歪| weiblich | 48 | 11.03.2015 | Verkauf | NULL | 3000,13 | 402 | 2 | | 2 | Alex | männlich | 78 | 02.03.2015 | Lehrer | | 1000000,31 | 401 | 1 | | 1 | egon | männlich | 18 | 01.03.2017 | Botschafter des Old Boy's Office in Shahe | NULL | 7300,33 | 401 | 1 | +----+--------+--------+-----+------------+-----------------------------------------+---------------+-------------+--------+-----------+ 4 Zeilen im Satz (0,00 Sek.) Setzen Sie sql_mode auf ONLY_FULL_GROUP_BY, beenden Sie den Vorgang und geben Sie ihn dann erneut ein, damit die Änderung wirksam wird. mysql> globalen SQL-Modus festlegen = 'STRICT_TRANS_TABLES, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION, ONLY_FULL_GROUP_BY'; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) Erneut eingeben mysql> wähle @@sql_mode; +-----------------------------------------------------------------------------------+ | @@sql_mode | +-----------------------------------------------------------------------------------+ | NUR_VOLLSTÄNDIGE_GROUP_BY, STRENGE_TRANS_TABLES, KEIN_AUTOMATISCHES_ERSTELLEN_BENUTZER, KEIN_ENGINE_SUBSTITUTION | +--------------------------------------------------------------------------------- mysql> select * from emp group by post; // Im aktuellen Fall wird FEHLER 1054 (42S22) gemeldet: Unbekannte Spalte „post“ in „group statement“ mysql> select * aus Mitarbeitergruppe nach Post; FEHLER 1055 (42000): „t1.employee.id“ ist nicht in GROUP BY mysql> Beitrag aus Mitarbeitergruppe nach Beitrag auswählen; +-----------------------------------------+ | veröffentlichen | +-----------------------------------------+ | Betrieb | | Verkauf | | Lehrer | | Diplomatischer Botschafter des Old Boys Office in Shahe | +-----------------------------------------+ 4 Zeilen im Satz (0,00 Sek.) Oder verwenden Sie wie folgt mysql> wähle Name, Post aus der Mitarbeitergruppe nach Post, Name; +------------+-----------------------------------------------------+ | Name | Beitrag | +------------+-----------------------------------------------------+ | Zhang Ye| Betrieb | | Cheng Yaojin | Betrieb | | Cheng Yaotie | Betrieb | | Cheng Yaotong | Betrieb | | Cheng Yaoyin | Betrieb | | Ding Ding | Verkauf | | Yaya | Verkauf | | Sterne | Ausverkauf | | Gege | Verkauf | | Wai Wai | Verkauf | | Alex | Lehrer | | Jingliyang | Lehrer | | Jinxin | Lehrer | | Liwenzhou | Lehrer | | Wupeiqi | Lehrer | | xiaomage | Lehrer | | Yuanhao | Lehrer | | Egon | Diplomatischer Botschafter des Old Boys Office in Shahe | +------------+-----------------------------------------------------+ 18 Zeilen im Satz (0,00 Sek.) mysql> wähle Post, Anzahl(ID) aus der Mitarbeitergruppe nach Post; +-----------------------------------------+-----------+ | Beitrag | Anzahl(ID) | +-----------------------------------------+-----------+ | Betrieb | 5 | | Verkauf | 5 | | Lehrer | 7 | | Diplomatischer Botschafter der Ehemaligen im Shahe-Büro | 1 | +-----------------------------------------+-----------+ 4 Zeilen im Satz (0,00 Sek.) (3) Aggregationsfunktionen max() findet den Maximalwert #Hervorhebung: Die Aggregationsfunktion aggregiert den Inhalt der Gruppe. Wenn keine Gruppe vorhanden ist, wird standardmäßig eine Gruppe verwendet. # Wie viele Mitarbeiter gibt es in jeder Abteilung? select post, count(id) from employee group by post; # Das höchste Gehalt für jede Abteilung, select post,max(salary) aus der Mitarbeitergruppe nach Posten; # Mindestgehalt für jede Abteilung. Wählen Sie „post,min(Gehalt)“ aus der Mitarbeitergruppe nach Posten aus. # Durchschnittsgehalt jeder Abteilung. Wählen Sie „Post, Avg(Gehalt)“ aus der Mitarbeitergruppe nach Posten aus. # Alle Gehälter für jede Abteilung, select post, sum(age) aus der Mitarbeitergruppe nach Posten; (4) Filterung haben Der Unterschied zwischen HAVING und WHERE ist
mysql> Auswahl * vom Mitarbeiter, wobei Gehalt>1000000; +----+------+------+---------+---------+---------+-----------+-------------+------------+--------+-----------+ | ID | Name | Geschlecht | Alter | Einstellungsdatum | Post | Post-Kommentar | Gehalt | Büro | Abreise-ID | +----+------+------+---------+---------+---------+-----------+-------------+------------+--------+-----------+ | 2 | Alex | männlich | 78 | 02.03.2015 | Lehrer | | 1000000,31 | 401 | 1 | +----+------+------+---------+---------+---------+-----------+-------------+------------+--------+-----------+ 1 Zeile im Satz (0,00 Sek.) mysql> select * von Mitarbeiter mit Gehalt>1000000; FEHLER 1463 (42000): Das nicht gruppierbare Feld „Gehalt“ wird in der HAVING-Klausel verwendet. # Sie müssen „group by“ verwenden, um mit der Funktion „group_concat()“ alle Namenswerte zu verkettenmysql> select post,group_concat(name) from emp group by post having salary > 10000; ##Fehler, das Feld „Gehalt“ kann nach der Gruppierung nicht direkt abgerufen werdenERROR 1054 (42S22): Unbekannte Spalte „post“ in „Feldliste“ üben 1. Fragen Sie die Stellennamen ab, bei denen die Anzahl der Mitarbeiter in jeder Position weniger als 2 beträgt, sowie die Namen und die Anzahl der Mitarbeiter in jeder Position Antwort mysql> wähle Post, Group_concat (Name), Count (ID) aus der Mitarbeitergruppe nach Post; +-----------------------------------------+----------------------------------------------+-----------+ | Beitrag | group_concat(Name) | Anzahl(ID) | +-----------------------------------------+----------------------------------------------+-----------+ | Betrieb | Cheng Yaotie, Cheng Yaotong, Cheng Yaoyin, Cheng Yaojin, Zhang Ye | 5 | | Verkauf | Gege, Xingxing, Dingding, Yaya, Waiwai | 5 | | Lehrer | Xiaomage, Jinxin, Jingliyang, Liwenzhou, Yuanhao, Wupeiqi, Alex | 7 | | Diplomatischer Botschafter der Ehemaligen im Shahe-Büro | Egon | 1 | +-----------------------------------------+----------------------------------------------+-----------+ 4 Zeilen im Satz (0,00 Sek.) mysql> wähle Post,group_concat(Name),count(ID) aus der Mitarbeitergruppe nach Posts mit count(ID)<2; +-----------------------------------------+--------------------+-----------+ | Beitrag | group_concat(Name) | Anzahl(ID) | +-----------------------------------------+--------------------+-----------+ | Diplomatischer Botschafter der Ehemaligen im Shahe-Büro | Egon | 1 | +-----------------------------------------+--------------------+-----------+ 1 Zeile im Satz (0,00 Sek.) #Frage 2: mysql> wähle „Post, Durchschnitt (Gehalt)“ aus der Mitarbeitergruppe nach Posten mit einem Durchschnitt (Gehalt) > 10000; +--------------+------------------+ | Post | Durchschnitt (Gehalt) | +--------------+------------------+ | Betrieb | 16800.026000 | | Lehrer | 151842.901429 | +--------------+------------------+ 2 Zeilen im Satz (0,00 Sek.) #Frage 3: mysql> wähle „Post, Durchschnitt (Gehalt)“ aus der Mitarbeitergruppe nach Posten mit Durchschnitt (Gehalt) > 10000 und Durchschnitt (Gehalt) < 20000; +--------------+--------------+ | Post | Durchschnitt (Gehalt) | +--------------+--------------+ | Betrieb | 16800.026000 | +--------------+--------------+ 1 Zeile im Satz (0,00 Sek.) (5) Sortieren nach Abfrage Nach einzelner Spalte sortieren SELECT * FROM Mitarbeiter ORDER BY Alter; SELECT * FROM Mitarbeiter ORDER BY Alter ASC; SELECT * FROM Mitarbeiter ORDER BY Alter DESC; Nach mehreren Spalten sortieren: Zuerst nach Alter in aufsteigender Reihenfolge sortieren, bei gleichem Alter nach ID in absteigender Reihenfolge sortieren SELECT * vom Mitarbeiter SORTIEREN NACH ALTER AUFSTEIGEND, ID DESC; (5) Limit begrenzt die Anzahl der abgefragten Datensätze: Beispiel: SELECT * FROM Mitarbeiter ORDER BY Gehalt DESC LIMIT 3; #Die Standardanfangsposition ist 0 SELECT * FROM Mitarbeiter ORDER BY Gehalt DESC LIMIT 0,5; #Starten Sie bei der Nummer 0, d. h. fragen Sie zuerst das erste Element ab und fragen Sie dann die nächsten 5 Elemente ab, einschließlich dieses. SELECT * FROM employee ORDER BY salary DESC LIMIT 5,5; #Beginnen Sie mit dem 5. Element, d. h. suchen Sie zuerst das 6. Element und dann die nächsten 5 Elemente, einschließlich dieses Übung: 5 Elemente gleichzeitig anzeigen # Seite 1 datamysql> select * from employee limit 0,5; +----+----------+------+-----+------------+--------------------------+---------------+-------------+--------+-----------+ | ID | Name | Geschlecht | Alter | Einstellungsdatum | Post | Post-Kommentar | Gehalt | Büro | Abreise-ID | +----+-----------+------+-----+------------+-----------------------------------------+---------------+-------------+--------+-----------+ | 1 | egon | männlich | 18 | 01.03.2017 | Botschafter des Old Boy's Office in Shahe | NULL | 7300,33 | 401 | 1 | | 2 | Alex | männlich | 78 | 02.03.2015 | Lehrer | | 1000000,31 | 401 | 1 | | 3 | wupeiqi | männlich | 81 | 05.03.2013 | Lehrer | NULL | 8300,00 | 401 | 1 | | 4 | yuanhao | männlich | 73 | 01.07.2014 | Lehrer | NULL | 3500,00 | 401 | 1 | | 5 | liwenzhou | männlich | 28 | 01.11.2012 | Lehrer | NULL | 2100,00 | 401 | 1 | +----+-----------+------+-----+------------+-----------------------------------------+---------------+-------------+--------+-----------+ 5 Zeilen im Satz (0,00 Sek.) # Seite 2 datamysql> select * from employee limit 5,5; +----+------------+--------+-----+------------+---------+-----------+--------------+-----------+--------+-----------+ | ID | Name | Geschlecht | Alter | Einstellungsdatum | Post | Post-Kommentar | Gehalt | Büro | Abreise-ID | +----+------------+--------+-----+------------+---------+-----------+--------------+-----------+--------+-----------+ | 6 | jingliyang | weiblich | 18 | 11.02.2011 | Lehrerin | NULL | 9000,00 | 401 | 1 | | 7 | jinxin | männlich | 18 | 01.03.1900 | Lehrer | NULL | 30000,00 | 401 | 1 | | 8 | xiaomage | männlich | 48 | 11.11.2010 | Lehrer | NULL | 10000,00 | 401 | 1 | | 9 | 歪歪| weiblich | 48 | 11.03.2015 | Verkauf | NULL | 3000,13 | 402 | 2 | | 10 | Yaya | weiblich | 38 | 01.11.2010 | Verkauf | NULL | 2000,35 | 402 | 2 | +----+------------+--------+-----+------------+---------+-----------+--------------+-----------+--------+-----------+ 5 Zeilen im Satz (0,00 Sek.) # Seite 3 datamysql> select * from employee limit 10,5; +----+-----------+--------+-----+------------+-----------+---------------+---------------+--------+--------+-----------+ | ID | Name | Geschlecht | Alter | Einstellungsdatum | Post | Post-Kommentar | Gehalt | Büro | Abreise-ID | +----+-----------+--------+-----+------------+-----------+---------------+---------------+--------+--------+-----------+ | 11 | Ding Ding | weiblich | 18 | 12.03.2011 | Verkauf | NULL | 1000,37 | 402 | 2 | | 12 | Star | weiblich | 18 | 13.05.2016 | Verkauf | NULL | 3000,29 | 402 | 2 | | 13 | 格格| weiblich | 28 | 27.01.2017 | Verkauf | NULL | 4000,33 | 402 | 2 | | 14 | Zhang Ye | männlich | 28 | 11.03.2016 | Vorgang | NULL | 10000,13 | 403 | 3 | | 15 | Cheng Yaojin | männlich | 18 | 12.03.1997 | Vorgang | NULL | 20000,00 | 403 | 3 | +----+-----------+--------+-----+------------+-----------+---------------+---------------+--------+--------+-----------+ 5 Zeilen im Satz (0,00 Sek.) Leser, die an weiteren MySQL-bezogenen Inhalten interessiert sind, können sich die folgenden Themen auf dieser Site ansehen: „MySQL-Abfragekenntnisse“, „Zusammenfassung der allgemeinen MySQL-Funktionen“, „MySQL-Protokolloperationskenntnisse“, „Zusammenfassung der MySQL-Transaktionsoperationskenntnisse“, „MySQL-gespeicherte Prozedurkenntnisse“ und „Zusammenfassung der MySQL-Datenbanksperrenkenntnisse“. Ich hoffe, dass dieser Artikel für jedermann beim Entwurf einer MySQL-Datenbank hilfreich ist. Das könnte Sie auch interessieren:
|
<<: Vue implementiert ein Suchfeld mit einer Lupe
>>: Detaillierte Erläuterung zur Konfiguration des Beispielcodes für den Nginx-Webserver
Überblick In einer Datenbank wird ein Index verwe...
1. Erstellen Sie eine neue virtuelle Maschine aus...
Die unbedeutende flex-basis hat bei der kleinen F...
Ich spiele jetzt schon eine Weile mit Diagrammen ...
Mit dem MySQL-Befehl „explain“ können Sie die Lei...
/****************** * Erweiterter Zeichengerätetr...
1. at ist so konfiguriert, dass nach 5 Stunden „D...
1. Linklayout der neuen Site-Startseite 1. Die Pos...
In diesem Artikel finden Sie das Installations- u...
Im Vergleich zum Windows-System bietet das Linux-...
Notieren Sie einige der Orte, an denen Sie Zeit v...
Inhaltsverzeichnis Was ist bidirektionale Datenbi...
Inhaltsverzeichnis 1. Vom Vater zum Sohn 2. Vom S...
Inhaltsverzeichnis Komplexe Abfrage und schrittwe...
Vorwort Es besteht ein Missverständnis bezüglich ...