Mysql Sql-Anweisungsübungen (50 Fragen)

Mysql Sql-Anweisungsübungen (50 Fragen)

Tabellenname und Felder

–1. Studentenliste
Student (s_id, s_name, s_birth, s_sex) – Matrikel-ID, Name des Studenten, Geburtsdatum, Geschlecht des Studenten – 2. Stundenplan
Course(c_id,c_name,t_id) – –Kurs-ID, Kursname, Lehrer-ID – 3. Lehrertabelle
Lehrer (t_id, t_name) – Lehrer-ID, Lehrername – 4. Notentabelle
Score(s_id,c_id,s_score) – Studenten-ID, Kurs-ID, Punktzahl

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 folgt

Schülertabelle:

s_id s_name s_Geburt s_sex
01 Zhao Lei 01.01.1990 männlich
02 Qiandian 21.12.1990 männlich
03 Sonne Feng 20.05.1990 männlich
04 Li Yun 06.08.1990 männlich
05 Zhou Mei 12.12.1991 weiblich
06 Wu Lan 13.12.2017 weiblich
07 Zheng Zhu 01.07.1989 weiblich
08 Wang Ju 20.01.1990 weiblich
09 Zhao Lei 21.01.1990 weiblich
10 Zhao Lei 22.01.1990 männlich

Punktestand Punktetabelle:

s_id c_id s_score
01 01 80
01 02 90
01 03 99
02 01 70
02 02 60
02 03 80
03 01 80
03 02 80
03 03 80
04 01 50
04 02 30
04 03 20
05 01 76
05 03 87
06 01 31
06 03 34
07 03 89
07 01 98

Kursplan

c_id c_name t_id
01 Sprache 02
02 Mathe 01
03 Englisch 03

Lehrertisch:

t_id t_name
01 Zhang San
02 Li Si
03 Wang Wu
-- 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:
  • Die umfassendsten 50 Mysql-Datenbankabfrageübungen

<<:  Nginx übernimmt die Analyse des Implementierungsprozesses für HTTP-Anforderungen

>>:  Tutorial zur HTML-Tabellenauszeichnung (9): Zellabstandsattribut CELLSPACING

Artikel empfehlen

Mybatis-Implementierungsmethode für Fuzzy-Abfragen

Mybatis-Implementierungsmethode für Fuzzy-Abfrage...

Java-Beispielcode zum Generieren von zufälligen Zeichen

Beispielcode: importiere java.util.Random; import...

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

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

Optimierung des MySQL Thread_Stack-Verbindungsthreads

MySQL kann nicht nur über das Netzwerk, sondern a...

Rastersysteme im Webdesign

Bildung des Gittersystems Im Jahr 1692 war der fr...

Zusammenfassung der Verwendung von MySQL Online DDL gh-ost

Hintergrund: Als DBA werden die meisten DDL-Änder...

Zusammenfassung der relevanten Wissenspunkte zu Ajax in jQuery

Vorwort Studenten, die JavaScript lernen, wissen,...

Detaillierte Analyse des React Diff-Prinzips

Inhaltsverzeichnis Diffing-Algorithmus Schicht-fü...

Installieren Sie MySQL (einschließlich utf8) mit Docker unter Windows/Mac

Inhaltsverzeichnis 1. Docker-Installation auf dem...

MySQL Community Server 5.7.19 Installationshandbuch (detailliert)

Link zum Download der ZIP-Datei auf der offiziell...

Lösung für die Ineffektivität der flexiblen Layoutbreite in CSS3

In Projekten wird häufig das zweispaltige Layout ...