Einige etwas komplexere Verwendungsbeispielcodes in MySQL

Einige etwas komplexere Verwendungsbeispielcodes in MySQL

Vorwort

Ich glaube, dass die Syntax von MySQL nicht für jeden schwierig ist, aber dieser Artikel enthält hauptsächlich einige verwandte Inhalte zur komplexen Verwendung von MySQL. Ich glaube, dass dieser Artikel jedem ein tieferes Verständnis von MySQL vermitteln wird. Schauen wir uns gemeinsam die ausführliche Einführung an.

Eins-zu-viele-Daten werden in einer Zeile angezeigt

GROUP_CONCAT(Ausdruck)

1. Beteiligte Tabellenbeziehungen: Lehrertabelle, Lehrer_Fach_rel-Tabelle (Tabelle der Fächer, die Lehrer unterrichten können), Fachtabelle
2. Geschäftsszenario: Sie müssen alle Lehrernummern (teacher_no) und Fachnamen (subject_name) abrufen. &nbsp Zwischen der Lehrertabelle (teacher) und dem Fach (teacher_subject_rel) besteht eine Eins-zu-viele-Beziehung, und in einer Abfrage erscheinen häufig mehrere Datensätze desselben Lehrers. Wir hoffen, für jeden Lehrer einen Datenpunkt zu erhalten und ihn zu einem

1. Grundlegende Grammatik

group_concat( [DISTINCT] Zu verbindende Felder [Order BY Sortierung der Felder ASC/DESC] [Trennzeichen 'Trennzeichen'] )

2. Beispiel

WÄHLEN
 t.teacher_id als „Lehrer-ID“,
 t.teacher_no 'Lehrernummer',
 (
 WÄHLEN
  GROUP_CONCAT(s.Betreffname)
 AUS
  Lehrerfach tsr
 LEFT JOIN `Betreff` s ON tsr.subject_id = s.subject_id
 WO
  t.lehrer_id = tsr.lehrer_id
) als „Betreff“
AUS
 Lehrer 

Unterabfrage, Abfrage temporärer Tabelle, EXISTS

Beispiel

WÄHLEN
 *
AUS
 (
  WÄHLEN
   o.id,
   o.student_intention_id,
   s.NAME,
   s.Bereichs-ID,
   a.Bereichsname,
   s.Prüfungsjahr,
   o.STATUS,
   FALL oder STATUS
  WENN '1' DANN
   „Ausstehende Einreichung“
  WENN '2' DANN
   „Wird noch zugewiesen“
  WENN '3' DANN
   'Vollendet'
  WENN '4' DANN
   'Verarbeitung'
  ENDE statusName,
  FALL o.Notfallgrad
 WENN '1' DANN
  'Normal'
 WENN '2' DANN
  'dringend'
 WENN '3' DANN
  'Dringend'
 ENDE Notfall-Abschlussname,
 o.Notfallgrad,
 o.Aktualisierungszeit,
 (
  WÄHLEN
   erste_Unterrichtsstunde
  AUS
   jx_strategie
  WO
   jx_lesson_plan_order_id = o.id
  UND STATUS IN (2, 7)
  UND erste_Unterrichtszeit > jetzt()
  BESTELLEN BIS
   erste_Unterrichtsstunde ASC
  GRENZE 1
 ) AS erstes_mal,
 (
  WÄHLEN
   deal_benutzer_id
  AUS
   jx_strategie
  WO
   jx_lesson_plan_order_id = o.id
  UND STATUS <> 7
  UND deal_user_id <> 0
  BESTELLEN BIS
   ID DESC
  GRENZE 1
 ) AS deal_user_id
AUS
 jx_Unterrichtsplan_Bestellung
LEFT JOIN Student s ON s.student_intention_id = o.student_intention_id
LEFT JOIN Bereich a ON s.area_id = a.id
WO
 o.STATUS <> 1
UND s.phone = '18501665888'
UND o.Notfallgrad = 1
UND o.STATUS = 2
UND s.Prüfungsjahr = '2015'
UND o.update_time >= '2018-08-14 20:28:55'
UND o.update_time <= '2018-08-14 20:28:55'
 ) Als
WO
 1 = 1
UND a.deal_user_id = 145316
UND a.first_time >= '2018-08-17 00:00:00'
UND a.first_time <= '2018-08-30 00:00:00'
UND EXISTIERT (
 WÄHLEN
  *
 AUS
  jx_strategie js
 WO
  js.jx_lesson_plan_order_id = eine.id
 UND js.STATUS IN (2, 7)
 UND js.subject_id IN (2, 3)
)
BESTELLEN BIS
 a.update_time DESC
GRENZE 0,
 10

update Zugehörige Variable bedingte Änderung

1. Beteiligte Tabellenbeziehungen: id_number (ID-Nummer) in der Tabelle user_info, Feld „Geburt“ in der Tabelle teacher und die Assoziationsbeziehung user_id = teacher_id
2. Geschäftsszenario: Holen Sie sich das Geburtsdatum auf dem Personalausweis des Benutzers und aktualisieren Sie das Geburtsdatum im Geburtsfeld

UPDATE Lehrer t INNER JOIN (

SELECT t.teacher_id, t.birth, u.id_number, CONCAT(SUBSTRING(u.id_number, 7, 4), '-', SUBSTRING(u.id_number, 11, 2), '-', SUBSTRING(u.id_number, 13, 2)) als Geburt1, u.reg_date, t.exit_time von Lehrer t
INNER JOIN user_info u ON u.user_id = t.teacher_id

) Info zu info.teacher_id = t.teacher_id
SET t.Geburt = info.Geburt1
WHERE info.reg_date > '2018-08-20 00:00:00' und info.id_number ist nicht NULL und (info.birth ist NULL oder t.birth = '') und t.is_train = 1

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Einige Optimierungen, die MySQL in komplexen Assoziationssituationen vornehmen kann
  • Mysql, einige komplexe SQL-Anweisungen (Abfragen und Löschen doppelter Zeilen)
  • Detaillierte Analyse der MySQL-Syntax „ON DUPLICATE KEY UPDATE“
  • Die grundlegendsten SQL-Syntax/Anweisungen von MySQL
  • Detaillierter Vergleich der Syntaxunterschiede zwischen MySQL und Oracle
  • Eine kurze Analyse der Mysql Join-Syntax und Leistungsoptimierung
  • So verwenden Sie die MySQL ALTER-Syntax
  • SQL-Syntax für MySQL-Prepare-Anweisung
  • Erweiterte MySQL-SELECT-Syntax
  • MySQL SQL-Syntaxreferenz

<<:  Das Vue-Cropper-Plugin realisiert die Kapselung der Bildaufnahme- und Upload-Komponente

>>:  Docker schließt die Implementierung des FTP-Dienstaufbaus mit einer Befehlszeile ab

Artikel empfehlen

3 häufige Fehler beim Lesen von MySQL Binlog-Protokollen

1. mysqlbinlog: [FEHLER] unbekannte Variable „def...

Docker-Cross-Server-Kommunikations-Overlay-Lösung (Teil 1) Consul-Einzelinstanz

Inhaltsverzeichnis Szenario Aufgabe Idee analysie...

Detaillierte Erläuterung der Verwaltung und Verwendung von Docker Secrets

1. Was ist Docker Secret 1. Szenariodarstellung W...

Detaillierte Konfiguration des mysql8.x-Docker-Remotezugriffs

Inhaltsverzeichnis Umweltbedingungen Aufgetretene...

JS removeAttribute()-Methode zum Löschen eines Attributs eines Elements

Verwenden Sie in JavaScript die Methode removeAtt...

Vues Render-Funktion

Inhaltsverzeichnis 1. Knoten, Bäume und virtuelle...

Detaillierte Erläuterung der Wissenspunkte zu Linux-Dateivorgängen

Verwandte Systemaufrufe für Dateioperationen erst...

CSS-Beispielcode mit Suchnavigationsleiste

Dieser Artikel zeigt Ihnen, wie Sie mit CSS eine ...