Die umfassendsten 50 Mysql-Datenbankabfrageübungen

Die umfassendsten 50 Mysql-Datenbankabfrageübungen

Diese Datenbankabfrageanweisung ist eine von 50 Datenbankabfrage-Übungsfragen im Internet. Einige Versionen im Internet sind in Oracle-Anweisungen geschrieben. Die meisten Unternehmen verwenden immer noch die kostenlose MySQL-Datenbank. Im Folgenden sind alle MySQL-Versionen aufgeführt, die alle überprüft wurden.

Tabellenname und Felder

–1. Studentenliste
Student(s#, sname, sage, ssex) – Matrikelnummer, Name des Studenten, Geburtsdatum, Geschlecht des Studenten – 2. Stundenplan
Course(c#,cname,t#) – –Kursnummer, Kursname, Lehrernummer – 3.Lehrertabelle
Teacher(t#,tname) – Lehrernummer, Lehrername – 4. Notentabelle
Sc(s#,c#,score) – Matrikelnummer, Kursnummer, Punktzahl

Testdaten

Es ist sehr praktisch, Datenbankvisualisierungstools zum Durchführen von Übungen zu verwenden. Es wird empfohlen, sqlyog zu verwenden. Das Softwaresymbol ist ein Delphin.

Geben Sie die lokale Adresse, den Benutzernamen, das Passwort und den Port in die neue Verbindung ein, um eine direkte Verbindung zu MySQL herzustellen.

Alle Testdaten lauten wie folgt:

# --Testdaten in die Studententabelle einfügen INSERT INTO student VALUES('01', '赵雷', '1990-01-01', '男');
INSERT INTO student VALUES('02' , 'Studentenwert' , '1990-12-21' , 'Studentenwert');
INSERT INTO student VALUES('03', 'Student', '1990-05-20', 'Student');
INSERT INTO student VALUES('04' , '04' , '1990-08-06' , 'Student');
INSERT INTO student VALUES('05' , 'Student' , '1991-12-01' , 'Student');
INSERT INTO student VALUES('06' , 'Student' , '1992-03-01' , 'Student');
INSERT INTO student VALUES('07' , 'Student' , '1989-07-01' , 'Student');
INSERT INTO student VALUES('08' , 'Student' , '1990-01-20' , 'Student');
# --Kurstestdaten einfügen INSERT INTO course VALUES('01', 'Chinesisch', '02');
INSERT INTO Kurs VALUES('02', 'Mathematik', '01');
INSERT INTO Kurs VALUES('03', 'Englisch', '03');
 
# --Testdaten in die Lehrertabelle einfügen INSERT INTO teacher VALUES('01', '张三');
INSERT INTO teacher VALUES('02' , '02');
INSERT INTO teacher VALUES('03' , '03');
 
# --Testdaten in die Punktetabelle einfügen INSERT INTO sc VALUES('01', '01', 80);
INSERT INTO sc VALUES('01', '02', 90);
INSERT INTO sc VALUES('01', '03', 99);
INSERT INTO sc VALUES('02' , '01' , 70);
INSERT INTO sc VALUES('02' , '02' , 60);
INSERT INTO sc VALUES('02', '03', 80);
INSERT INTO sc VALUES('03', '01', 80);
INSERT INTO sc VALUES('03', '02', 80);
INSERT INTO sc VALUES('03', '03', 80);
INSERT INTO sc VALUES('04' , '01' , 50);
INSERT INTO sc VALUES('04' , '02' , 30);
INSERT INTO sc VALUES('04', '03', 20);
INSERT INTO sc VALUES('05' , '01' , 76);
INSERT INTO sc VALUES('05' , '02' , 87);
INSERT INTO sc VALUES('06' , '01' , 31);
INSERT INTO sc VALUES('06' , '03' , 34);
INSERT INTO sc VALUES('07' , '02' , 89);
INSERT INTO sc VALUES('07' , '03' , 98);

Abschließend gibt es noch 50 Datenbankabfrageübungen, welche geprüft wurden und in der MySQL-Version vorliegen.

1. Abfrage der Informationen und Kursnoten von Studierenden, deren Kurs „01“ eine höhere Punktzahl als „02“ hat

WÄHLEN SIE * AUS
  (SELECT `s#` AS sno1, `c#` AS cno1, score FROM sc WHERE `c#`=01) ein
    LINKS VERBINDEN
  (SELECT `s#` AS sno2, `c#` AS cno2, score FROM sc WHERE `c#`=02) b
    EIN a.sno1 = b.sno2
    WO a.score > b.score

1.1 Abfrage der Situation, in der sowohl Kurse vom Typ „01“ als auch „02“ vorhanden sind

WÄHLEN SIE * AUS
  (SELECT `s#` AS sno1, `c#` AS cno1, score FROM sc WHERE `c#`=01) ein
    LINKS VERBINDEN
  (SELECT `s#` AS sno2, `c#` AS cno2, score FROM sc WHERE `c#`=02) b
    EIN a.sno1 = b.sno2
    Wobei sno2 nicht NULL ist

1.2 Abfrage für den Fall, dass der Kurs „01“ existiert, der Kurs „02“ jedoch möglicherweise nicht existiert (wird als Null angezeigt, wenn er nicht existiert)

WÄHLEN SIE * AUS
  (SELECT `s#` AS sno1, `c#` AS cno1, score FROM sc WHERE `c#`=01) ein
    LINKS VERBINDEN
  (SELECT `s#` AS sno2, `c#` AS cno2, score FROM sc WHERE `c#`=02) b
    EIN a.sno1 = b.sno2

1.3 Abfrage der Situation, in der der Kurs "01" nicht existiert, der Kurs "02" jedoch existiert

WÄHLEN SIE * AUS
sc, wobei „c#“ = „02“ und „s#“ nicht in (SELECT „s#“ FROM sc, wobei „c#“ = „01“)

2. Abfrage der Matrikel-ID, des Namens und der Durchschnittsnote von Studenten, deren Durchschnittsnote größer oder gleich 60 Punkte ist

WÄHLEN Sie a.`s#`,b.`sname`, a.avg_score FROM 
  (SELECT `s#` ,AVG(score) AS avg_score FROM sc GROUP BY `s#`) AS ein
    LINKS BEITRETEN Schüler AS b
    EIN a.`s#` = b.`s#`
    Wobei a.avg_score >=60

3. Abfrage der Studierendeninformationen mit Noten in der SC-Tabelle

Wählen Sie * von Student aus, wobei „s#“ in (Wählen Sie DISTINCT „s#“ von sc)

4. Abfrage der Studenten-ID, des Namens, der Gesamtzahl der Kurse und der Gesamtpunktzahl aller Kurse für alle Studenten (wenn keine Punktzahl verfügbar ist, wird null angezeigt)

SELECT `s#` ,sname , Kursnummer , Punktesumme FROM 
  (SELECT `s#`, sname FROM student ) ALS
    LINKS VERBINDEN
  (SELECT `s#` AS sno ,COUNT(`c#`) AS course_num ,SUM(score) AS score_sum FROM sc GROUP BY sno) AS b
    EIN a.`s#` = b.sno

4.1 Studierendendaten mit Noten prüfen

# Bei der Auswahl in der äußersten Ebene können Sie keine Funktionen verwenden
# Wenn die beiden Tabellen nach dem Verbinden die gleichen Felder haben, muss select eines der Felder umbenennen

SELECT `s#` ,sname , Kursnummer , Punktesumme FROM 
  (SELECT `s#`, sname FROM student ) ALS
    LINKS VERBINDEN
  (SELECT `s#` AS sno, COUNT(`c#`) AS Kursnummer, SUM(Punktzahl) AS Punktesumme FROM sc GROUP BY sno) AS b
    EIN a.`s#` = b.sno
    Wobei course_num nicht NULL ist

5. Abfrage der Anzahl der Lehrer mit dem Nachnamen „Li“

SELECT COUNT(*) FROM Lehrer WHERE tname LIKE '%'

6. Abfrage der Informationen von Schülern, die den Kurs des Lehrers „Zhang San“ besucht haben

# Lehrer Zhang San ist Nr. 01 SELECT * FROM student WHERE `s#` IN 
  (SELECT `s#` FROM sc WHERE `c#` =
    (SELECT `c#` FROM Kurs WHERE `t#` = 
      (SELECT `t#` FROM teacher WHERE tname='Lehrer')))

# 7. Abfrage der Informationen von Studierenden, die nicht alle Kurse abgeschlossen haben

SELECT `s#`,COUNT(`c#`) AS Kursnummer FROM sc GROUP BY `s#`
HAVING Kursnummer < (SELECT COUNT(*) FROM Kurs)

# 8. Abfrage der Informationen von Studierenden, die mindestens einen Kurs in derselben Klasse haben wie der Studierende mit der Matrikelnummer „01“

Wählen Sie * aus Student, wo `s#` in 
  (SELECT DISTINCT `s#` FROM sc WHERE `c#` IN
    (Wählen Sie `c#` FROM sc WHERE `s#`=01))
  UND `s#` != 01

# 9. Abfrage der Informationen anderer Studenten, die denselben Kurs wie Student Nr. „01“ belegt haben

WÄHLEN SIE `s#` AUS 
  (AUSWÄHLEN * VON sc 
    LINKS VERBINDEN 
  (Wählen Sie `c#` AS cno FROM sc WHERE `s#` =01) a
    ON sc.`c#` = a.cno) AS b
GRUPPE NACH `s#`    
HAVING COUNT(b.`s#`) = (SELECT COUNT(`c#`) AS cno FROM sc WHERE `s#` =01)

# 10. Fragen Sie nach den Namen der Studenten, die keinen Kurs des Lehrers „Zhang San“ besucht haben.

# Zhang San ist 01
# 01 Lehrer unterrichtet Mathematik, C# ist 02
Wählen Sie * aus Student, wo `s#` nicht in 
  (SELECT DISTINCT `s#` FROM sc WHERE `c#` IN 
    (SELECT `c#` FROM Kurs WHERE `t#` IN 
      (SELECT `t#` FROM teacher WHERE tname = 'Lehrer')))

# 11. Abfrage der Matrikel-ID, des Namens und der Durchschnittsnote von Studenten, die zwei oder mehr Kurse nicht bestanden haben

Wählen Sie `s#`, sname, avg_score FROM 
  (SELECT `s#`, sname FROM student WHERE `s#` IN
    (WÄHLEN Sie a.`s#` AUS 
      (SELECT `s#`,COUNT(`c#`) AS num FROM sc WHERE Punktzahl <60 GROUP BY `s#`) ein
      WO num >= 2)) AS b
    LINKS VERBINDEN
  (SELECT `s#` AS sno, AVG(Punktzahl) AS avg_score FROM sc GROUP BY `s#`) AS c
    ON b.`s#` = c.sno

# 12. Rufen Sie die Studenteninformationen für den Kurs „01“ ab, dessen Punktzahl weniger als 60 beträgt, sortiert nach Punktzahl in absteigender Reihenfolge

WÄHLEN SIE `s#`, sname, Punktzahl FROM 
   Studentin AS
    LINKS VERBINDEN 
  (SELECT `s#` AS sno,`c#`,score FROM sc WHERE `c#`= 01 AND score <60 )b
    EIN a.`s#` = b.sno
  Wobei Punktzahl nicht NULL ist
  ORDER BY Punktzahl DESC

# 13. Anzeige der Noten und Durchschnittsnoten aller Kurse für alle Studierenden von hoch bis niedrig nach Durchschnittsnote

Wählen Sie `s#`, AVG(Punktzahl) AS avg_score FROM sc GROUP BY `s#` ORDER BY avg_score DESC

# 14. Abfrage der höchsten Punktzahl, der niedrigsten Punktzahl und der Durchschnittspunktzahl jedes Fachs:
# Anzeige im folgenden Format: Kurs-ID, Kursname, höchste Punktzahl, niedrigste Punktzahl, Durchschnittspunktzahl, Bestehensquote, mittlere Quote, gute Quote, sehr gute Quote
# Die Bestehensnote liegt bei >=60, die mittlere Note bei 70-80, die gute Note bei 80-90 und die ausgezeichnete Note bei >=90.
# Erfordert die Ausgabe der Kursnummer und der Anzahl der Wahlfächer. Die Abfrageergebnisse werden absteigend nach der Anzahl der Studierenden sortiert. Bei gleicher Anzahl der Studierenden werden sie aufsteigend nach der Kursnummer sortiert.

SELECT DISTINCT a.`c#`,cname,höchste Punktzahl,niedrigste Punktzahl,durchschnittliche Punktzahl,Bestehensquote,mittlere Quote,gute Quote,ausgezeichnete Quote FROM sc a
LEFT JOIN Kurs ON a.`c#`=Kurs.`c#`
LEFT JOIN (SELECT `c#`, MAX(score)höchste Punktzahl, MIN(score)niedrigste Punktzahl, AVG(score)durchschnittliche Punktzahl FROM sc GROUP BY `c#`)b ON a.`c#`=b.`c#`
LEFT JOIN (SELECT `c#`, ROUND( r1 /cnt * 100, 2 ) AS Erfolgsquote FROM
  (SELECT `c#`, (SUM(CASE WHEN score >=60 THEN 1 ELSE 0 END)*1.00) AS r1 , COUNT(*) AS cnt FROM sc GROUP BY `c#`) c1) c ON a.`c#`=c.`c#`
LEFT JOIN (SELECT `c#`, ROUND( r2 /cnt * 100, 2 ) AS mittlere Rate FROM
  (SELECT `c#`, (SUM(CASE WHEN Punktzahl >=70 UND Punktzahl <80 THEN 1 ELSE 0 END)*1.00) AS r2 , COUNT(*) AS cnt FROM sc GROUP BY `c#`) d1) d ON a.`c#`=d.`c#`  
LEFT JOIN (SELECT `c#`, ROUND( r3 /cnt * 100, 2 ) AS gut/gut-Rate FROM
  (SELECT `c#`, (SUM(CASE WHEN Punktzahl >=80 UND Punktzahl <90 THEN 1 ELSE 0 END)*1.00) AS r3 , COUNT(*) AS cnt FROM sc GROUP BY `c#`) e1) e ON a.`c#`=e.`c#`
LEFT JOIN (SELECT `c#`, ROUND( r4 /cnt * 100, 2 ) AS ausgezeichneter Preis FROM
  (SELECT `c#`, (SUM(CASE WHEN score >=90 THEN 1 ELSE 0 END)*1.00) AS r4 , COUNT(*) AS cnt FROM sc GROUP BY `c#`) f1) f ON a.`c#`=f.`c#`

# 15. Sortieren Sie nach den Punktzahlen in jedem Fach und zeigen Sie die Rangfolge an. Wenn die Punktzahl wiederholt wird, lassen Sie den Rang frei.

# Es gibt keine rank()-Funktion in mysql # Diese Methode behält die Rangfolge bei Wiederholung bei, so dass die endgültige Rangfolge mit der Anzahl der Personen übereinstimmt SELECT `s#`, `c#`, score, rank FROM
(SELECT `s#`, `c#`, Partitur,
@currank := WENN(@prevrank = Punktzahl, @currank, @incrank) ALS Rang, 
@incrank := @incrank + 1, 
@prevrank := Punktzahl
VON sc, (
WÄHLEN Sie @currank := 0, @prevrank := NULL, @incrank := 1
) 
ORDER BY Punktzahl DESC) s

# 15.1 Sortieren Sie nach den Punktzahlen der einzelnen Fächer und zeigen Sie die Rangfolge an. Führen Sie die Rangfolge zusammen, wenn die Punktzahl wiederholt wird

# Dies ist der Fall, wenn es doppelte Ränge gibt. Es wird nur ein Rang angezeigt, sodass die Anzahl der Ränge reduziert wird. SELECT `s#`, `c#`, score, 
FALL 
WENN @prevrank = Punktzahl, DANN @currank 
WENN @prevrank := Punktzahl DANN @currank := @currank + 1
END AS Rang
VON sc, 
(SELECT @currank := 0, @prevrank := NULL)
ORDER BY Punktzahl DESC

# 16. Fragen Sie die Gesamtpunktzahl der Schüler ab und ordnen Sie sie ein. Wenn die Gesamtpunktzahl wiederholt wird, lassen Sie die Rangfolge frei.

# Es ist nicht nötig, nach „from SELECT `s#`, sum_score, rank FROM“ einen Tabellenalias hinzuzufügen.
(SELECT `s#`, Summe_Punktzahl,
@currank := WENN(@prevrank = sum_score, @currank, @incrank) ALS Rang, 
@incrank := @incrank + 1, 
@prevrank := Summe_Punktzahl
AUS 
(SELECT `s#`, SUM(Punktzahl) AS Summe_Punktzahl FROM sc GROUP BY `s#`) c, 
(SELECT @currank := 0, @prevrank := NULL, @incrank := 1) 
ORDER BY Summe_Punktzahl DESC) s

# 16.1 Abfrage der Gesamtpunktzahl der Schüler und Einstufung der Schüler. Bei Wiederholung der Gesamtpunktzahl bleiben keine freien Plätze übrig.

WÄHLEN Sie c.*,
FALL 
WENN @prevrank = c.sum_score DANN @currank 
WENN @prevrank := c.sum_score DANN @currank := @currank + 1
END AS Rang
AUS 
(SELECT a.`s#`,a.sname,SUM(score) AS sum_score
VON (Student ALS a RECHTS JOIN sc ALS b AUF a.`s#` = b.`s#`) 
GROUP BY a.`s#` ) c , 
(SELECT @currank := 0 , @prevrank :=NULL ) d 
ORDER BY Summe_Punktzahl DESC

# 17. Zählen Sie die Anzahl der Schüler in jedem Punktebereich für jedes Fach: Kursnummer, Kursname, [100-85], [85-70], [70-60], [60-0] und Prozentsatz

WÄHLEN Sie a.`c#`, b.cname, 
  SUMME (FALL, WENN Punktzahl >=85 UND Punktzahl <=100, DANN 1, SONST 0, ENDE) '[100-85]',
  SUMME (FALL, WENN Punktzahl >=85 UND Punktzahl <=100, DANN 1, SONST 0, ENDE) * 1,00 / ANZAHL (*) ALS '[100-85]Prozent',
    SUMME (FALL, WENN Punktzahl < 85 UND Punktzahl >= 70, DANN 1, SONST 0, ENDE) '(85-70]',
    SUMME (FALL, WENN Punktzahl < 85 UND Punktzahl >= 70, DANN 1, SONST 0, ENDE) * 1,00 / ANZAHL (*) ALS '(85-70]Prozent',
    SUMME (FALL, WENN Punktzahl < 70 UND Punktzahl >= 60, DANN 1, SONST 0, ENDE) '(70-60]',
    SUMME (FALL, WENN Punktzahl < 70 UND Punktzahl >= 60, DANN 1, SONST 0, ENDE) * 1,00 / ANZAHL (*) ALS '(85-70] Prozent',
    SUMME (FALL, WENN Punktzahl < 60 UND Punktzahl >= 0, DANN 1, SONST 0, ENDE) '(60-0]',
    SUMME (FALL, WENN Punktzahl < 60 UND Punktzahl >= 0, DANN 1, SONST 0, ENDE) * 1,00 / ANZAHL (*) ALS '(85-70] Prozent',
    COUNT(*) AS zählt
VON sc a LINKS JOIN Kurs b AUF a.`c#` = b.`c#`
GRUPPE NACH `c#`

# 18. Abfrage der Aufzeichnungen der drei besten Schüler in jedem Fach

WÄHLEN SIE * VON sc a WO 
  (SELECT COUNT(*) FROM sc WHERE `c#`=a.`c#` AND Punktzahl>a.Punktzahl)<3 
  ORDER BY a.`c#`, a.score DESC;

# 19. Abfrage der Anzahl der Studierenden, die jeden Kurs gewählt haben

Wählen Sie `c#`, COUNT(`s#`) FROM 
(WÄHLEN Sie `s#`,`c#` AUS sc ORDER BY `c#`)a
GRUPPE NACH `c#` 

Wählen Sie a.`c#`, b.cname, COUNT(*) AS num FROM sc a LEFT JOIN Kurs b ON a.`c#` = b.`c#`
GROUP BY a.`c#`;

# 20. Finden Sie den Studentenausweis und den Namen der Studenten, die nur zwei Kurse belegen

WÄHLEN Sie a.`s#`, a.sname, cnt FROM 
Student
LINKS VERBINDEN 
(SELECT `s#`,COUNT(`c#`) AS cnt FROM sc GROUP BY `s#`) b
EIN a.`s#`=b.`s#`
Wobei cnt=2

# 21. Abfrage der Anzahl der Jungen und Mädchen

Wählen Sie ssex, COUNT(ssex) aus der Studentengruppe nach ssex

# 22. Fragen Sie die Informationen zu Studenten ab, deren Name das Wort "风" enthält.

Wählen Sie * aus Student, wo Schülername wie '%风%'

# 23. Fragen Sie die Liste der Studenten mit demselben Namen und Geschlecht ab und zählen Sie die Anzahl der Studenten mit demselben Namen

SELECT a.*,b.Anzahl der Personen mit gleichem Namen FROM Student a
LEFT JOIN (SELECT sname,ssex,COUNT(*) AS Anzahl der Personen mit dem gleichen Namen FROM student GROUP BY sname,ssex)b 
EIN a.sname=b.sname UND a.ssex=b.ssex
WO b. Anzahl der Personen mit gleichem Namen > 1

# 24. Abfrage der Liste der im Jahr 1990 geborenen Studenten

SELECT * FROM student WHERE YEAR(sage) = 1990

# 25. Fragen Sie die Durchschnittsnote jedes Kurses ab und sortieren Sie die Ergebnisse in absteigender Reihenfolge nach der Durchschnittsnote. Wenn die Durchschnittsnoten gleich sind, sortieren Sie sie in aufsteigender Reihenfolge nach der Kursnummer.

Wählen Sie `c#`, ROUND(AVG(Punktzahl),2) AS avg_score FROM sc GROUP BY `c#` ORDER BY `c#` ASC

# 26. Fragen Sie die Studenten-ID, den Namen und die Durchschnittsnote aller Studenten ab, deren Durchschnittsnote größer oder gleich 85 ist

Wählen Sie c.`s#`, sname, avg_score FROM
(Schüler c 
LINKS VERBINDEN
(Wählen Sie `s#`, avg_score FROM 
(SELECT `s#` ,ROUND(AVG(Punktzahl),2) AS avg_score FROM sc 
GROUP BY `s#` ORDER BY avg_score DESC)a 
WO Durchschnittsscore >=85) b
EIN c.`s#` =b.`s#`)
Wobei avg_score nicht NULL ist

# 27. Fragen Sie die Namen und Noten von Studenten ab, deren Kursname „Mathematik“ ist und deren Noten weniger als 60 betragen

WÄHLEN Sie a.`s#`,a.sname,b.math, b.score FROM
Student
LINKS VERBINDEN
(SELECT `s#`,`c#` AS math ,score FROM sc WHERE `c#` IN 
  (SELECT `c#` FROM course WHERE cname = 'Kurs')
  UND sc.score <60) b
EIN a.`s#`=b.`s#`
Wobei b.score nicht NULL ist

# 28. Fragen Sie die Kurse und Noten aller Studenten ab (es gibt Studenten, die keine Noten haben und keine Kurse gewählt haben)

WÄHLEN Sie a.`s#`,a.`sname`,a.`sage`,a.`ssex`,b.`c#`,b.score FROM 
Student a LEFT JOIN sc b ON a.`s#` = b.`s#`
LEFT JOIN Kurs c ON c.`c#` = b.`c#`

# 29. Abfrage des Namens, des Kursnamens und der Punktzahl eines Kurses mit einer Punktzahl über 70

WÄHLEN Sie a.`s#`,a.`sname`,a.`sage`,a.`ssex`,b.`c#`,b.score FROM 
Student 
LINKS VERBINDEN 
(SELECT `s#`, `c#`,score FROM sc WHERE score >70) b ON a.`s#`=b.`s#`
LINKS BEITRETEN Kurs c 
EIN c.`c#`=b.`c#`
Wobei Punktzahl nicht NULL ist

# 30. Überprüfen Sie, ob Kurse nicht bestanden wurden

Wählen Sie * von sc, wo Punktzahl < 60

# 31. Abfrage der Matrikel-ID und des Namens des Studenten, dessen Kursnummer 01 ist und dessen Kursnote über 80 Punkte liegt

WÄHLEN Sie a.`s#`, a.sname, b.score FROM 
  Student
    LINKS VERBINDEN
  (SELECT * FROM sc WHERE `c#`='01' AND score >= 80) b
    EIN a.`s#` = b.`s#`
  Wobei Punktzahl nicht NULL ist

# 32. Finden Sie die Anzahl der Studierenden in jedem Kurs

Wählen Sie `c#`, COUNT(`c#`) aus sc GROUP BY `c#`

# 33. Die Noten werden nicht wiederholt. Fragen Sie die Informationen des Schülers mit der besten Note unter den Schülern ab, die den Kurs des Lehrers „Zhang San“ gewählt haben, und ihre Noten

WÄHLEN Sie a.`s#`, a.`sname`, b.`c#`, b.max_score FROM
Student
LINKS VERBINDEN
(SELECT `s#` AS sid,`c#` ,MAX(Punktzahl) AS max_score FROM sc WHERE `c#` IN 
  (SELECT `c#` FROM Kurs WHERE `t#` IN 
    (SELECT `t#` FROM teacher WHERE tname = 'Lehrer'))) b
EIN a.`s#`=b.sid
Wobei max_score nicht NULL ist

# 34. Wenn es doppelte Punktzahlen gibt, fragen Sie die Informationen des Schülers mit der höchsten Punktzahl unter den Schülern ab, die den von Lehrer "Zhang San" unterrichteten Kurs gewählt haben, und ihre Punktzahlen

WÄHLEN SIE * AUS
(Wählen Sie dd.*,
FALL 
WENN @prevrank = dd.score DANN @currank 
WENN @prevrank := dd.score DANN @currank := @currank + 1
END AS Rang
 VON (AUSWÄHLEN a.*,b.score VON
Student 
LEFT JOIN sc b ON a.`s#` = b.`s#`
LEFT JOIN Kurs c ON b.`c#` = c.`c#`
LEFT JOIN Lehrer d ON c.`t#` = d.`t#` WHERE d.tname = 'Name' ) dd,(SELECT @currank := 0 , @prevrank :=NULL ) ff 
ORDER BY Punktzahl DESC) AS dddddddd
WO Rang = 1;

# 35. Abfrage der Studenten-ID, der Kurs-ID und der Studentenpunktzahl von Studenten mit der gleichen Punktzahl in verschiedenen Kursen

Wählen Sie DISTINCT a.`s#`, a.`c#`, a.score FROM sc AS a JOIN sc AS b 
WO a.`c#` != b.`c#` UND a.score = b.score UND a.`s#` != b.`s#`
ORDER BY a.`s#`, a.`c#`, a.score

# 36. Finden Sie die beiden besten Schüler mit den besten Noten in jedem Fach

# Diese Frage ist die gleiche wie Frage 18 SELECT * FROM sc a WHERE 
  (SELECT COUNT(*) FROM sc WHERE `c#`=a.`c#` AND Punktzahl>a.Punktzahl)<2 
  ORDER BY a.`c#`, a.score DESC;

# 37. Zählen Sie die Anzahl der Studenten, die jeden Kurs belegen (nur Kurse mit mehr als 5 Studenten werden gezählt)

# Erfordert die Ausgabe der Kursnummer und der Anzahl der Wahlfächer. Die Abfrageergebnisse werden absteigend nach der Anzahl der Studenten sortiert. Bei gleicher Anzahl der Studenten werden sie aufsteigend nach der Kursnummer sortiert. SELECT a.`c#`, COUNT(*) AS num FROM 
natürlich a LEFT JOIN sc b ON a.`c#` = b.`c#`
GRUPPE NACH a.`c#` MIT Num > 5
ORDER BY num,a.`c#`

# 38. Abrufen der Studentenausweise von Studenten, die mindestens zwei Kurse belegt haben

SELECT DISTINCT `s#`, COUNT(`c#`) AS num FROM sc GROUP BY `s#` HAVING num >= 2

# 39. Abfrage der Informationen von Studierenden, die alle Kurse belegt haben

WÄHLEN SIE * AUS 
  (SELECT `s#`,COUNT(*) AS num FROM sc GROUP BY `s#` ) b
  WHERE num = (SELECT COUNT(*) FROM Kurs)

# 40. Abfrage des Alters jedes Schülers, nur nach Jahr

SELECT *, YEAR(NOW()) - YEAR(sage) AS Alter FROM Student

# 41. Abfrage an Studenten, die diese Woche Geburtstag haben

WÄHLEN SIE * AUS
(AUSWÄHLEN *, WOCHE(sage), MONAT(sage), TAG(sage),
WOCHE(STR_TO_DATE(CONCAT_WS(',',JAHR(JETZT()),MONAT(sage),TAG(sage)),'%y,%m,%d')) AS w VON Student) a
WO w = WOCHE(JETZT())

# 42. Abfrage für Schüler, die nächste Woche Geburtstag haben

WÄHLEN SIE * AUS
(AUSWÄHLEN *, WOCHE(sage), MONAT(sage), TAG(sage), WOCHE(JETZT()),
WOCHE(STR_TO_DATE(CONCAT_WS(',',JAHR(JETZT()),MONAT(sage),TAG(sage)),'%y,%m,%d')) AS w VON Student) a
WO w + 2 = WOCHE(JETZT())

# 43. Abfrage von Schülern, die in diesem Monat Geburtstag haben

SELECT * , MONTH(sage),MONTH(NOW()) FROM student
WO MONAT(sage) = MONAT(JETZT())

# 44. Abfrage für Studenten, die nächsten Monat Geburtstag haben

SELECT * , MONTH(sage),MONTH(NOW()) FROM student
WO MONAT(sage) = MONAT(JETZT()) + 1

Dies ist das Ende dieses Artikels über die 50 umfassendsten Übungen zu MySQL-Datenbankabfragen. Weitere relevante Inhalte zu MySQL-Datenbankabfragen 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:
  • Mysql Sql-Anweisungsübungen (50 Fragen)

<<:  Implementierung der Konvertierung zwischen Unterstreichung und Camel Case in js (mehrere Methoden)

>>:  Analyse des Prinzips des Rabbitmq Heartbea-Herzschlagerkennungsmechanismus

Artikel empfehlen

Tutorial zur Bereitstellung und Installation von MySQL 8.0.18 unter Windows 7

1. Vorbereitende Schritte (Windows 7 + MySQL-8.0....

Beispielcode von Vue + Element UI zur Realisierung der Player-Funktion

Die Anzeige ohne Effektbild ist nur leeres Gerede...

Zusammenfassung der MySQL-Injection-Bypass-Filtertechniken

Schauen wir uns zunächst den GIF-Vorgang an: Fall...

Der beste Weg, ein JAR-Paketprojekt unter einem Centos7-Server zu starten

Vorwort Jeder weiß, wie man ein JAR-Paket unter L...

Detaillierte Erklärung zum Ein- und Aussteigen aus dem Docker-Container

1 Starten Sie den Docker-Dienst Zuerst müssen Sie...

MySQL-Trigger-Verwendungsszenarien und Methodenbeispiele

auslösen: Trigger-Verwendungsszenarien und entspr...

Detailliertes Tutorial zur Verwendung des Befehls xargs unter Linux

Hallo zusammen, ich bin Liang Xu. Sind Sie bei de...

Beispielcode für den Song-Fortschrittsbalken in Vue

Beachten Sie, dass dies kein von vue-cli erstellt...

Workerman schreibt den Beispielcode des MySQL-Verbindungspools

Zunächst müssen Sie verstehen, warum Sie Verbindu...

Detaillierte Erläuterung der MySQL-Remoteverbindungsberechtigung

1. Melden Sie sich bei der MySQL-Datenbank an mys...