已默认会安装和登录MySQL,此处不再赘述。
创建数据集
1 | CREATE DATABASE `test`; |
2 | USE `test`; |
3 | DROP TABLE IF EXISTS course; |
4 | CREATE TABLE course( |
5 | cno INT(11) NOT NULL, |
6 | cname VARCHAR(20) NOT NULL, |
7 | tno INT(11) NOT NULL, |
8 | PRIMARY KEY (cno) |
9 | ); |
10 | INSERT INTO course(cno,cname,tno) |
11 | VALUES |
12 | (1,'企业管理',3), |
13 | (2,'马克思',1), |
14 | (3,'UML',2), |
15 | (4,'数据库',5), |
16 | (5,'物理',8), |
17 | (6,'计算机',8); |
18 | DROP TABLE IF EXISTS sc; |
19 | CREATE TABLE sc( |
20 | sno INT(11) NOT NULL, |
21 | cno INT(11) NOT NULL, |
22 | score INT(11) NOT NULL |
23 | ); |
24 | INSERT INTO sc(sno,cno,score) |
25 | VALUES (1,1,80),(1,2,86),(1,3,83),(1,4,89),(2,1,50),(2,2,36),(2,3,43),(2,4,59),(3,1,50),(3,2,96),(3,3,73),(3,4,69),(4,1,90),(4,2,36),(4,3,88),(4,4,99),(5,1,90),(5,2,96),(5,3,98),(5,4,99),(6,1,70),(6,2,66),(6,3,58),(6,4,79),(6,5,79),(6,6,79),(7,1,80),(7,2,76),(7,3,68),(7,4,59),(7,5,89),(1,5,80),(1,6,90); |
26 | DROP TABLE IF EXISTS student; |
27 | CREATE TABLE student( |
28 | sno INT(11) NOT NULL, |
29 | sname VARCHAR(20) NOT NULL, |
30 | sage DATETIME NOT NULL, |
31 | ssex CHAR(2) NOT NULL, |
32 | PRIMARY KEY (sno) |
33 | ); |
34 | INSERT INTO student(sno,sname,sage,ssex) |
35 | VALUES |
36 | (1,'张三','1980-01-23 00:00:00','男'), |
37 | (2,'李四','1982-12-12 00:00:00','男'), |
38 | (3,'张飒','1981-09-09 00:00:00','男'), |
39 | (4,'莉莉','1983-03-23 00:00:00','女'), |
40 | (5,'王弼','1982-06-21 00:00:00','男'), |
41 | (6,'王丽','1984-10-10 00:00:00','女'), |
42 | (7,'刘香','1980-12-22 00:00:00','女'); |
43 | DROP TABLE IF EXISTS teacher; |
44 | CREATE TABLE teacher( |
45 | tno INT(3) NOT NULL, |
46 | tname VARCHAR(20) NOT NULL, |
47 | PRIMARY KEY (tno) |
48 | ); |
49 | INSERT INTO teacher(tno,tname) |
50 | VALUES(1,'张老师'),(2,'王老师'),(3,'李老师'),(4,'赵老师'),(5,'刘老师'),(6,'向老师'),(7,'李文静'),(8,'叶平'); |
题目练习
- 1.查询课程1的成绩比课程2的成绩高的所有学生的学号
1SELECT2a.*3FROM4sc AS a5LEFT JOIN6sc AS b7ON8a.sno = b.sno9WHERE10a.cno = 1 AND11b.cno = 2 AND12a.score > b.score; - 2.查询平均成绩大于60分的同学的学号和平均成绩
1SELECT2sno,3AVG( score ) AS score4FROM5sc6GROUP BY7sno8HAVING9score > 60; - 3.查询所有同学的学号、姓名、选课数、总成绩
1SELECT2sst.sno AS '学号',3sst.sname AS '姓名',4COUNT( ssc.cno ) AS '选课数',5SUM( ssc.score ) AS '总成绩'6FROM7sc AS ssc,8student AS sst9WHERE10ssc.sno = sst.sno11GROUP BY12sst.sno; - 4.查询姓“李”的老师的个数
1SELECT2COUNT(teacher.tname) AS "个数"3FROM4teacher5WHERE6teacher.tname LIKE "李%"; - 5.查询没学过“叶平”老师课的同学的学号、姓名
1SELECT2sno,3sname4FROM5student6WHERE7sno NOT IN8(9SELECT10DISTINCT(a.sno)11FROM12sc AS a13WHERE14a.cno > 4 /*杨平老师授课的为5和6*/15); - 6.查询同时学过课程1和课程2的同学的学号、姓名
1SELECT2a.sno AS 'xuehao',3a.sname AS 'xingming'4FROM5student AS a, sc6WHERE7a.sno = sc.sno8AND sc.cno IN (1,2)9GROUP BY10sc.sno11HAVING COUNT(sc.cno) >=2; - 7.查询学过“叶平”老师所教所有课程的所有同学的学号、姓名
1SELECT2a.sno AS 'xuehao',3a.sname AS 'xingming'4FROM5student AS a,6sc AS b,7course AS c,8teacher AS d9WHERE10a.sno = b.sno AND b.cno = c.cno AND c.tno = d.tno AND d.tname = '叶平'11GROUP BY a.sno12HAVING COUNT(b.cno) >=2; - 8.查询所有课程成绩小于60分的同学的学号、姓名
1SELECT2student.sno AS 'xuehao',3student.sname AS 'xingming'4FROM5student6WHERE7student.sno NOT IN8(SELECT sc.sno FROM sc WHERE sc.score >=60); - 9.查询没有学全所有课的同学的学号、姓名
1SELECT2student.sno AS 'xuehao',3student.sname AS 'xingming'4FROM5student6WHERE7student.sno NOT IN(8SELECT9sc.sno10FROM11sc,course12WHERE13sc.cno = course.cno14GROUP BY sc.sno15HAVING COUNT(sc.cno) >=616); - 10.查询至少有一门课程 与 学号为1的同学所学课程 相同的同学的学号和姓名
1SELECT2DISTINCT3sst.sno AS '学号',4sst.sname AS '姓名'5FROM6student sst, sc7WHERE8sst.sno=sc.sno9AND sst.sno!=110AND sc.cno IN11(SELECT cno FROM sc WHERE sno=1);