Inhaltsverzeichnis
Was ist CTE?
Grundlegende Syntax von CTE
Der Unterschied zwischen CTE und Unterabfrage
Verwenden Sie rekursive CTE, um hierarchische Daten zu verarbeiten
Praktische Anwendungsvorschläge
Heim Datenbank MySQL-Tutorial Verwenden von gemeinsamen Tabellenausdrücken (CTEs) in MySQL 8

Verwenden von gemeinsamen Tabellenausdrücken (CTEs) in MySQL 8

Jul 12, 2025 am 02:23 AM
mysql CTE

CTEs sind eine von MySQL 8.0 eingeführte Funktion, um die Lesbarkeit und Wartung komplexer Abfragen zu verbessern. 1. CTE ist ein temporäres Ergebnissatz, das nur in der aktuellen Abfrage gültig ist, eine klare Struktur hat und doppelte Referenzen unterstützt. 2. Im Vergleich zu Unterabfragen ist CTE lesbarer, wiederverwendbar und unterstützt die Rekursion; 3. Rekursives CTE kann hierarchische Daten verarbeiten, wie z. B. Organisationsstruktur, die anfängliche Abfrage- und Rekursionsteile enthalten müssen. V.

Verwenden von gemeinsamen Tabellenausdrücken (CTEs) in MySQL 8

CTES (Common Table Expressions) ist eine sehr praktische Funktion, die von MySQL 8.0 eingeführt wird. Es macht komplexe Fragen klarer und lesbarer. Wenn Sie SQL mit verschachtelten Unterabfragen oder mehrschichtigen Tabellen geschrieben haben, werden Sie feststellen, dass die Struktur nach der Verwendung von CTE erfrischend und leichter zu pflegen ist.

Verwenden von gemeinsamen Tabellenausdrücken (CTEs) in MySQL 8

Was ist CTE?

CTE ist ein temporäres Ergebnissatz, das Sie in einer Abfrage definieren und in nachfolgenden Abfragen wie der Verwendung einer normalen Tabelle verweisen können. Es existiert nur während der aktuellen Abfrageausführung und wird nicht in die Datenbank bestehen.

Verwenden von gemeinsamen Tabellenausdrücken (CTEs) in MySQL 8

Lassen Sie uns ein einfaches Beispiel geben: Sie möchten die Mitarbeiter mit dem höchsten Gehalt in jeder Abteilung herausfinden. Wenn Sie CTE nicht verwenden, müssen Sie möglicherweise mehrere Unterabfragen schreiben, um sie zu nisten, die logisch umgangen sind. Wenn Sie CTE verwenden, können Sie zunächst das "Maximalgehalt für jede Abteilung" als Zwischenergebnis verwenden und dann die Mitarbeitertabelle verknüpfen, um die Daten zu filtern.

 Mit Maxsalarien als ((
    Wählen Sie Department_id, Max (Gehalt) als max_salary aus
    Von Mitarbeitern
    Gruppe von Department_id
)
Wählen Sie e.*
Von Mitarbeitern e
Schließen Sie sich Maxsalaries MS an
Auf e.department_id = ms.department_id und e.Salary = ms.max_salary;

Sieht das intuitiver aus? Und Sie können auch mehrere CTEs in einer Abfrage definieren und sie in Kombination auf Bedarf verwenden.

Verwenden von gemeinsamen Tabellenausdrücken (CTEs) in MySQL 8

Grundlegende Syntax von CTE

Die Struktur von CTE ist sehr klar, beginnend WITH dem Namen, den Sie diesem temporären Ergebnissatz gegeben haben, gefolgt von der Abfrageanweisung in Klammern. Danach können Sie diesen Namen wiederholt in diesem Abfragebereich verwenden.

Das Format lautet wie folgt:

 Mit cte_name [(column_list)] als ((
    - Abfrageanweisung)
- Die Hauptabfrage, die CTE in der nachfolgenden Verwendung verwendet

Ein paar Notizen:

  • CTE kann Spaltennamen haben, und wenn nicht angegeben, wird sie standardmäßig automatisch aus der Abfrage abgerufen.
  • Wenn es mehrere CTEs gibt, können sie durch Kommas getrennt und nacheinander definiert werden.
  • CTE ist nur in der aktuellen Abfrage gültig und kann nicht über Abfragen hinweg wiederverwendet werden.

Der Unterschied zwischen CTE und Unterabfrage

Viele Menschen werden sich fragen: Was ist der Unterschied zwischen CTE und Sub-Show? Tatsächlich sind sie in der Funktionalität sehr ähnlich, aber CTE hat mehr Vorteile bei der Lesbarkeit und Wiederverwendbarkeit.

Vergleichselemente Unterabfrage CTE
Strukturelle Klarheit Schwer zu lesen, wenn man tief verschachtelt ist Leichter zu teilen und zu verstehen
Wiederverwendet Unbequem, müssen kopieren und einfügen Kann mehrmals zitiert werden
Rekursive Unterstützung Nicht unterstützt Unterstützung rekursiver CTE (später erörtert werden)

Wenn Sie beispielsweise an mehreren Orten "Selling für einen bestimmten Monat verkaufen" verwenden möchten, müssen Sie sie mehrmals mit Unterabfragen schreiben, und Sie können es mehrmals mit CTE anrufen, solange Sie es einmal definieren.


Verwenden Sie rekursive CTE, um hierarchische Daten zu verarbeiten

MySQL 8.0 unterstützt auch rekursive CTE , das sehr geeignet ist, Baumstrukturen oder hierarchische Daten wie organisatorische Strukturen, Klassifizierungsverzeichnisse, Kommentare Antwortketten usw.

Angenommen, Sie haben eine employees , die die Mitarbeiter -ID und die Superior Manager -ID enthält. Wenn Sie alle Untergebenen unter einem bestimmten Führer finden möchten, ist der rekursive CTE nützlich.

Der Beispielcode lautet wie folgt:

 Mit rekursiven Untergebenen als (
    Wählen Sie Mitarbeiter_ID, Manager_ID, Name
    Von Mitarbeitern
    Wobei Manager_id = 100 - Anfangsbedingung: Finden Sie die direkte untergeordnete Gewerkschaft alle

    Wählen Sie e.aMployee_id, e.manager_id, e.name
    Von Mitarbeitern e
    Innere Join -Untergebene s auf e.Manager_id = S.Meoree_ID
)
Aus Subordinaten auswählen;

Dieser Code wählt zunächst direkte Untergebene aus und findet dann ständig rekursiv Untergebene dieser Personen, bis keine Datensätze mehr vorhanden sind. Der Kern des rekursiven CTE beträgt zwei Teile:

  • Erste Abfrage (nicht rekursives Teil)
  • Rekursiver Teil, über UNION ALL verbunden

Es ist zu beachten, dass die Rekursion nicht auf unbestimmte Zeit fortgesetzt werden kann, andernfalls wird ein Fehler gemeldet. Sie können die maximale Rekursionstiefe steuern, indem Sie cte_max_recursion_depth einstellen.


Praktische Anwendungsvorschläge

CTE ist leistungsstark, aber es gibt einige Tipps und Vorsichtsmaßnahmen bei der Verwendung:

  • Missbrauche CTE nicht : Nicht alle Szenarien sind für die Verwendung von CTE geeignet. Es besteht keine Notwendigkeit, es in einfachen Abfragen in CTE aufzuteilen, was die Komplexität erhöht.
  • Benennungsspezifikation : Geben Sie dem CTE einen aussagekräftigen Namen wie TopCustomers oder RecentOrders an, um anderen zu helfen, Ihre Logik zu verstehen.
  • Leistungsprobleme : CTE verbessert die Leistung nicht unbedingt, sondern ist eher ein logisches Paket. Wenn Sie auf Leistung empfindlich sind, analysieren Sie sie am besten in Kombination mit Index- und Ausführungsplan.
  • Debugging -Methode : Möchten Sie die Zwischenergebnisse von CTE sehen? Sie können CTE direkt schreiben SELECT * FROM cte_name um ein einfaches Debuggen zu erzielen.

Grundsätzlich ist das. CTE ist ein sehr praktischer Teil des modernen SQL, insbesondere beim Schreiben komplexer Abfragen, die Ihnen helfen können, Ihre Ideen zu klären und die Lesbarkeit zu verbessern. Sie werden vielleicht zunächst nicht daran gewöhnt, aber wenn Sie angefangen haben, werden Sie feststellen, dass die Erfahrung des Schreibens von SQL wirklich anders ist.

Das obige ist der detaillierte Inhalt vonVerwenden von gemeinsamen Tabellenausdrücken (CTEs) in MySQL 8. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

PHP-Tutorial
1545
276
Best Practices für die Verwaltung großer MySQL -Tische Best Practices für die Verwaltung großer MySQL -Tische Aug 05, 2025 am 03:55 AM

MySQL Performance und Wartbarkeit stehen vor Herausforderungen mit großen Tabellen, und es ist notwendig, von der Strukturdesign, der Indexoptimierung, der Tabellen-Untertisch-Strategie usw. zu beginnen. 1. Ausgestaltet Primärschlüssel und -indizes: Es wird empfohlen, Selbstverlustzahlen als Primärschlüssel zu verwenden, um Seitenspaltungen zu reduzieren. Verwenden Sie Overlay -Indizes, um die Effizienz der Abfrage zu verbessern. Analysieren Sie regelmäßig langsame Abfrageprotokolle und löschen Sie ungültige Indizes. 2. Rationaler Nutzung von Partitionstabellen: Partition nach Zeitbereich und anderen Strategien zur Verbesserung der Abfrage- und Wartungseffizienz, aber der Aufteilung und dem Abschneiden von Problemen sollte die Aufmerksamkeit geschenkt werden. 3.. Überlegen Sie, wie Sie Lesen und Schreiben von Trennung und Bibliothekstrennung erwägen: Lesen und Schreiben von Trennung lindern den Druck auf die Hauptbibliothek. Die Bibliothekstrennung und die Tabellentrennung eignen sich für Szenarien mit einer großen Datenmenge. Es wird empfohlen, Middleware zu verwenden und Transaktions- und Cross-Store-Abfrageprobleme zu bewerten. Frühe Planung und kontinuierliche Optimierung sind der Schlüssel.

Wie kann ich Überprüfungsbeschränkungen verwenden, um Datenregeln in MySQL durchzusetzen? Wie kann ich Überprüfungsbeschränkungen verwenden, um Datenregeln in MySQL durchzusetzen? Aug 06, 2025 pm 04:49 PM

MySQL unterstützt die Einschränkungen der Domänenintegrität, die aus Version 8.0.16 wirksam sind. 1. Hinzufügen von Einschränkungen beim Erstellen einer Tabelle: Verwenden Sie CreateTable, um die Kontrollbedingungen wie das Alter ≥ 18, Gehalt> 0, Grenzwerte der Abteilung zu definieren. 2. Ändern Sie die Tabelle, um Einschränkungen hinzuzufügen: Verwenden Sie AlterTableLeaddConstraint, um die Feldwerte zu begrenzen, z. B. nicht leer; 3.. Verwenden Sie komplexe Bedingungen: Unterstützen Sie die Multi-Säulen-Logik und -ausdrücke, z. B. Enddatum ≥ Start-Datum und Abschlussstatus müssen ein Enddatum haben. 4. Einschränkungen löschen: Verwenden Sie die zum Löschen von Namen angeben Sie den Namen angeben. 5. Anmerkungen: MySQL8.0.16, InnoDB oder MyiSam müssen zitiert werden

Wie implementieren Sie ein Tagging -System in einer MySQL -Datenbank? Wie implementieren Sie ein Tagging -System in einer MySQL -Datenbank? Aug 05, 2025 am 05:41 AM

Useeamany-to-manyrelationship withajunctionTabletolinkiTemSandTagsviathreetables: Elemente, Tags und ITEM_TAGS.2.WhenaddingTags, CheckforexistingTagSinthetagStable, Insertifnitary.

So zeigen Sie alle Datenbanken in MySQL So zeigen Sie alle Datenbanken in MySQL Aug 08, 2025 am 09:50 AM

Um alle Datenbanken in MySQL anzuzeigen, müssen Sie den Befehl showDatabases verwenden. 1. Nachdem Sie sich auf dem MySQL -Server angemeldet haben, können Sie die ShowDatabasen ausführen. Befehl zur Auflistung aller Datenbanken, auf die der aktuelle Benutzer zugegriffen hat. 2. Systemdatenbanken wie Information_Schema, MySQL, Performance_schema und System existieren standardmäßig, Benutzer mit unzureichenden Berechtigungen können sie möglicherweise nicht sehen; 3.. Sie können die Datenbank auch durch selectSchema_nameFrominFormation_schema.schemata abfragen und filtern. Beispielsweise ohne die Systemdatenbank, um nur die von den Benutzern erstellte Datenbank anzuzeigen; Stellen Sie sicher

Wie kann ich gemeinsame MySQL -Verbindungsfehler beheben? Wie kann ich gemeinsame MySQL -Verbindungsfehler beheben? Aug 08, 2025 am 06:44 AM

Überprüfen Sie, ob der MySQL -Dienst ausgeführt wird. Verwenden Sie SudosystemctlstatUSmysql, um zu bestätigen und zu starten. 2. Stellen Sie sicher, dass die Bindungsadresse auf 0,0,0,0 eingestellt ist, um Remote-Verbindungen zu ermöglichen und den Dienst neu zu starten. 3. Überprüfen Sie, ob der 3306 -Port geöffnet ist, und konfigurieren Sie die Firewall -Regeln, um den Port zuzulassen. 4. Für den Fehler "AccessDenied" müssen Sie den Benutzernamen, den Kennwort und den Hostnamen überprüfen und sich dann bei MySQL anmelden und die Tabelle mySQL.User abfragen, um die Berechtigungen zu bestätigen. Erstellen oder aktualisieren Sie den Benutzer bei Bedarf und autorisieren Sie ihn, z. B. "Your_User"@'%". 5. Wenn die Authentifizierung aufgrund von caching_sha2_password verloren geht

Wie füge ich einer vorhandenen Tabelle in MySQL einen Primärschlüssel hinzu? Wie füge ich einer vorhandenen Tabelle in MySQL einen Primärschlüssel hinzu? Aug 12, 2025 am 04:11 AM

Um einer vorhandenen Tabelle einen Primärschlüssel hinzuzufügen, verwenden Sie die altertable Anweisung mit der AddPrimaryKey -Klausel. 1. Stellen Sie sicher, dass die Zielspalte keinen Nullwert, keine Duplikation hat und als Notnull definiert ist. 2. Die einspaltige Primärschlüsselsyntax ist ein altertierbarer Tabellenname AddPrimaryKey (Spaltenname); 3. Die Multi-Säulen-Kombination der Primärschlüsselsyntax ist der Namen AddPrimaryKey (Spalte 1, Spalte 2); 4. Wenn die Spalte NULL erlaubt, müssen Sie zuerst Änderungen ausführen, um Notnull zu setzen. 5. Jede Tabelle kann nur einen Primärschlüssel haben und der alte Primärschlüssel muss vor dem Hinzufügen gelöscht werden. 6. Wenn Sie es selbst erhöhen müssen, können Sie Modify verwenden, um auto_increment festzulegen. Stellen Sie vor dem Betrieb Daten sicher

Was ist der Unterschied zwischen Kürzung, Löschen und Tropfen in MySQL? Was ist der Unterschied zwischen Kürzung, Löschen und Tropfen in MySQL? Aug 05, 2025 am 09:39 AM

DeleterEmovesspezifikorallrows, KeepStablestructure, erlaubtRollbackAndtriggers und doesnotresetauto-Inkremente; 2.Truncatequicklyremovesallrows, ResetsAuto-Increment, kann nicht berberollt, die Mostcasen, die Notfiriggers und Keepstructure;

So sichern Sie eine Datenbank in MySQL So sichern Sie eine Datenbank in MySQL Aug 11, 2025 am 10:40 AM

Die Verwendung von MySQldump ist der häufigste und effektivste Weg, um MySQL -Datenbanken zu sichern. Es kann SQL -Skripte generieren, die Tabellenstruktur und Daten enthalten. 1. Die grundlegende Syntax ist: Mysqldump-U [Benutzername] -P [Datenbankname]> backup_file.sql. Geben Sie nach der Ausführung das Passwort ein, um eine Sicherungsdatei zu generieren. 2. Sicherung mehrere Datenbanken mit-Databasen Option: Mysqldump-uroot-p-databaseSdb1db2> multiple_dbs_backup.sql. 3.. BACKE ALLE Datenbanken mit-alle Daten: Mysqldump-uroot-P

See all articles