Übungen zu SQL-Anweisungen (2)

Tabelle erstellen und Datensätze einfügen
CREATE TABLE class (
cid int(11) NOT NULL AUTO_INCREMENT,
caption varchar(32) NOT NULL,
PRIMARY KEY (cid)
) ENGINE=InnoDB CHARSET=utf8;

INSERT INTO class VALUES
(1, 'Klasse zwei für drei Jahre'),
(2, 'Klasse drei für drei Jahre'),
(3, 'Klasse zwei für ein Jahr'),
(4, 'Klasse neun für zwei Jahre' );

CREATE TABLE course(
cid int(11) NOT NULL AUTO_INCREMENT,
cname varchar(32) NOT NULL,
Teacher_id int(11) NOT NULL,
PRIMARY KEY (cid),
KEY fk_course_teacher (teacher_id),
CONSTRAINT fk_course_teacher FOREIGN KEY (teacher_id) REFERENCES Teacher (tid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

IN KURSWERTE EINFÜGEN
(1, 'Biologie', 1),
(2, 'Physik', 2),
(3, 'Sport', 3),
(4, 'Kunst', 2);

CREATE TABLE score (
sid int(11) NOT NULL AUTO_INCREMENT,
student_id int(11) NOT NULL,
course_id int(11) NOT NULL,
num int(11) NOT NULL,
PRIMARY KEY (sid),
KEY fk_score_student (student_id),
KEY fk_score_course (kurs_id),
CONSTRAINT fk_score_course FOREIGN KEY (kurs_id) REFERENCES Kurs (cid),
CONSTRAINT fk_score_student FOREIGN KEY (student_id) REFERENCES student(sid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

IN Score WERTE EINSETZEN
(1, 1, 1, 10),
(2, 1, 2, 9),
(5, 1, 4, 66),
(6, 2, 1, 8),
(8, 2, 3 , 68),
(9, 2, 4, 99),
(10, 3, 1, 77),
(11, 3, 2, 66),
(12, 3, 3, 87),
(13, 3, 4 , 99),
(14, 4, 1, 79),
(15, 4, 2, 11),
(16, 4, 3, 67),
(17, 4, 4, 100),
(18, 5, 1 , 79),
(19, 5, 2, 11),
(20, 5, 3, 67),
(21, 5, 4, 100),
(22, 6, 1, 9),
(23, 6, 2 , 100),
(24, 6, 3, 67),
(25, 6, 4, 100),
(26, 7, 1, 9),
(27, 7, 2, 100),
(28, 7, 3 , 67),
(29, 7, 4, 88),
(30, 8, 1, 9),
(31, 8, 2, 100),
(32, 8, 3, 67),
(33, 8, 4, 88),
(34, 9, 1, 91),
(35, 9, 2, 88),
(36, 9, 3, 67),
(37, 9, 4, 22),
(38, 10, 1, 90),
(39, 10, 2, 77),
(40, 10, 3, 43),
(41, 10, 4, 87),
(42, 11, 1, 90),
(43, 11, 2, 77),
(44, 11, 3, 43),
(45, 11, 4, 87),
(46, 12, 1, 90),
(47, 12, 2, 77),
(48, 12, 3, 43),
(49, 12, 4, 87),
(52, 13, 3, 87);

CREATE TABLE student(
sid int(11) NOT NULL AUTO_INCREMENT,
gender char(1) NOT NULL,
class_id int(11) NOT NULL,
sname varchar(32) NOT NULL,
PRIMARY KEY (sid),
KEY fk_class (class_id),
CONSTRAINT fk_class FOREIGN KEY (class_id) REFERENCES class (cid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO student VALUES
(1, 'männlich', 1, 'Verstehen'),
(2, 'weiblich', 1, 'Ei aus Stahl'),
(3, 'männlich', 1, 'Zhang San'),
(4 , 'männlich', 1, 'Zhang Yi'),
(5, 'weiblich', 1, 'Zhang Er'),
(6, 'männlich', 1, 'Zhang Si'),
(7, 'weiblich', 2, 'Eisenhammer'),
(8, 'Männlich', 2, 'Li San'),
(9, 'Männlich', 2, 'Li Yi'),
(10, 'Weiblich', 2, 'Li Er '),
(11, 'männlich', 2, 'Lisi'),
(12, 'weiblich', 3, 'Ruhua'),
(13, 'männlich', 3, 'Liu San'),
(14, ' Männlich', 3, 'Liu Yi'),
(15, 'Weiblich', 3, 'Liu Er'),
(16, 'Männlich', 3, 'Liu Si');

CREATE TABLE Teacher (
tid int(11) NOT NULL AUTO_INCREMENT,
tname varchar(32) NOT NULL,
PRIMARY KEY (tid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO Teacher VALUES
(1, 'Lehrer Zhang Lei'),
(2, 'Lehrer Li Ping'),
(3, 'Lehrer Liu Haiyan'),
(4, 'Lehrer Zhu Yunhai'),
(5, 'Lehrer Li Jie');

1. Fragen Sie die Namen aller Kurse und die Namen der entsprechenden Lehrer ab

select course.cname,teacher.tname from teacher inner join course on course.teacher_id=teacher.tid;

2. Fragen Sie die Anzahl der männlichen und weiblichen Studenten in der Studententabelle ab

select gender,count(1) as 人数 from student group by gender;

3. Fragen Sie den Namen des Schülers ab, dessen Physik-Punktzahl gleich 100 ist

select sname from student where sid in (select student_id from course inner JOIN score on score.course_id=(SELECT course.cid FROM course WHERE cname='物理') and score.num=100 GROUP BY student_id);

4. Fragen Sie die Namen und Durchschnittsnoten von Studenten ab, deren Durchschnittsnote größer als 80 ist

select sname,avg(num) from student inner join score on score.student_id=student.sid GROUP BY student_id HAVING avg(num)>80;

5. Abfrage der Matrikelnummer, Name, Anzahl der Lehrveranstaltungen und Gesamtnoten aller Studierenden

select student.sid,student.sname,count(1),sum(num) from student INNER JOIN score on student.sid=score.student_id GROUP BY student_id;

6. Fragen Sie die Anzahl der Lehrer mit dem Nachnamen Li ab

select count(1) from teacher WHERE tname like '李%';

7. Erkundigen Sie sich nach den Namen der Schüler, die sich nicht für Herrn Li Pings Klasse angemeldet haben

SELECT sname from student WHERE sid not in (select student_id FROM score WHERE course_id IN(select cid from course where teacher_id=(select tid from teacher where tname='李平老师')));

8. Matrikelnummer des Studierenden abfragen, dessen Physik-Studiengang höher ist als der Biologie-Studiengang

select A.student_id from (SELECT * from score WHERE course_id = (SELECT cid from course WHERE cname='物理')) as A
INNER JOIN
(SELECT * from score WHERE course_id = (SELECT cid from course WHERE cname='生物')) as B
on A.student_id=B.student_id
WHERE A.num>B.num;

9. Fragen Sie die Namen der Studenten ab, die nicht gleichzeitig Physikkurse und Sportunterricht belegt haben

SELECT sname from student WHERE sname not in(
SELECT sname from student WHERE sid in(
    SELECT student_id from score WHERE course_id=(SELECT cid from course WHERE cname='物理'))
        and sid in (SELECT student_id from score WHERE course_id=(SELECT cid from course WHERE cname='体育')));

10. Fragen Sie die Namen und Klassen von Schülern ab, die in mehr als zwei Fächern (einschließlich zwei Fächern) durchgefallen sind

SELECT sname,class_id from student WHERE sid in (SELECT student_id from score WHERE num<60 GROUP BY student_id HAVING count(1)>=2);

11. Fragen Sie die Namen der Studenten ab, die alle Kurse belegt haben

SELECT sname from student WHERE sid in(select sid from score WHERE course_id in (select cid from course));

12. Fragen Sie alle Notenaufzeichnungen der von Herrn Li Ping unterrichteten Kurse ab

SELECT * from score where course_id in (SELECT course_id from course where teacher_id=(SELECT tid from teacher where tname='李平老师'));

13. Fragen Sie die Kursnummer und den Kursnamen ab, die alle Studenten belegt haben

select course_id from score GROUP BY course_id HAVING count(1)=(SELECT count(1) from student);

14. Fragen Sie ab, wie oft jeder Kurs besucht wird

select count(1),course_id from score GROUP BY course_id;

15. Der Name und die Matrikelnummer des Studierenden, der eine Lehrveranstaltung belegt hat, zur Abfrage

select student_id from score GROUP BY student_id HAVING count(1)=1;

16. Testergebnisse aller Schüler abfragen und von hoch nach niedrig sortieren (Doppelte Ergebnisse entfernen)

SELECT num from score GROUP BY num ORDER BY num desc;

17. Fragen Sie die Namen und Durchschnittsnoten von Schülern ab, deren Durchschnittsnote größer als 85 ist

SELECT student.sname,avg(num) from score INNER JOIN student on student.sid = score.student_id GROUP BY student_id HAVING avg(num)>80;

18. Fragen Sie die Namen und die entsprechenden biologischen Ergebnisse von Schülern ab, die in Biologie durchgefallen sind

SELECT A.num,B.sname from (SELECT * from score WHERE course_id=(SELECT cid from course WHERE cname='生物') 
GROUP BY student_id HAVING num<60) as A INNER JOIN (SELECT * from student) as B on A.student_id=B.sid;

19. Fragen Sie den Namen des Studenten mit der höchsten durchschnittlichen Punktzahl in diesen Kursen (Kurse von Lehrer Li Ping, nicht alle Kurse) unter allen Studenten ab, die die Kurse von Lehrer Li Ping belegt haben

SELECT sname from student where sid=(SELECT student_id from score WHERE course_id in (SELECT cid from course where teacher_id=(SELECT tid from teacher WHERE tname='李平老师')) GROUP BY student_id ORDER BY avg(num) desc limit 1);

Beispiel:
CREATE TABLE t_dept (
id INT(11) NOT NULL AUTO_INCREMENT,
deptName VARCHAR(30) DEFAULT NULL,
address VARCHAR(40) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

CREATE TABLE t_emp (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(20) DEFAULT NULL,
age INT(3) DEFAULT NULL,
deptId INT(11) DEFAULT NULL,
empno int not null,
PRIMARY KEY (id),
KEY idx_dept_id (deptId)
#CONSTRAINT fk_dept_id FOREIGN KEY (deptId) REFERENCES t_dept (id)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

INSERT INTO t_dept(deptName,address) VALUES('Huashan','Huashan');
INSERT INTO t_dept(deptName,address) VALUES('Beggars','Luoyang');
INSERT INTO t_dept(deptName,address) VALUES(' Emei ','Emeishan');
INSERT INTO t_dept(deptName,address) VALUES('Wudang','Wudangshan');
INSERT INTO t_dept(deptName,address) VALUES('Mingjiao','Guangmingding');
INSERT INTO t_dept(deptName ,Adresse) VALUES('Shaolin','Shaolin Tempel');

INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('Feng Qingyang',90,1,100001);
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('Yuebuqun',50,1 ,100002) ;
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('Linghuchong',24,1,100003);
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('Hong Qigong',70 ,2,100004 );
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('Qiao Feng',35,2,100005);
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('Dept ID too ',70, 3,100006);
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('Zhou Zhiruo',20,3,100007);
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('Zhang Sanfeng ', 100,4,100008);
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('Zhang Wuji',25,5,100009);
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('Wei Xiaobao ',18,null,100010);

ALTER TABLE t_dept
add CEO INT(11) ;

Der Wert von CEO=2 sollte dem Wert von id in t_emp entsprechen.
update t_dept set CEO=2 wo id=1;
update t_dept set CEO=4 wo id=2;
update t_dept set CEO=6 wo id=3;
update t_dept set CEO=8 wo id=4;
update t_dept set CEO=9 wo id=5
1. Alle Personalinformationen von Sekten

SELECT e.`name`,d.`deptName` FROM t_emp e INNER JOIN t_dept d ON e.`deptId`=d.`id`;

2. Listen Sie alle Benutzer auf und zeigen Sie ihre Organisationsinformationen an

SELECT e.`name`,d.`deptName` FROM t_emp e LEFT JOIN t_dept d ON e.`deptId`=d.`id`;

3. Listen Sie diejenigen auf, die nicht zugewiesen werden

SELECT * FROM t_emp WHERE deptId IS NULL;

4. All die Sekten, denen niemand beitritt

SELECT d.* FROM  t_dept d LEFT JOIN t_emp e ON d.`id`=e.`deptId` WHERE e.`deptId` IS NULL;

5. Listen Sie die Vergleichsbeziehung zwischen allen Mitarbeitern und Sekten auf

SELECT * FROM t_emp e LEFT JOIN t_dept d ON e.`deptId`=d.`id`
UNION
SELECT * FROM t_emp e RIGHT JOIN t_dept d ON e.`deptId`=d.`id`;

6. Listen Sie alle Personen auf, die nicht in der Sekte sind, und die Sekten, die nicht in der Sekte sind

SELECT * FROM t_emp e  LEFT JOIN t_dept d ON e.`deptId`=d.`id` WHERE e.deptId IS NULL
UNION
SELECT * FROM  t_dept d LEFT JOIN t_emp e ON d.`id`=e.`deptId` WHERE e.`deptId` IS NULL;

7. Fragen Sie nach dem Namen des Leiters jeder Sekte

SELECT d.deptName,e.name FROM t_dept d LEFT JOIN t_emp e ON d.ceo=e.id

8. Ermitteln Sie das Durchschnittsalter aller Köpfe

SELECT AVG(e.age) FROM t_dept d LEFT JOIN t_emp e ON d.ceo=e.id

9. Fragen Sie nach den Namen der Köpfe, die allen Charakteren entsprechen

SELECT ed.name '人物',c.name '掌门' FROM

(SELECT e.name,d.ceo from t_emp e LEFT JOIN t_dept d on e.deptid=d.id) ed

 LEFT JOIN t_emp c on ed.ceo= c.id;

Beispiel:
CREATE TABLE-Kurs (
cid varchar(50) NOT NULL,
cname varchar(50) NOT NULL,
tid int(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

– Aufzeichnungen natürlich

INSERT INTO course VALUES ('001', 'PHP', '1');
IN KursWERTE EINFÜGEN ('002', 'C', '1');
INSERT INTO Kurs WERTE ('003', 'C++', '2');
IN KursWERTE EINFÜGEN ('004', 'JAVA', '3');
INSERT INTO course VALUES ('005', 'python', '4');
INSERT INTO course VALUES ('006', 'R', '5');
IN KursWERTE EINFÜGEN ('007', 'HTML', '6');

CREATE TABLE sc (
sid int(10) NOT NULL,
cid varchar(50) NOT NULL,
score int(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

– Aufzeichnungen von sc

INSERT INTO sc VALUES ('1001', '001', '89');
INSERT INTO sc VALUES ('1002', '001', '80');
INSERT INTO sc VALUES ('1003', '001', '30');
INSERT INTO sc VALUES ('1004', '001', '78');
INSERT INTO sc VALUES ('1005', '001', '68');
INSERT INTO sc VALUES ('1006', '001', '93');
INSERT INTO sc VALUES ('1007', '001', '62');
INSERT INTO sc VALUES ('1001', '002', '67');
INSERT INTO sc VALUES ('1002', '002', '86');
INSERT INTO sc VALUES ('1003', '002', '67');
INSERT INTO sc VALUES ('1004', '002', '77');
INSERT INTO sc VALUES ('1006', '002', '84');
INSERT INTO sc VALUES ('1007', '002', '72');
INSERT INTO sc VALUES ('1001', '003', '82');
INSERT INTO sc VALUES ('1002', '003', '85');
INSERT INTO sc VALUES ('1003', '003', '32');
INSERT INTO sc VALUES ('1004', '003', '73');
INSERT INTO sc VALUES ('1005', '003', '64');
INSERT INTO sc VALUES ('1006', '003', '87');
INSERT INTO sc VALUES ('1007', '003', '77');
INSERT INTO sc VALUES ('1001', '004', '39');
INSERT INTO sc VALUES ('1003', '004', '80');
INSERT INTO sc VALUES ('1004', '004', '88');
INSERT INTO sc VALUES ('1005', '004', '68');
INSERT INTO sc VALUES ('1006', '004', '59');
INSERT INTO sc VALUES ('1007', '004', '42');
INSERT INTO sc VALUES ('1008', '004', '64');
INSERT INTO sc VALUES ('1001', '005', '89');
INSERT INTO sc VALUES ('1002', '005', '70');
INSERT INTO sc VALUES ('1003', '005', '60');
INSERT INTO sc VALUES ('1004', '005', '58');
INSERT INTO sc VALUES ('1005', '005', '38');
INSERT INTO sc VALUES ('1006', '005', '89');
INSERT INTO sc VALUES ('1007', '005', '72');
INSERT INTO sc VALUES ('1008', '005', '64');
INSERT INTO sc VALUES ('1001', '006', '49');
INSERT INTO sc VALUES ('1002', '006', '90');
INSERT INTO sc VALUES ('1003', '006', '70');
INSERT INTO sc VALUES ('1004', '006', '48');
INSERT INTO sc VALUES ('1005', '006', '98');
INSERT INTO sc VALUES ('1006', '006', '59');
INSERT INTO sc VALUES ('1007', '006', '72');
INSERT INTO sc VALUES ('1008', '006', '74');
INSERT INTO sc VALUES ('1001', '007', '49');
INSERT INTO sc VALUES ('1002', '007', '50');
INSERT INTO sc VALUES ('1003', '007', '70');
INSERT INTO sc VALUES ('1004', '007', '88');
INSERT INTO sc VALUES ('1005', '007', '78');
INSERT INTO sc VALUES ('1006', '007', '99');

CREATE TABLE student (
sid int(10) NOT NULL,
sname varchar(50) NOT NULL,
age int(10) NOT NULL,
sex varchar(10) NOT NULL,
PRIMARY KEY (sid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

– Aufzeichnungen des Schülers

IN SCHULWERTE EINFÜGEN ('1001', 'Zhang Yu', '12', 'Männlich');
IN SCHULERWERTE EINFÜGEN ('1002', 'Zhang Mei', '18', 'Weiblich'); IN SCHÜLERWERTE
EINFÜGEN ('1003', 'Wang Xin', '16', 'Männlich');
IN SCHULWERTE EINFÜGEN ('1004', 'Ma Dongdong', '13', 'Weiblich'); IN SCHULERWERTE
EINFÜGEN ('1005' , 'Sun Zihan', '12', 'Männlich');
INSERT INTO student VALUES ('1006', 'Qian Yi', '12', 'Male');
INSERT INTO student VALUES ('1007', 'Zhao He ' , '15', 'Männlich');
INSERT INTO student VALUES ('1008', 'Zhou Xue', '16', 'Weiblich');

CREATE TABLE Teacher (
tid int(10) NOT NULL,
tname varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

– Aufzeichnungen des Lehrers

EINFÜGEN IN WERTE des Lehrers ('1', 'Li Lei');
EINFÜGEN IN WERTE des Lehrers ('2', 'Li Chun');
EINFÜGEN IN WERTE des Lehrers ('3', 'Hu Yueyue');
EINFÜGEN IN WERTE des Lehrers ( ' 4', 'Zhu Qingshi');
INSERT INTO Teacher VALUES ('5', 'Sai Hongfei');
INSERT INTO Teacher VALUES ('6', 'Song Sandong');
1. Die durchschnittliche Punktzahl der Abfrage ist größer als 70

select sid,avg(score) from sc
group by sid
having avg(score)>70

2. Fragen Sie die Matrikelnummer, den Namen, die Anzahl der Lehrveranstaltungen und die Gesamtnoten aller Studierenden ab

select * from student;
select * from sc;
select s1.sid,s1.sname,count(s2.sid),sum(s2.score)
from student s1
inner join sc s2
on s1.sid=s2.sid
group by s2.sid
select sid,count(*) from sc
group by sid;

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

select count(1) from teacher
where tname like '李%'

4. Abfrage der Schülernummer und Namen der Schüler, die die Klasse „Li Chun“ studiert haben

select * from student;
select * from course;
select * from sc;
select * from teacher;

Verbindungsabfrage:

select a.sid,a.sname
from student a,course b,sc c,teacher d 
where a.sid=c.sid
and b.cid=c.cid
and b.tid=d.tid
and d.tname='李纯'

Unterabfrage:

1、查询“李纯”老师tid
select tid from teacher where tname='李纯'

5. Fragen Sie die CID des Lehrers "Li Chun" ab

select cid from course
where tid = (select tid from teacher where tname='李纯')

6. Verwenden Sie sc, um die Sid des Lehrers abzufragen, der den Kurs von "Li Chun" studiert hat

select sid from sc
where cid in (
select cid from course
where tid = (select tid from teacher where tname='李纯')
)

6. Schülerinformationen abfragen

select sid,sname from student
where sid in (
select sid from sc
where cid in (
select cid from course
where tid = (select tid from teacher where tname='李纯')
)
)

Fragen Sie die Studenten-ID und den Namen der Studenten ab, die die Klasse von "Li Lei" nicht studiert haben.
1. Finden Sie die Tid von Li Lei heraus

select tid from teacher where tname='李雷'

2. Fragen Sie die cid der von Li Lei unterrichteten Kurse ab

select cid from course
where tid=(select tid from teacher where tname='李雷')

3. Fragen Sie die Sid von Li Leis Kursen ab

select distinct sid from sc
where cid in (
select cid from course
where tid=(select tid from teacher where tname='李雷')
)

4. Studenten, die die Kurse von Li Lei nicht studiert haben

SELECT * FROM student WHERE sid NOT IN (
	SELECT DISTINCT sid FROM sc WHERE cid IN ( SELECT cid FROM course WHERE tid =( SELECT tid FROM teacher WHERE tname = '李雷' ) ) 
	)

5. Abfrage der Matrikelnummern und Namen der Studierenden, die die Kurse „001“ und „002“ studiert haben

select * from sc;
select * from student;

Unterabfrage verwenden

select s.sid,s.sname from student s
where s.sid in (
select t1.sid from 
        (select * from sc where cid='001') t1,
        (select * from sc where cid='002') t2
where t1.sid = t2.sid)

Join-Abfrage verwenden

select s.sid,s.sname from student s
,sc t1,sc t2
where s.sid=t1.sid
and t1.cid='001'
and t2.cid='002'
and t1.sid=t2.sid

6. Abfrage der Matrikelnummern und Namen aller Studierenden, deren Noten der Lehrveranstaltungsnummer „002“ schlechter sind als die der Lehrveranstaltungsnummer „001“ Noten der
Lehrveranstaltungen 001 und 002

select s.sid,s.sname from student s
where s.sid in (
select t1.sid from 
        (select * from sc where cid='001') t1,
        (select * from sc where cid='002') t2
where t1.sid = t2.sid and t2.score<t1.score)
            

select s.sid,s.sname from student s
,sc t1,sc t2
where s.sid=t1.sid
and t1.cid='001'
and t2.cid='002'
and t1.sid=t2.sid
and t2.score<t1.score

– Fragen Sie die Studenten-ID und den Namen der Studenten ab, die alle von Lehrer "Li Lei"
1 unterrichteten Kurse studiert haben, fragen Sie die tid von Lehrer Li Lei ab

select tid from teacher where tname='李雷'

2. Fragen Sie die CID von Li Lei ab

select cid from course
where tid in (select tid from teacher where tname='李雷')

3. Fragen Sie die SID von Studenten ab, die bei Herrn Li Lei studiert haben

select distinct sid from sc
where cid in (
select cid from course
where tid in (select tid from teacher where tname='李雷')
)

4. Fragen Sie den Namen des Studentenausweises der Studenten ab, die bei Herrn Li Lei studiert haben

select sid,sname from student
where sid in (
select distinct sid from sc
where cid in (
select cid from course
where tid in (select tid from teacher where tname='李雷')
)
)

– Höchste und niedrigste Punktzahl jedes Fachs abfragen: Anzeige in folgender Form: Kurs-ID, Kursname höchste Punktzahl, niedrigste Punktzahl 1
, Gruppieren nach CID, höchste und niedrigste Punktzahl jedes Fachs abfragen

select cid,max(score),min(score) from sc
group by cid

2. Das Ergebnis von 1 und natürlich Verbindungsabfrage

select a.cid,a.cname,b.max,b.min from course a
inner join (select cid,max(score) max,min(score) min from sc
group by cid) b
on a.cid=b.cid

– Fragen Sie die Matrikelnummer, Name
1 und die Anzahl der statistischen Lehrveranstaltungen der Studierenden ab, die nicht alle Lehrveranstaltungen gelernt haben

select count(1) from course

2. Gruppieren Sie nach Sid, zählen Sie, wie viele Kurse jeder Schüler gelernt hat

select sid,count(1) from sc group by sid;

3. Finde den Sid heraus, der nicht alle Kurse gelernt hat

select sid from sc group by sid
having count(1)< (select count(1) from course)

4. Schülerinformationen gemäß dem Ergebnis von 3 ausgeben

select sid,sname from student
where sid in (
select sid from sc group by sid
having count(1)< (select count(1) from course)
)

– Matrikelnummer und Name des Studierenden abfragen, der mindestens einen gleichen Studiengang hat wie die Matrikelnummer „1001

select cid from sc
where sid=1001

2. Finden Sie die Sid des Studenten, der mindestens einen der Kurse im Ergebnis 1 studiert hat

select distinct sid from sc
where cid in (
select cid from sc
where sid=1001
) and sid!=1001

3. Schülerinformationen gemäß dem Ergebnis von 2 ausgeben

select sid,sname from student 
where sid in(
select distinct sid from sc
where cid in (
select cid from sc
where sid=1001
) and sid!=1001
)

– Sortiert von niedrig bis hoch nach Durchschnittsnoten jedes Fachs und in absteigender Reihenfolge der Bestehensquote. Ergänzung: concat()
– Die Methode dient dazu, zwei oder mehr Arrays zu verbinden, und die prozentuale Darstellungsmethode CONCAT (Wert 1/Wert 2*100, '%')
berechnet die Bestehensquote jedes Fachs: Anzahl Passanten/Gesamtzahl von Leuten

Berechnen Sie die Anzahl der Passanten für jedes Fach:

select cid cid2,count(1) c2 from sc
where score>=60 group by cid

select s1.cid,avg(s1.score) avg_sc,concat(t.c2/count(s1.score)*100,'%') rate
from sc s1
left join (
select cid cid2,count(1) c2 from sc
where score>=60 group by cid
) t
on s1.cid = t.cid2
group by s1.cid
order by avg_sc,rate desc


– Löschen Sie den SC-Tabelleneintrag 1 des Lehrers „Li Chun“ und die CID des Lehrers „Li Chun“

select cid from teacher t,course c where t.tid=c.tid and t.tname = '李纯'

2. SC-Tabellensätze gemäß cid löschen

delete from sc
where cid in (
select cid from teacher t,course c where t.tid=c.tid and t.tname = '李纯'
)

Guess you like

Origin blog.csdn.net/Zombie_QP/article/details/128553637