Tabellenname und Felder –1. Studentenliste Testdaten--Tabelle erstellen --Studententabelle CREATE TABLE `Student`( `s_id` VARCHAR(20), `s_name` VARCHAR(20) NICHT NULL STANDARD '', `s_birth` VARCHAR(20) NICHT NULL STANDARD '', `s_sex` VARCHAR(10) NICHT NULL STANDARD '', PRIMÄRSCHLÜSSEL (`s_id`) ); --CREATE TABLE `Kurs`( `c_id` VARCHAR(20), `c_name` VARCHAR(20) NICHT NULL STANDARD '', `t_id` VARCHAR(20) NICHT NULL, PRIMÄRSCHLÜSSEL (`c_id`) ); --Lehrertabelle CREATE TABLE `Lehrer`( `t_id` VARCHAR(20), `t_name` VARCHAR(20) NICHT NULL STANDARD '', PRIMÄRSCHLÜSSEL(`t_id`) ); --Punktetabelle CREATE TABLE `Punkte`( `s_id` VARCHAR(20), `c_id` VARCHAR(20), `s_score` INT(3), PRIMÄRSCHLÜSSEL(`s_id`,`c_id`) ); --Testdaten in die Studententabelle einfügen. In die Studentenwerte einfügen ('01', '赵雷', '1990-01-01', '男'); in Student-Werte einfügen ('02', '02', '1990-12-21', '0'); in Student-Werte einfügen ('03', 'Student', '1990-05-20', 'Student'); in Student-Werte einfügen ('04', '04', '1990-08-06', '0'); in Student-Werte einfügen ('05', '05', '1991-12-01', 'Student'); in Student-Werte einfügen ('06', 'Studentenwert', '1992-03-01', 'Student'); in Student-Werte einfügen ('07', 'Student', '1989-07-01', 'Student'); in Student-Werte einfügen ('08', 'Student', '1990-01-20', 'Student'); --Kursplan-Testdaten in Kurswerte einfügen (,01‘, ,Chinesisch‘, ,02‘); in Kurswerte einfügen('02', 'Mathematik', '01'); in Kurswerte einfügen('03', 'Englisch', '03'); --In Lehrerwerte einfügen('01', '01'); in Lehrerwerte einfügen('02', '02'); in Lehrerwerte einfügen('03', '03'); --In Score-Werte einfügen('01', '01', 80); in Score-Werte einfügen('01', '02', 90); in Score-Werte einfügen('01', '03', 99); in Score-Werte einfügen('02', '01', 70); in Score-Werte einfügen('02', '02', 60); in Score-Werte einfügen('02', '03', 80); in Score-Werte einfügen('03', '01', 80); in Score-Werte einfügen('03', '02', 80); einfügen in Score-Werte('03', '03', 80); in Score-Werte einfügen('04', '01', 50); in Score-Werte einfügen('04', '02', 30); in Score-Werte einfügen('04', '03', 20); in Score-Werte einfügen('05', '01', 76); in Score-Werte einfügen('05', '02', 87); in Score-Werte einfügen('06', '01', 31); in Score-Werte einfügen('06', '03', 34); in Score-Werte einfügen('07', '02', 89); in Score-Werte einfügen('07', '03', 98); Die Tabellendaten lauten wie folgtSchülertabelle:
Punktestand Punktetabelle:
Kursplan
Lehrertisch:
-- Bereiten Sie die Bedingungen vor und entfernen Sie ONLY_FULL_GROUP_BY im SQL-Modus, sonst wird in diesem Fall ein Fehler gemeldet: - Ausdruck Nr. 1 der Auswahlliste ist nicht in der „Group By“-Klausel enthalten und enthält die nicht aggregierte Spalte „Userinfo“. -- Grund: – MySQL 5.7.5 und höher implementiert die Erkennung funktionaler Abhängigkeiten. Wenn der SQL-Modus only_full_group_by aktiviert ist (was standardmäßig der Fall ist), -- dann lehnt MySQL Abfragen ab, deren Auswahllisten, Bedingungen oder Sortierlisten auf unbenannte nicht aggregierte Spalten in der Gruppe verweisen, ohne von ihnen funktional abhängig zu sein. -- (Vor 5.7.5 hat MySQL keine Funktionsabhängigkeiten erkannt und only_full_group_by war standardmäßig nicht aktiviert. Eine Beschreibung des Verhaltens vor 5.7.5 finden Sie im MySQL 5.6-Referenzhandbuch.) -- Führen Sie den folgenden Befehl aus, um den Inhalt von sql_mode anzuzeigen. SITZUNGSVARIABLEN ANZEIGEN; GLOBALE VARIABLEN ANZEIGEN; wählen Sie @@sql_mode; -- Ändern Sie den globalen SQL-Modus = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'. setze Sitzungs-SQL-Modus = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; Übungen und SQL-- 1. Fragen Sie die Informationen und Kursergebnisse der Studenten ab, deren Ergebnisse im Kurs „01“ höher sind als die im Kurs „02“. Wählen Sie st.*,sc.s_score als „Chinesisch“, sc2.s_score als „Mathematik“. von Student St LEFT JOIN-Score sc bei sc.s_id=st.s_id und sc.c_id='01' LEFT JOIN-Score von sc2 für sc2.s_id=st.s_id und sc2.c_id='02' wobei sc.s_score>sc2.s_score -- 2. Fragen Sie die Informationen und Kursnoten von Studenten ab, deren Noten im Kurs „01“ niedriger sind als die im Kurs „02“. Wählen Sie st.*,sc.s_score „Chinesisch“,sc2.s_score „Mathematik“ aus dem Studenten-St. LEFT JOIN-Score sc bei sc.s_id=st.s_id und sc.c_id='01' LEFT JOIN-Score von sc2 für sc2.s_id=st.s_id und sc2.c_id='02' wobei sc.s_score<sc2.s_score - 3. Fragen Sie die Studenten-ID, den Namen und die Durchschnittspunktzahl von Studenten ab, deren Durchschnittspunktzahl größer oder gleich 60 Punkte ist. select st.s_id,st.s_name,ROUND(AVG(sc.s_score),2) cjScore from student st LEFT JOIN Punktzahl sc ON sc.s_id=st.s_id Gruppieren nach st.s_id mit AVG(sc.s_score)>=60 - 4. Abfrage der Matrikel-ID, des Namens und der Durchschnittsnote von Studenten mit einer Durchschnittsnote von weniger als 60 Punkten - (einschließlich derjenigen mit und derjenigen ohne Punkte) select st.s_id,st.s_name,(case when ROUND(AVG(sc.s_score),2) ist null, dann 0 sonst ROUND(AVG(sc.s_score)) end ) cjScore von Student st LEFT JOIN Punktzahl sc ON sc.s_id=st.s_id Gruppieren nach st.s_id mit AVG(sc.s_score)<60 oder AVG(sc.s_score) ist NULL -- 5. Abfrage der Studenten-ID, des Studentennamens, der Gesamtzahl der Kurse und der Gesamtpunktzahl aller Kurse aller Klassenkameraden select st.s_id,st.s_name,count(c.c_id),( case when SUM(sc.s_score) is null or sum(sc.s_score)="" then 0 else SUM(sc.s_score) end) from student st linker Join-Score sc auf sc.s_id =st.s_id Kurs c verlassen auf c.c_id=sc.c_id Gruppieren nach st.s_id -- 6. Abfrage der Anzahl der Lehrer mit dem Nachnamen „Li“ select t.t_name,count(t.t_id) from teacher t Gruppiere nach t.t_id mit t.t_name wie "李%"; -- 7. Abfrage der Informationen von Schülern, die bei Lehrer „Zhang San“ studiert haben. select st.* from student st LEFT JOIN Punktzahl sc ON sc.s_id=st.s_id Kurs c verlassen auf c.c_id=sc.c_id verließ Lehrer t am t.t_id=c.t_id wobei t.t_name="Zhang San" -- 8. Fragen Sie die Informationen von Schülern ab, die den Kurs des Lehrers „Zhang San“ nicht besucht haben -- Kurse des Lehrers Zhang San select c.* from course c left join teacher t on t.t_id=c.t_id where t.t_name="Zhang San" -- st.s_id mit den Klassennoten von Lehrer Zhang San wähle sc.s_id aus der Punktzahl sc, wobei sc.c_id in (wähle c.c_id aus dem Kurs c links, schließe dich Lehrer t an auf t.t_id=c.t_id, wobei t.t_name="张三") -- Die Studenteninformationen von st.s_id wurden oben nicht gefunden, d. h. die Studenteninformationen derjenigen, die den Unterricht von Lehrer Zhang San nicht besucht haben. select st.* from student st where st.s_id not in( wähle sc.s_id aus der Punktzahl sc, wobei sc.c_id in (wähle c.c_id aus dem Kurs c links, schließe dich Lehrer t an auf t.t_id=c.t_id, wobei t.t_name="张三") ) -- 9. Fragen Sie die Informationen der Studenten ab, die die Kurse mit den Nummern „01“ und „02“ studiert haben. select st.* from student st Innerer Join-Score sc auf sc.s_id = st.s_id innerer Join-Kurs c auf c.c_id=sc.c_id und c.c_id="01" wobei st.s_id in ( Wählen Sie st2.s_id aus Student st2 Innerer Join-Score von sc2 auf sc2.s_id = st2.s_id Innerer Join-Kurs c2 auf c2.c_id=sc2.c_id und c2.c_id="02" ) Von Internetnutzern bereitgestellte Ideen (großartig~): Wähle st.* VON Schüler st INNER JOIN score sc ON sc.`s_id`=st.`s_id` GRUPPE NACH st.`s_id` HABEN SUMME(WENN(sc.`c_id`="01" ODER sc.`c_id`="02" ,1,0))>1 -- 10. Fragen Sie die Informationen von Studenten ab, die den Kurs mit der Nummer „01“ studiert haben, aber nicht den Kurs mit der Nummer „02“ select st.* from student st Innerer Join-Score sc auf sc.s_id = st.s_id innerer Join-Kurs c auf c.c_id=sc.c_id und c.c_id="01" wobei st.s_id nicht in ( Wählen Sie st2.s_id aus Student st2 Innerer Join-Score von sc2 auf sc2.s_id = st2.s_id Innerer Join-Kurs c2 auf c2.c_id=sc2.c_id und c2.c_id="02" ) - 11. Fragen Sie die Informationen der Studenten ab, die nicht alle Kurse abgeschlossen haben. - Zu kompliziert. Versuchen Sie es das nächste Mal anders, um zu sehen, ob es eine einfachere Methode gibt. - Die Idee hier besteht darin, die ID der Studenten abzufragen, die alle Kurse abgeschlossen haben, und dann inline das Gegenteil zu erhalten. select * from student where s_id not in ( wähle st.s_id aus Studenten-St Innerer Join-Score sc bei sc.s_id = st.s_id und sc.c_id="01" wobei st.s_id in ( Wählen Sie st2.s_id aus Student st2 Innerer Join-Score von sc2 für sc2.s_id = st2.s_id und sc2.c_id="02" ) und st.s_id in ( Wählen Sie st2.s_id aus Student st2 Innerer Join-Score von sc2 für sc2.s_id = st2.s_id und sc2.c_id="03" )) - Die Idee stammt vom Internetnutzer im ersten Stock. Er schließt sich links an, gruppiert nach Studentenausweis und filtert die Ergebnisse heraus, deren Anzahl kleiner ist als die Gesamtzahl der Kurse in der Kurstabelle (zeigen Sie mir seinen Code), was viel einfacher ist. wähle st.* aus Student st links beitreten Punktzahl S auf st.s_id = S.s_id Gruppieren nach st.s_id mit Anzahl(c_id)<(Wählen Sie Anzahl(c_id) aus Kurs aus) -- 12. Abfrage der Informationen von Studierenden, die mindestens einen Kurs in derselben Klasse haben wie der Studierende mit der Matrikelnummer „01“ select distinct st.* from student st LEFT JOIN Punktzahl sc ON sc.s_id=st.s_id wobei sc.c_id in ( wähle sc2.c_id vom Studenten st2 LEFT JOIN-Score von sc2 auf sc2.s_id=st2.s_id wobei st2.s_id = '01' ) -- 13. Fragen Sie die Informationen anderer Studenten ab, die denselben Kurs wie Student Nr. 01 belegt haben. select st.* from student st LEFT JOIN Punktzahl sc ON sc.s_id=st.s_id Gruppieren nach st.s_id mit group_concat(sc.c_id) = ( wähle group_concat(sc2.c_id) aus Student st2 LEFT JOIN-Score von sc2 auf sc2.s_id=st2.s_id wobei st2.s_id = '01' ) -- 14. Fragen Sie die Namen der Studenten ab, die keinen Kurs des Lehrers „Zhang San“ besucht haben. Wählen Sie st.s_name aus dem Studentennamen aus. wobei st.s_id nicht in ( wähle sc.s_id aus Score sc Innerer Join-Kurs c auf c.c_id=sc.c_id Innerer Join Lehrer t auf t.t_id=c.t_id und t.t_name="Name" ) -- 15. Fragen Sie die Studenten-ID, den Namen und die Durchschnittsnote von Studenten ab, die zwei oder mehr Kurse nicht bestanden haben. select st.s_id,st.s_name,avg(sc.s_score) from student st LEFT JOIN Punktzahl sc ON sc.s_id=st.s_id wobei sc.s_id in ( wähle sc.s_id aus Score sc wobei sc.s_score<60 oder sc.s_score NULL ist Gruppieren nach sc.s_id mit COUNT(sc.s_id)>=2 ) Gruppieren nach st.s_id -- 16. Rufen Sie die Informationen zu den Studenten ab, deren Punktzahl im Kurs „01“ unter 60 liegt, sortiert nach Punktzahl in absteigender Reihenfolge. select st.*,sc.s_score from student st Innerer Join-Score sc bei sc.s_id=st.s_id und sc.c_id="01" und sc.s_score<60 Sortieren nach sc.s_score desc -- 17. Zeigen Sie die Noten und Durchschnittsnoten aller Kurse aller Studenten von hoch nach niedrig nach Durchschnittsnoten an. -- Sie können „round, case when then else end“ hinzufügen, um die Anzeige perfekter zu machen. Wählen Sie „st.s_id,st.s_name,avg(sc4.s_score) „Durchschnittsnote“, „sc.s_score“ „Chinesisch“, „sc2.s_score“ „Mathematik“, „sc3.s_score“ „Englisch“ aus der Studenten-St. linker Join-Score sc auf sc.s_id=st.s_id und sc.c_id="01" linker Join-Score von sc2 bei sc2.s_id=st.s_id und sc2.c_id="02" linker Join-Score von sc3 bei sc3.s_id=st.s_id und sc3.c_id="03" LEFT JOIN-Score von sc4 auf sc4.s_id=st.s_id Gruppieren nach st.s_id Sortieren nach SUM(sc4.s_score) desc -- 18. Abfrage der höchsten, niedrigsten und durchschnittlichen Noten jedes Fachs: Anzeige im folgenden Format: Kurs-ID, Kursname, höchste Note, niedrigste Note, durchschnittliche Note, Bestehensquote, mittlere Note, gute Note, sehr gute Note -- Bestehen ist >=60, mittel ist: 70-80, gut ist: 80-90, sehr gut ist: >=90 select c.c_id,c.c_name,max(sc.s_score) "höchste Punktzahl",MIN(sc2.s_score) "niedrigste Punktzahl",avg(sc3.s_score) "durchschnittliche Punktzahl" ,((Wählen Sie Anzahl(s_id) aus Punktzahl, bei der s_score>=60 und c_id=c.c_id)/(Wählen Sie Anzahl(s_id) aus Punktzahl, bei der c_id=c.c_id)) „Bestehensquote“ ,((Wählen Sie Anzahl(s_id) aus Punktzahl, wobei s_score>=70 und s_score<80 und c_id=c.c_id)/(Wählen Sie Anzahl(s_id) aus Punktzahl, wobei c_id=c.c_id)) „Mittlere Rate“ ,((Wählen Sie count(s_id) aus dem Score, bei dem s_score>=80 und s_score<90 und c_id=c.c_id)/(Wählen Sie count(s_id) aus dem Score, bei dem c_id=c.c_id)) „Ausgezeichnete Bewertung“ ,((Wählen Sie die Anzahl(s_id) aus der Punktzahl, bei der s_score>=90 und c_id=c.c_id)/(Wählen Sie die Anzahl(s_id) aus der Punktzahl, bei der c_id=c.c_id)) „Ausgezeichnete Bewertung“ ab Kurs C LEFT JOIN Punktzahl sc ON sc.c_id=c.c_id linker Join-Score von sc2 auf sc2.c_id=c.c_id linke Join-Punktzahl sc3 auf sc3.c_id=c.c_id Gruppieren nach c.c_id -- 19. Nach Fachnoten sortieren und Ranglisten anzeigen (nicht vollständig implementiert) -- MySQL hat keine Rangfunktion -- Das Hinzufügen von @score soll verhindern, dass die Reihenfolge nach der Verwendung von union all select c1.s_id,c1.c_id,c1.c_name,@score:=c1.s_score,@i:=@i+1 from (select c.c_name,sc.* from course c) gestört wird. LEFT JOIN Punktzahl sc ON sc.c_id=c.c_id wobei c.c_id="01" sortiert nach sc.s_score desc) c1 , (wähle @i:=0) a Vereinigung alle wähle c2.s_id,c2.c_id,c2.c_name,c2.s_score,@ii:=@ii+1 aus (wähle c.c_name,sc.* aus Kurs c LEFT JOIN Punktzahl sc ON sc.c_id=c.c_id wobei c.c_id="02" sortiert nach sc.s_score desc) c2 , (wähle @ii:=0) aa Vereinigung alle wähle c3.s_id,c3.c_id,c3.c_name,c3.s_score,@iii:=@iii+1 aus (wähle c.c_name,sc.* aus Kurs c LEFT JOIN Punktzahl sc ON sc.c_id=c.c_id wobei c.c_id="03" sortiert nach sc.s_score absteigend) c3; setze @iii=0; -- 20. Fragen Sie die Gesamtpunktzahl der Studenten ab und ordnen Sie sie ein. Wählen Sie st.s_id, st.s_name , (Fall, wenn sum(sc.s_score) null ist, dann 0, sonst sum(sc.s_score) Ende) von Student St LEFT JOIN Punktzahl sc ON sc.s_id=st.s_id Gruppieren nach st.s_id, Sortieren nach Summe(sc.s_score) desc -- 21. Abfrage der Durchschnittsnoten verschiedener Kurse, die von verschiedenen Lehrern unterrichtet werden, von hoch bis niedrig select t.t_id,t.t_name,c.c_name,avg(sc.s_score) from teacher t Kurs c verlassen am c.t_id=t.t_id linker Join-Score sc auf sc.c_id =c.c_id Gruppierung nach t.t_id Sortieren nach Durchschnitt (sc.s_score) desc -- 22. Fragen Sie die Informationen der Studenten ab, die in allen Kursen auf den Plätzen 2 bis 3 liegen, und ihre Kursnoten. Wählen Sie a.* aus ( wähle st.*,c.c_id,c.c_name,sc.s_score aus Schüler st LEFT JOIN Punktzahl sc ON sc.s_id=st.s_id Innerer Join-Kurs c auf c.c_id =sc.c_id und c.c_id="01" Sortieren nach sc.s_score desc LIMIT 1,2 ) a Vereinigung alle wähle b.* aus ( wähle st.*,c.c_id,c.c_name,sc.s_score aus Schüler st LEFT JOIN Punktzahl sc ON sc.s_id=st.s_id Innerer Join-Kurs c auf c.c_id =sc.c_id und c.c_id="02" Sortieren nach sc.s_score desc LIMIT 1,2) b Vereinigung alle wähle c.* aus ( wähle st.*,c.c_id,c.c_name,sc.s_score aus Schüler st LEFT JOIN Punktzahl sc ON sc.s_id=st.s_id Innerer Join-Kurs c auf c.c_id =sc.c_id und c.c_id="03" Sortieren nach sc.s_score desc LIMIT 1,2) c - 23. Zählen Sie die Anzahl der Studenten in jedem Punktebereich für jedes Fach: Kursnummer, Kursname, [100-85], [85-70], [70-60], [0-60] und Prozentsatz, wählen Sie c.c_id, c.c_name ,((Wählen Sie Anzahl(1) aus der Punktzahl sc, wobei sc.c_id=c.c_id und sc.s_score<=100 und sc.s_score>80)/(Wählen Sie Anzahl(1) aus der Punktzahl sc, wobei sc.c_id=c.c_id )) „100-85“ ,((Wählen Sie Anzahl(1) aus der Punktzahl sc, wobei sc.c_id=c.c_id und sc.s_score<=85 und sc.s_score>70)/(Wählen Sie Anzahl(1) aus der Punktzahl sc, wobei sc.c_id=c.c_id )) „85-70“ ,((Wählen Sie Anzahl(1) aus der Punktzahl sc, wobei sc.c_id=c.c_id und sc.s_score<=70 und sc.s_score>60)/(Wählen Sie Anzahl(1) aus der Punktzahl sc, wobei sc.c_id=c.c_id )) „70-60“ ,((Wählen Sie Anzahl(1) aus der Punktzahl sc, wobei sc.c_id=c.c_id und sc.s_score<=60 und sc.s_score>=0)/(Wählen Sie Anzahl(1) aus der Punktzahl sc, wobei sc.c_id=c.c_id )) „60-0“ aus Kurs C, sortiert nach c.c_id - 24. Abfrage der Durchschnittsnoten und Ranglisten der Studenten, festgelegt auf @i=0; wähle a.*,@i:=@i+1 aus ( select st.s_id,st.s_name,round((case when avg(sc.s_score) is null then 0 else avg(sc.s_score) end),2) "Durchschnittliche Punktzahl" von Student st LEFT JOIN Punktzahl sc ON sc.s_id=st.s_id gruppieren nach st.s_id ordnen nach sc.s_score absteigend) a -- 25. Fragen Sie die drei besten Noten in jedem Fach ab. Wählen Sie a.* aus ( Wählen Sie st.s_id, st.s_name, c.c_id, c.c_name, sc.s_score aus dem Studenten-St. LEFT JOIN Punktzahl sc ON sc.s_id=st.s_id Innerer Join-Kurs c auf c.c_id=sc.c_id und c.c_id='01' Sortieren nach sc.s_score desc LIMIT 0,3) a Vereinigung alle wähle b.* aus ( Wählen Sie st.s_id, st.s_name, c.c_id, c.c_name, sc.s_score aus dem Studenten-St. LEFT JOIN Punktzahl sc ON sc.s_id=st.s_id Innerer Join-Kurs c auf c.c_id=sc.c_id und c.c_id='02' Sortieren nach sc.s_score desc LIMIT 0,3) b Vereinigung alle wähle c.* aus ( Wählen Sie st.s_id, st.s_name, c.c_id, c.c_name, sc.s_score aus dem Studenten-St. LEFT JOIN Punktzahl sc ON sc.s_id=st.s_id Innerer Join-Kurs c auf c.c_id=sc.c_id und c.c_id='03' Sortieren nach sc.s_score desc LIMIT 0,3) c -- 26. Abfrage der Anzahl der Studenten, die jeden Kurs gewählt haben select c.c_id,c.c_name,count(1) from course c LEFT JOIN Punktzahl sc ON sc.c_id=c.c_id Innerer Join für Student st auf st.s_id=c.c_id Gruppieren nach st.s_id -- 27. Fragen Sie die Studenten-ID und den Namen aller Studenten ab, die nur zwei Kurse haben. select st.s_id,st.s_name from student st LEFT JOIN Punktzahl sc ON sc.s_id=st.s_id Innerer Join-Kurs c auf c.c_id=sc.c_id Gruppieren nach st.s_id mit count(1)=2 -- 28. Fragen Sie die Anzahl der Jungen und Mädchen ab. Wählen Sie st.s_sex,count(1) aus der Schülergruppe st nach st.s_sex aus. -- 29. Fragen Sie die Informationen zu den Studenten ab, deren Namen das Wort „风“ enthalten. select st.* from student st where st.s_name like „%风%“; -- 30. Fragen Sie die Liste der Studenten mit dem gleichen Namen und Geschlecht ab und zählen Sie die Anzahl der Personen mit dem gleichen Namen. Wählen Sie st.*,count(1) aus der Gruppe der Studenten st nach st.s_name,st.s_sex mit count(1)>1 aus. -- 31. Fragen Sie die Liste der im Jahr 1990 geborenen Studenten ab. select st.* from student st where st.s_birth like "1990%"; -- 32. Abfrage der Durchschnittsnote jedes Kurses. Die Ergebnisse werden absteigend nach Durchschnittsnote sortiert. Wenn die Durchschnittsnoten gleich sind, werden sie aufsteigend nach Kursnummer sortiert. select c.c_id,c.c_name,avg(sc.s_score) from course c Innerer Join-Score sc bei sc.c_id=c.c_id Gruppieren nach c.c_id, Sortieren nach Durchschnitt (sc.s_score) desc, c.c_id asc -- 33. Fragen Sie die Studenten-ID, den Namen und die Durchschnittsnote aller Studenten ab, deren Durchschnittsnote größer oder gleich 85 ist. select st.s_id,st.s_name,avg(sc.s_score) from student st LEFT JOIN Punktzahl sc ON sc.s_id=st.s_id Gruppieren nach st.s_id mit avg(sc.s_score)>=85 -- 34. Fragen Sie die Namen und Noten von Studenten ab, deren Kursname „Mathematik“ ist und deren Noten unter 60 liegen. select st.s_id,st.s_name,sc.s_score from student st Innerer Join-Score sc bei sc.s_id=st.s_id und sc.s_score<60 Innerer Join Kurs c auf c.c_id=sc.c_id und c.c_name="Mathematik" -- 35. Überprüfen Sie die Kurse und Noten aller Studenten; Wählen Sie st.s_id, st.s_name, c.c_name, sc.s_score aus dem Studenten-St. LEFT JOIN Punktzahl sc ON sc.s_id=st.s_id Kurs c verlassen auf c.c_id =sc.c_id Sortieren nach st.s_id,c.c_name - 36. Fragen Sie den Namen, den Kursnamen und die Punktzahl aller Kurse mit einer Punktzahl über 70 ab. Wählen Sie st2.s_id,st2.s_name,c2.c_name,sc2.s_score aus Student st2 LEFT JOIN-Score von sc2 auf sc2.s_id=st2.s_id Kurs c2 verlassen auf c2.c_id=sc2.c_id wobei st2.s_id in( wähle st.s_id aus Studenten-St LEFT JOIN Punktzahl sc ON sc.s_id=st.s_id Gruppieren nach st.s_id mit min(sc.s_score)>=70) Sortieren nach s_id -- 37. Abfrage nicht bestandener Kurse select st.s_id,c.c_name,st.s_name,sc.s_score from student st Innerer Join-Score sc bei sc.s_id=st.s_id und sc.s_score<60 Innerer Join-Kurs c auf c.c_id=sc.c_id - 38. Fragen Sie die Studenten-ID und den Namen des Studenten ab, dessen Kursnummer 01 ist und dessen Kurspunktzahl über 80 Punkte liegt. select st.s_id,st.s_name,sc.s_score from student st Innerer Join-Score sc bei sc.s_id=st.s_id und sc.c_id="01" und sc.s_score>=80 -- 39. Ermitteln Sie die Anzahl der Studenten in jedem Kurs select c.c_id,c.c_name,count(1) from course c Innerer Join-Score sc bei sc.c_id=c.c_id Gruppieren nach c.c_id -- 40. 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 wählen Sie deren Punktzahl aus „st.*,c.c_name,sc.s_score,t.t_name“ aus dem Schüler-St. Innerer Join-Score sc bei sc.s_id=st.s_id Innerer Join-Kurs c auf c.c_id=sc.c_id Innerer Join Lehrer t auf t.t_id=c.t_id und t.t_name="Name" Sortieren nach sc.s_score desc Grenze 0,1 - 41. Fragen Sie die Studenten-ID, die Kurs-ID und die Studentenpunktzahl von Studenten mit der gleichen Punktzahl in verschiedenen Kursen ab. Wählen Sie st.s_id,st.s_name,sc.c_id,sc.s_score aus student st LEFT JOIN Punktzahl sc ON sc.s_id=st.s_id Kurs c verlassen auf c.c_id=sc.c_id Wo ( wähle count(1) vom Schüler st2 LEFT JOIN-Score von sc2 auf sc2.s_id=st2.s_id Kurs c2 verlassen auf c2.c_id=sc2.c_id wobei sc.s_score=sc2.s_score und c.c_id!=c2.c_id )>1 -- 42. Fragen Sie die beiden besten Schüler mit den besten Noten in jedem Fach ab. select a.* from (select st.s_id,st.s_name,c.c_name,sc.s_score from student st LEFT JOIN Punktzahl sc ON sc.s_id=st.s_id innerer Join-Kurs c auf c.c_id=sc.c_id und c.c_id="01" Sortieren nach sc.s_score desc limit 0,2) a Vereinigung alle wähle b.* aus (wähle st.s_id,st.s_name,c.c_name,sc.s_score aus Schüler st LEFT JOIN Punktzahl sc ON sc.s_id=st.s_id innerer Join-Kurs c auf c.c_id=sc.c_id und c.c_id="02" Sortieren nach sc.s_score desc limit 0,2) b Vereinigung alle wähle c.* aus (wähle st.s_id,st.s_name,c.c_name,sc.s_score aus Schüler st LEFT JOIN Punktzahl sc ON sc.s_id=st.s_id innerer Join-Kurs c auf c.c_id=sc.c_id und c.c_id="03" Sortieren nach sc.s_score desc limit 0,2) c -- Referenz (genauer und schöner): wähle a.s_id,a.c_id,a.s_score aus Punktzahl a wobei (wähle COUNT(1) aus Punktzahl b, wobei b.c_id=a.c_id und b.s_score>=a.s_score)<=2, sortiert nach a.c_id - 43. Zählen Sie die Anzahl der Studenten, die jeden Kurs belegen (es werden nur Kurse mit mehr als 5 Studenten gezählt). Dabei ist die Ausgabe der Lehrveranstaltungsnummer sowie der Anzahl der Studierenden erforderlich und die Abfrageergebnisse werden absteigend nach der Anzahl der Studierenden sortiert. -- Wenn die Anzahl der Studierenden gleich ist, sortiere nach Kursnummer in aufsteigender Reihenfolge select sc.c_id,count(1) from score sc Kurs c verlassen auf c.c_id=sc.c_id Gruppieren nach c.c_id mit count(1)>5 Sortieren nach Anzahl(1) desc,sc.c_id asc -- 44. Rufen Sie die Studenten-ID eines Studenten ab, der mindestens zwei Kurse belegt hat. select st.s_id from student st LEFT JOIN Punktzahl sc ON sc.s_id=st.s_id Gruppieren nach st.s_id mit count(1)>=2 -- 45. Fragen Sie die Informationen der Studenten ab, die alle Kurse belegt haben. select st.* from student st LEFT JOIN Punktzahl sc ON sc.s_id=st.s_id Gruppieren nach st.s_id mit count(1)=(wähle count(1) aus Kurs aus) -- 46. Fragen Sie das Alter jedes Schülers ab select st.*,timestampdiff(year,st.s_birth,now()) from student st -- 47. Abfrage für Studenten, die diese Woche Geburtstag haben -- Hier liegt möglicherweise ein Problem vor. Die Wochenfunktion nimmt die Wochennummer des aktuellen Jahres. 12.12.2017 ist die 50. Woche und 12.12.2018 die 49. Woche. Sie können Monat, Tag und Wochentag (%w) nehmen. -- Dann beurteilen Sie, ob diese Woche bis zum nächsten Monat andauert. Es ist zu mühsam. Ich weiß nicht, wie ich select st.* from student st schreiben soll wobei Woche(jetzt())=Woche(Datumsformat(Geburtstag,'%Y%m%d')) -- 48. Abfrage für Studenten, die nächste Woche Geburtstag haben select st.* from student st wobei Woche(jetzt())+1=Woche(Datumsformat(Geburtstag,'%Y%m%d')) -- 49. Abfrage für Studenten, die in diesem Monat Geburtstag haben select st.* from student st wobei Monat(jetzt())=Monat(Datumsformat(Geburtstag,'%Y%m%d')) -- 50. Abfrage für Studenten, die im nächsten Monat Geburtstag haben -- Hinweis: Wenn der aktuelle Monat 12 ist, verwenden Sie month(now())+1, um 13 statt 1 zu erhalten. Sie können die Funktion timestampadd() oder Mod verwenden, um st.* aus dem Studenten-St auszuwählen. wobei Monat(Zeitstempeladd(Monat,1,jetzt()))=Monat(Datumsformat(Geburtstag,'%Y%m%d')) - oder wähle st.* aus student st, wobei (Monat(jetzt()) + 1) mod 12 = Monat(Datumsformat(Geburtstag des Schülers,'%Y%m%d')) Dies ist das Ende dieses Artikels über Mysql-SQL-Anweisungsübungen (50 Fragen). Weitere verwandte Mysql-Übungen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die verwandten Artikel weiter unten. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Nginx übernimmt die Analyse des Implementierungsprozesses für HTTP-Anforderungen
>>: Tutorial zur HTML-Tabellenauszeichnung (9): Zellabstandsattribut CELLSPACING
Mybatis-Implementierungsmethode für Fuzzy-Abfrage...
Beispielcode: importiere java.util.Random; import...
Vorwort Jeder weiß, wie man ein JAR-Paket unter L...
1. ROW_NUMBER() Definition: Die Funktion ROW_NUMB...
MySQL kann nicht nur über das Netzwerk, sondern a...
Bildung des Gittersystems Im Jahr 1692 war der fr...
Hintergrund: Als DBA werden die meisten DDL-Änder...
Inhaltsverzeichnis 1. Typ des Operators 2. Instan...
Vorwort Studenten, die JavaScript lernen, wissen,...
1. Erste Schritte mit setUp Stellen Sie kurz die ...
Inhaltsverzeichnis Diffing-Algorithmus Schicht-fü...
Inhaltsverzeichnis 1. Docker-Installation auf dem...
Inhaltsverzeichnis Vorwort Szenarioanalyse Zusamm...
Link zum Download der ZIP-Datei auf der offiziell...
In Projekten wird häufig das zweispaltige Layout ...