Detaillierte Erläuterung von Beispielen für MySQL-Einzeltabellenabfragevorgänge [Syntax, Einschränkungen, Gruppierung, Aggregation, Filterung, Sortierung usw.]

Detaillierte Erläuterung von Beispielen für MySQL-Einzeltabellenabfragevorgänge [Syntax, Einschränkungen, Gruppierung, Aggregation, Filterung, Sortierung usw.]

Dieser Artikel beschreibt die MySQL-Einzeltabellenabfrageoperation. Teilen Sie uns die Einzelheiten zu Ihrer Information mit:

Grammatik

1. Abfragesyntax für einzelne Tabellen

SELECT Feld1, Feld2... FROM Tabellenname
WHERE-Bedingung
GROUP BY-Feld
HAVING Filter
ORDER BY-Feld
LIMIT begrenzt die Anzahl der Einträge

2. Schlüsselwortausführungspriorität (Schlüsselpunkte)

Der wichtigste Punkt: Keyword-Ausführungspriorität

aus
Wo
Gruppieren nach
haben
wählen
unterscheidbar
Bestellen bis
Limit

1. Finden Sie die Tabelle: from

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
1. Vergleichsoperatoren: >, <, >=, <=, <>, !=
2.zwischen 80 und 100: Der Wert liegt zwischen 80 und 100
3.in(80,90,100) Wert ist 10 oder 20 oder 30
4. wie „xiaomagepattern“: Muster kann % oder _ sein. % steht für eine beliebige Anzahl Zeichen, _ steht für ein Zeichen
5. Logische Operatoren: Sie können logische Operatoren und oder nicht direkt in mehreren Bedingungen verwenden

(2) Gruppieren nach Abfrage

#1. Zunächst einmal ist klar, dass die Gruppierung nach „Wo“ erfolgt, das heißt, die Gruppierung basiert auf den Datensätzen, die nach „Wo“ abgerufen wurden.

#2. Gruppieren bedeutet: Kategorisieren aller Datensätze nach einem gemeinsamen Feld, z. B. Gruppieren nach Position in der Mitarbeiterinformationstabelle oder Gruppieren nach Geschlecht usw.

#3. Warum müssen wir gruppieren?
Nehmen Sie das höchste Gehalt in jeder Abteilung
Ermitteln Sie die Anzahl der Mitarbeiter in jeder Abteilung
Nehmen Sie die Anzahl der Männer und die Anzahl der Frauen

Tipp: Das Feld nach dem Wort „jeweils“ ist die Grundlage für unsere Gruppierung

#4. Hauptprämisse:

Sie können nach jedem beliebigen Feld gruppieren, aber nach der Gruppierung, z. B. nach Post, können Sie nur das Post-Feld anzeigen. Wenn Sie die Informationen innerhalb der Gruppe anzeigen möchten, müssen Sie die Aggregatfunktion verwenden

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
min() findet den Minimalwert
avg() ermittelt den Durchschnittswert
Summe()
count(), um die Gesamtzahl zu finden

#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

#! ! ! Ausführungspriorität von hoch nach niedrig: wobei > gruppieren nach > haben
#1. „Where“ steht vor „group by“, daher kann jedes Feld in „Where“ eingeschlossen werden, Aggregatfunktionen können jedoch nicht verwendet werden.

#2. Having tritt nach group by auf, sodass die gruppierten Felder in Having verwendet werden können und andere Felder nicht direkt abgerufen werden können. Aggregatfunktionen können verwendet werden

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
2. Abfrage der Berufsbezeichnungen und Durchschnittsgehälter aller Positionen mit einem Durchschnittsgehalt über 10.000
3. Abfrage der Berufsbezeichnungen und Durchschnittsgehälter aller Positionen, deren Durchschnittsgehalt größer als 10.000 und kleiner als 20.000 ist

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:
  • SQL-Aggregation, Gruppierung und Sortierung

<<:  Vue implementiert ein Suchfeld mit einer Lupe

>>:  Detaillierte Erläuterung zur Konfiguration des Beispielcodes für den Nginx-Webserver

Artikel empfehlen

Lösung für das Textüberlaufproblem auf CSS-Flex-Basis

Die unbedeutende flex-basis hat bei der kleinen F...

So erstellen Sie ein responsives Säulendiagramm mit dem CSS-Rasterlayout

Ich spiele jetzt schon eine Weile mit Diagrammen ...

Eine kurze Diskussion über die Berechnungsmethode von key_len in MySQL erklären

Mit dem MySQL-Befehl „explain“ können Sie die Lei...

Hinweise zum erweiterten Zeichengerätetreiber des Linux-Kernel-Gerätetreibers

/****************** * Erweiterter Zeichengerätetr...

RHCE installiert Apache und greift mit einem Browser auf IP zu

1. at ist so konfiguriert, dass nach 5 Stunden „D...

Wissen zur Suchmaschinenoptimierung, auf das Sie beim Webdesign achten sollten

1. Linklayout der neuen Site-Startseite 1. Die Pos...

So verwenden Sie Linux-Befehle in IDEA

Im Vergleich zum Windows-System bietet das Linux-...

Zusammenfassung der zwölf Methoden der Vue-Wertübertragung

Inhaltsverzeichnis 1. Vom Vater zum Sohn 2. Vom S...

Drei Strategien zum Umschreiben von MySQL-Abfrageanweisungen

Inhaltsverzeichnis Komplexe Abfrage und schrittwe...

So testen Sie die maximale Anzahl von TCP-Verbindungen in Linux

Vorwort Es besteht ein Missverständnis bezüglich ...