SQL语句编写的练习(MySQL)

一、建表

1、学生表(Student)

学号 | 姓名 | 性别 | 出生年月 | 所在班级

create table Student(
sno varchar(20) primary key,
sname varchar(20) not null,
ssex varchar(10) not null,
sbirthday datetime,
class varchar(20)
);

2、课程表 (Course)

课程号 | 课程名称 | 教师编号

create table Course(
cno varchar(20) primary key,
cname varchar(20) not null,
tno varchar(20) not null,
foreign key(tno) references Teacher(tno)
);

3、成绩表(Score)

学号 | 课程号 | 成绩

create table Score(
sno varchar(20) not null,
cno varchar(20) not null,
degree decimal,
foreign key(sno) references student(sno),
foreign key(cno) references course(cno),
primary key(sno,cno)
);

4、教师表(Teacher)

教师编号 | 教师名称 | 教师性别 | 教师出生年月日 | 职称 | 所在部门

create table Teacher(
tno varchar(20) primary key,
tname varchar(20) not null,
tsex varchar(10) not null,
tbirthday datetime,
prof varchar(20) not null,
depart varchar(20) not null
);

二、添加数据

1、添加学生信息

insert into student values('108','小红','女','1997-02-23','95033');

insert into student values('107','小黑','男','1597-04-23','95034');

insert into student values('103','张三','女','1999-03-23','95036');

insert into student values('106','李四','男','2000-02-23','95035');

insert into student values('104','李白','男','1897-12-23','95034');

insert into student values('105','李芳','女','1997-02-23','95032');

insert into student values('101','大明','男','1597-04-23','95035');

insert into student values('102','许仙','女','1499-03-23','95033');

insert into student values('109','小芳','男','2010-02-23','95037');

2、添加教师信息

insert into teacher values('804','李成','男','1984-12-03','副教授','计算机系');
insert into teacher values('856','张旭','男','1974-11-03','教授','电子工程系');
insert into teacher values('825','王萍','女','1984-12-03','助教','计算机系');
insert into teacher values('831','刘冰','女','1994-12-03','讲师','电子工程系');

3、添加课程表信息

insert into  course values('3-105','计算机导论','825');
insert into course values('3-245','c操作系统','804');
insert into course values('6-166','数字电路','856');
insert into course values('9-888','高等数学','831');

4、添加成绩表信息

insert into score values('108','3-245','87');
insert into score values('105','3-245','75');
insert into score values('109','3-245','68');
insert into score values('103','3-105','89');
insert into score values('105','3-105','88');
insert into score values('109','3-105','65');
insert into score values('103','3-105','64');
insert into score values('105','3-105','94');
insert into score values('109','6-166','87');
insert into score values('103','6-166','67');
insert into score values('105','6-166','98');
insert into score values('109','9-888','87');

三、查询练习

1、查询student表的所有记录

mysql> select * from student;

±----±-------±-----±--------------------±------+
| sno | sname | ssex | sbirthday | class |
±----±-------±-----±--------------------±------+
| 101 | 大明 | 男 | 1597-04-23 00:00:00 | 95035 |
| 102 | 许仙 | 女 | 1499-03-23 00:00:00 | 95033 |
| 103 | 张三 | 女 | 1999-03-23 00:00:00 | 95036 |
| 104 | 李白 | 男 | 1897-12-23 00:00:00 | 95034 |
| 105 | 李芳 | 女 | 1997-02-23 00:00:00 | 95032 |
| 106 | 李四 | 男 | 2000-02-23 00:00:00 | 95035 |
| 107 | 小黑 | 男 | 1597-04-23 00:00:00 | 95034 |
| 108 | 小红 | 女 | 1997-02-23 00:00:00 | 95033 |
| 109 | 小芳 | 男 | 2010-02-23 00:00:00 | 95037 |
±----±-------±-----±--------------------±------+
9 rows in set (0.01 sec)

2、查询student表中的所有记录的sname、ssex\class

select sname,ssex,class from student;

mysql> select sname,ssex,class from student;
±-------±-----±------+
| sname | ssex | class |
±-------±-----±------+
| 大明 | 男 | 95035 |
| 许仙 | 女 | 95033 |
| 张三 | 女 | 95036 |
| 李白 | 男 | 95034 |
| 李芳 | 女 | 95032 |
| 李四 | 男 | 95035 |
| 小黑 | 男 | 95034 |
| 小红 | 女 | 95033 |
| 小芳 | 男 | 95037 |
±-------±-----±------+
9 rows in set (0.00 sec)

3、查询教师所有的单位不重复的depart列

distinct排除重复

select distinct depart from teacher;

mysql> select distinct depart from teacher;
±----------------+
| depart |
±----------------+
| 计算机系 |
| 电子工程系 |
±----------------+
2 rows in set (0.10 sec)

4、查询score表中成绩在60到80的所有的记录

查询区间 between …and…

select * from score where degree>60 and degree<80;

mysql> select * from score where degree>60 and degree<80;
±----±------±-------+
| sno | cno | degree |
±----±------±-------+
| 103 | 6-166 | 67 |
| 105 | 3-245 | 75 |
| 109 | 3-105 | 65 |
| 109 | 3-245 | 68 |
±----±------±-------+
4 rows in set (0.34 sec)

select * from score where degree between 60 and 80;

mysql> select * from score where degree between 60 and 80;
±----±------±-------+
| sno | cno | degree |
±----±------±-------+
| 103 | 6-166 | 67 |
| 105 | 3-245 | 75 |
| 109 | 3-105 | 65 |
| 109 | 3-245 | 68 |
±----±------±-------+
4 rows in set (0.01 sec)

5、查询score表中成绩为85,86或88的记录。

表或者关系的查询 in

select * from score where degree in(85,86,88);

mysql> select * from score where degree in(85,86,88);
±----±------±-------+
| sno | cno | degree |
±----±------±-------+
| 105 | 3-105 | 88 |
±----±------±-------+
1 row in set (0.35 sec)

6、查询student表中95031班或者性别为女的学生记录

select * from student where class='95033' or ssex='女';

mysql> select * from student where class=‘95033’ or ssex=‘女’;
±----±-------±-----±--------------------±------+
| sno | sname | ssex | sbirthday | class |
±----±-------±-----±--------------------±------+
| 102 | 刘思 | 男 | 1499-03-23 00:00:00 | 95033 |
| 103 | 张三 | 女 | 1999-03-23 00:00:00 | 95036 |
| 105 | 李芳 | 女 | 1997-02-23 00:00:00 | 95032 |
| 108 | 小红 | 女 | 1997-02-23 00:00:00 | 95033 |
±----±-------±-----±--------------------±------+
4 rows in set (0.00 sec)

7、以class降序查询student表的所有记录

升序 降序

select * from student order by class desc;

mysql> select * from student order by class desc;
±----±-------±-----±--------------------±------+
| sno | sname | ssex | sbirthday | class |
±----±-------±-----±--------------------±------+
| 109 | 小芳 | 男 | 2010-02-23 00:00:00 | 95037 |
| 103 | 张三 | 女 | 1999-03-23 00:00:00 | 95036 |
| 101 | 大明 | 男 | 1597-04-23 00:00:00 | 95035 |
| 106 | 李四 | 男 | 2000-02-23 00:00:00 | 95035 |
| 104 | 李白 | 男 | 1897-12-23 00:00:00 | 95034 |
| 107 | 小黑 | 男 | 1597-04-23 00:00:00 | 95034 |
| 102 | 刘思 | 男 | 1499-03-23 00:00:00 | 95033 |
| 108 | 小红 | 女 | 1997-02-23 00:00:00 | 95033 |
| 105 | 李芳 | 女 | 1997-02-23 00:00:00 | 95032 |
±----±-------±-----±--------------------±------+
9 rows in set (0.01 sec)

–升序 asc moren
mysql> select * from student order by sno asc;
±----±-------±-----±--------------------±------+
| sno | sname | ssex | sbirthday | class |
±----±-------±-----±--------------------±------+
| 101 | 大明 | 男 | 1597-04-23 00:00:00 | 95035 |
| 102 | 刘思 | 男 | 1499-03-23 00:00:00 | 95033 |
| 103 | 张三 | 女 | 1999-03-23 00:00:00 | 95036 |
| 104 | 李白 | 男 | 1897-12-23 00:00:00 | 95034 |
| 105 | 李芳 | 女 | 1997-02-23 00:00:00 | 95032 |
| 106 | 李四 | 男 | 2000-02-23 00:00:00 | 95035 |
| 107 | 小黑 | 男 | 1597-04-23 00:00:00 | 95034 |
| 108 | 小红 | 女 | 1997-02-23 00:00:00 | 95033 |
| 109 | 小芳 | 男 | 2010-02-23 00:00:00 | 95037 |
±----±-------±-----±--------------------±------+
9 rows in set (0.00 sec)

8、以cno升序,degree降序查询score表的所有记录

select * from score order by cno ,degree desc;

mysql> select * from score order by cno ,degree desc;
±----±------±-------+
| sno | cno | degree |
±----±------±-------+
| 103 | 3-105 | 89 |
| 105 | 3-105 | 88 |
| 109 | 3-105 | 65 |
| 108 | 3-245 | 87 |
| 105 | 3-245 | 75 |
| 109 | 3-245 | 68 |
| 105 | 6-166 | 98 |
| 109 | 6-166 | 87 |
| 103 | 6-166 | 67 |
| 109 | 9-888 | 87 |
±----±------±-------+
10 rows in set (0.00 sec)

9、查询 9501班的学生人数

统计count

select count(*) from student where class='95033';

mysql> select count() from student where class=‘95033’;
±---------+
| count(
) |
±---------+
| 2 |
±---------+
1 row in set (0.01 sec)

10、查询score表中的最高分的学生学号和课程号(子查询或者排序)

select sno,cno from score where degree=(select max(degree) from score);

–1、找到最高分
select max(degree) from score
–2、根据最高分查询学号和课程号

mysql> select sno,cno from score where degree=(select max(degree) from score);
±----±------+
| sno | cno |
±----±------+
| 105 | 6-166 |
±----±------+
1 row in set (0.01 sec)

select sno,cno ,degree from score where degree=(select max(degree) from score);

mysql> select sno,cno ,degree from score where degree=(select max(degree) from score);
±----±------±-------+
| sno | cno | degree |
±----±------±-------+
| 105 | 6-166 | 98 |
±----±------±-------+
1 row in set (0.00 sec)

–根据分数最少值查询学号和课程号
select sno,cno ,degree from score where degree=(select min(degree) from score);

select  sno,cno ,degree from score order by degree desc limit 0,1;

–limit 第一个数字表示从多少开始
–第二个数字代表查询几条数据

mysql> select sno,cno ,degree from score order by degree desc limit 0,1;
±----±------±-------+
| sno | cno | degree |
±----±------±-------+
| 105 | 6-166 | 98 |
±----±------±-------+
1 row in set (0.00 sec)

mysql> select * from score;
±----±------±-------+
| sno | cno | degree |
±----±------±-------+
| 103 | 3-105 | 89 |
| 103 | 6-166 | 67 |
| 105 | 3-105 | 88 |
| 105 | 3-245 | 75 |
| 105 | 6-166 | 98 |
| 108 | 3-245 | 87 |
| 109 | 3-105 | 65 |
| 109 | 3-245 | 68 |
| 109 | 6-166 | 87 |
| 109 | 9-888 | 87 |
±----±------±-------+
10 rows in set (0.00 sec)

11、计算每门课的平均成绩

–avg

select avg(degree) from score where cno='3-105';

mysql> select avg(degree) from score where cno=‘3-105’;
±------------+
| avg(degree) |
±------------+
| 80.6667 |
±------------+
1 row in set (0.00 sec)

mysql>

select cno,avg(degree) from score group by cno;
–group by 分组
mysql> select cno,avg(degree) from score group by cno;
±------±------------+
| cno | avg(degree) |
±------±------------+
| 3-105 | 80.6667 |
| 3-245 | 76.6667 |
| 6-166 | 84.0000 |
| 9-888 | 87.0000 |
±------±------------+
4 rows in set (0.00 sec)

12、查询score表中至少有两名同学选修的并且以3开头的课程的平均分

select cno,avg(degree) ,count(*) from score
group by cno
having count(cno)>=2 and
cno like '3%';

–模糊查询like

mysql> select cno,avg(degree) ,count() from score group by cno having count(cno)>=2 and cno like ‘3%’;
±------±------------±---------+
| cno | avg(degree) | count(
) |
±------±------------±---------+
| 3-105 | 80.6667 | 3 |
| 3-245 | 76.6667 | 3 |
±------±------------±---------+
2 rows in set (0.00 sec)

mysql>

13、查询分数大于70小于90的sno列

select sno from score where degree between 70 and 90;

mysql> select sno from score where degree between 70 and 90;
±----+
| sno |
±----+
| 103 |
| 105 |
| 105 |
| 108 |
| 109 |
| 109 |
±----+
6 rows in set (0.00 sec)

select sno,degree from score where degree between 70 and 90;

14、查询所有学生的sname、con、和degree列

select sno,sname from student;

mysql> select sno,sname from student;
±----±-------+
| sno | sname |
±----±-------+
| 101 | 大明 |
| 102 | 刘思 |
| 103 | 张三 |
| 104 | 李白 |
| 105 | 李芳 |
| 106 | 李四 |
| 107 | 小黑 |
| 108 | 小红 |
| 109 | 小芳 |
±----±-------+
9 rows in set (0.00 sec)

select sno,cno,degree from score;

mysql> select sno,cno,degree from score;
±----±------±-------+
| sno | cno | degree |
±----±------±-------+
| 103 | 3-105 | 89 |
| 103 | 6-166 | 67 |
| 105 | 3-105 | 88 |
| 105 | 3-245 | 75 |
| 105 | 6-166 | 98 |
| 108 | 3-245 | 87 |
| 109 | 3-105 | 65 |
| 109 | 3-245 | 68 |
| 109 | 6-166 | 87 |
| 109 | 9-888 | 87 |
±----±------±-------+
10 rows in set (0.00 sec)

select sname,cno,degree from student,score where student.sno=score.sno;

mysql> select sname,cno,degree from student,score where student.sno=score.sno;
±-------±------±-------+
| sname | cno | degree |
±-------±------±-------+
| 张三 | 3-105 | 89 |
| 张三 | 6-166 | 67 |
| 李芳 | 3-105 | 88 |
| 李芳 | 3-245 | 75 |
| 李芳 | 6-166 | 98 |
| 小红 | 3-245 | 87 |
| 小芳 | 3-105 | 65 |
| 小芳 | 3-245 | 68 |
| 小芳 | 6-166 | 87 |
| 小芳 | 9-888 | 87 |
±-------±------±-------+
10 rows in set (0.00 sec)

15、查询所有学生的sno,cname和degree列

select sno,cname,degree from course,score where  score.cno=course.cno;

mysql> select sno,cname,degree from course,score where score.cno=course.cno;
±----±----------------±-------+
| sno | cname | degree |
±----±----------------±-------+
| 103 | 计算机导论 | 89 |
| 103 | 数字电路 | 67 |
| 105 | 计算机导论 | 88 |
| 105 | c操作系统 | 75 |
| 105 | 数字电路 | 98 |
| 108 | c操作系统 | 87 |
| 109 | 计算机导论 | 65 |
| 109 | c操作系统 | 68 |
| 109 | 数字电路 | 87 |
| 109 | 高等数学 | 87 |
±----±----------------±-------+
10 rows in set (0.34 sec)

16、查询所有学生的sname,cname和degree列

select sno,sname from student;

mysql> select sno,sname from student;
±----±-------+
| sno | sname |
±----±-------+
| 101 | 大明 |
| 102 | 刘思 |
| 103 | 张三 |
| 104 | 李白 |
| 105 | 李芳 |
| 106 | 李四 |
| 107 | 小黑 |
| 108 | 小红 |
| 109 | 小芳 |
±----±-------+
9 rows in set (0.00 sec)

select sname,cname,degree from student,course,score where student.sno=score.sno and course.cno=score.cno;

mysql> select sname,cname,degree from student,course,score where student.sno=score.sno and course.cno=score.cno;
±-------±----------------±-------+
| sname | cname | degree |
±-------±----------------±-------+
| 张三 | 计算机导论 | 89 |
| 张三 | 数字电路 | 67 |
| 李芳 | 计算机导论 | 88 |
| 李芳 | c操作系统 | 75 |
| 李芳 | 数字电路 | 98 |
| 小红 | c操作系统 | 87 |
| 小芳 | 计算机导论 | 65 |
| 小芳 | c操作系统 | 68 |
| 小芳 | 数字电路 | 87 |
| 小芳 | 高等数学 | 87 |
±-------±----------------±-------+
10 rows in set (0.00 sec)

select sname,cname,degree,student.sno,course.cno from student,course,score where student.sno=score.sno and course.cno=score.cno;

mysql> select sname,cname,degree,student.sno,course.cno from student,course,score where student.sno=score.sno and course.cno=score.cno;
±-------±----------------±-------±----±------+
| sname | cname | degree | sno | cno |
±-------±----------------±-------±----±------+
| 张三 | 计算机导论 | 89 | 103 | 3-105 |
| 张三 | 数字电路 | 67 | 103 | 6-166 |
| 李芳 | 计算机导论 | 88 | 105 | 3-105 |
| 李芳 | c操作系统 | 75 | 105 | 3-245 |
| 李芳 | 数字电路 | 98 | 105 | 6-166 |
| 小红 | c操作系统 | 87 | 108 | 3-245 |
| 小芳 | 计算机导论 | 65 | 109 | 3-105 |
| 小芳 | c操作系统 | 68 | 109 | 3-245 |
| 小芳 | 数字电路 | 87 | 109 | 6-166 |
| 小芳 | 高等数学 | 87 | 109 | 9-888 |
±-------±----------------±-------±----±------+
10 rows in set (0.00 sec)

17、 查询95031班学生每门课的平均分

mysql> select * from student where class=‘95037’;
±----±-------±-----±--------------------±------+
| sno | sname | ssex | sbirthday | class |
±----±-------±-----±--------------------±------+
| 109 | 小芳 | 男 | 2010-02-23 00:00:00 | 95037 |
±----±-------±-----±--------------------±------+
1 row in set (0.00 sec)

select * from score where sno in(select sno from student where class=‘95037’);
mysql> select * from score where sno in(select sno from student where class=‘95037’);
±----±------±-------+
| sno | cno | degree |
±----±------±-------+
| 109 | 3-105 | 65 |
| 109 | 3-245 | 68 |
| 109 | 6-166 | 87 |
| 109 | 9-888 | 87 |
±----±------±-------+
4 rows in set (0.00 sec)

select cno,avg(degree)
from score
where sno in(select sno from student where class='95037')
group by cno;

mysql> select cno,avg(degree)
-> from score
-> where sno in(select sno from student where class=‘95037’)
-> group by cno;
±------±------------+
| cno | avg(degree) |
±------±------------+
| 3-105 | 65.0000 |
| 3-245 | 68.0000 |
| 6-166 | 87.0000 |
| 9-888 | 87.0000 |
±------±------------+
4 rows in set (0.00 sec)

18、查询选修3-105课程的成绩高于109号同学3-105成绩的所有同学的记录

select degree from score where sno='109' and cno='3-105';

mysql> select degree from score where sno=‘109’ and cno=‘3-105’;
±-------+
| degree |
±-------+
| 65 |
±-------+
1 row in set (0.00 sec)

select * from score where cno=‘3-105’ and degree>(select degree from score where sno=‘109’ and cno=‘3-105’);

mysql> select * from score where cno=‘3-105’ and degree>(select degree from score where sno=‘109’ and cno=‘3-105’);
±----±------±-------+
| sno | cno | degree |
±----±------±-------+
| 103 | 3-105 | 89 |
| 105 | 3-105 | 88 |
±----±------±-------+
2 rows in set (0.00 sec)

19、查询成绩高于学号为109 、课程号为3-105的成绩的所有记录


select * from score where degree>(select degree from score where sno='109' and cno='3-105');

mysql> select * from score where degree>(select degree from score where sno=‘109’ and cno=‘3-105’);
±----±------±-------+
| sno | cno | degree |
±----±------±-------+
| 103 | 3-105 | 89 |
| 103 | 6-166 | 67 |
| 105 | 3-105 | 88 |
| 105 | 3-245 | 75 |
| 105 | 6-166 | 98 |
| 108 | 3-245 | 87 |
| 109 | 3-245 | 68 |
| 109 | 6-166 | 87 |
| 109 | 9-888 | 87 |
±----±------±-------+
9 rows in set (0.00 sec)

20、查询和学号为108、101的同学同年出生的所有学生的sno、sname和sbirthday列

select year(sbirthday) from student where sno in(108,109);

mysql> select year(sbirthday) from student where sno in(108,109);
±----------------+
| year(sbirthday) |
±----------------+
| 1997 |
| 2010 |
±----------------+
2 rows in set (0.11 sec)

select * from student
where year(sbirthday)in(select year(sbirthday) from student where sno in(108,109));

mysql> select * from student
-> where year(sbirthday)in(select year(sbirthday) from student where sno in(108,109));
±----±-------±-----±--------------------±------+
| sno | sname | ssex | sbirthday | class |
±----±-------±-----±--------------------±------+
| 105 | 李芳 | 女 | 1997-02-23 00:00:00 | 95032 |
| 108 | 小红 | 女 | 1997-02-23 00:00:00 | 95033 |
| 109 | 小芳 | 男 | 2010-02-23 00:00:00 | 95037 |
±----±-------±-----±--------------------±------+
3 rows in set (0.00 sec)

21、查询张旭教师任课的学生成绩。

 select * from teacher where tname='张旭';

mysql> select * from teacher where tname=‘张旭’;
±----±-------±-----±--------------------±-------±----------------+
| tno | tname | tsex | tbirthday | prof | depart |
±----±-------±-----±--------------------±-------±----------------+
| 856 | 张旭 | 男 | 1974-11-03 00:00:00 | 教授 | 电子工程系 |
±----±-------±-----±--------------------±-------±----------------+
1 row in set (0.00 sec)

mysql> select * from course where tno=(select tno from teacher where tname=‘张旭’ );
±------±-------------±----+
| cno | cname | tno |
±------±-------------±----+
| 6-166 | 数字电路 | 856 |
±------±-------------±----+
1 row in set (0.33 sec)

select * from score where cno=(select cno from course where tno=(select tno from teacher where tname=‘张旭’ ));

mysql> select * from score where cno=(select cno from course where tno=(select tno from teacher where tname=‘张旭’ ));
±----±------±-------+
| sno | cno | degree |
±----±------±-------+
| 103 | 6-166 | 67 |
| 105 | 6-166 | 98 |
| 109 | 6-166 | 87 |
±----±------±-------+
3 rows in set (0.00 sec)

22、查询选修某课程的同学人数多于2人的教师姓名

select * from score group by cno having count(cno)>2 ;

mysql> select * from score group by cno having count(cno)>2 ;
±----±------±-------+
| sno | cno | degree |
±----±------±-------+
| 103 | 3-105 | 89 |
| 105 | 3-245 | 75 |
| 103 | 6-166 | 67 |
±----±------±-------+
3 rows in set (0.00 sec)

select * from course where cno in(select cno from score group by cno having count(cno)>2);

mysql> select * from course where cno in(select cno from score group by cno having count(cno)>2);
±------±----------------±----+
| cno | cname | tno |
±------±----------------±----+
| 3-105 | 计算机导论 | 825 |
| 3-245 | c操作系统 | 804 |
| 6-166 | 数字电路 | 856 |
±------±----------------±----+
3 rows in set (0.00 sec)

select tname from teacher where tno in(select tno from course where cno in(select cno from score group by cno having count(cno)>2));

mysql> select tname from teacher where tno in(select tno from course where cno in(select cno from score group by cno having count(cno)>2));
±-------+
| tname |
±-------+
| 李成 |
| 王萍 |
| 张旭 |
±-------+
3 rows in set (0.00 sec)

23、查询95033班和95035班全体学生的记录

select * from student
where class in(95033,95035);

mysql> select * from student
-> where class in(95033,95035);
±----±-------±-----±--------------------±------+
| sno | sname | ssex | sbirthday | class |
±----±-------±-----±--------------------±------+
| 101 | 大明 | 男 | 1597-04-23 00:00:00 | 95035 |
| 102 | 刘思 | 男 | 1499-03-23 00:00:00 | 95033 |
| 106 | 李四 | 男 | 2000-02-23 00:00:00 | 95035 |
| 108 | 小红 | 女 | 1997-02-23 00:00:00 | 95033 |
±----±-------±-----±--------------------±------+
4 rows in set (0.00 sec)

24、查询存在有85分以上成绩的课程Cno

select * from score where degree>85;

mysql> select * from score where degree>85;
±----±------±-------+
| sno | cno | degree |
±----±------±-------+
| 103 | 3-105 | 89 |
| 105 | 3-105 | 88 |
| 105 | 6-166 | 98 |
| 108 | 3-245 | 87 |
| 109 | 6-166 | 87 |
| 109 | 9-888 | 87 |
±----±------±-------+
6 rows in set (0.00 sec)

25、查询出计算机系教师所教课程的成绩表

select * from teacher where depart='计算机系';

mysql> select * from teacher where depart=‘计算机系’;
±----±-------±-----±--------------------±----------±-------------+
| tno | tname | tsex | tbirthday | prof | depart |
±----±-------±-----±--------------------±----------±-------------+
| 804 | 李成 | 男 | 1984-12-03 00:00:00 | 副教授 | 计算机系 |
| 825 | 王萍 | 女 | 1984-12-03 00:00:00 | 助教 | 计算机系 |
±----±-------±-----±--------------------±----------±-------------+
2 rows in set (0.00 sec)

select * from course where tno in(select tno from teacher where depart=‘计算机系’);

mysql> select * from course where tno in(select tno from teacher where depart=‘计算机系’);
±------±----------------±----+
| cno | cname | tno |
±------±----------------±----+
| 3-245 | c操作系统 | 804 |
| 3-105 | 计算机导论 | 825 |
±------±----------------±----+
2 rows in set (0.00 sec)

select degree,cno from score where cno in(select cno from course where tno in(select tno from teacher where depart=‘计算机系’));

mysql> select degree,cno from score where cno in(select cno from course where tno in(select tno from teacher where depart=‘计算机系’));
±-------±------+
| degree | cno |
±-------±------+
| 75 | 3-245 |
| 87 | 3-245 |
| 68 | 3-245 |
| 89 | 3-105 |
| 88 | 3-105 |
| 65 | 3-105 |
±-------±------+
6 rows in set (0.00 sec)

26、查询计算机系和电子工程系不同职称的教师的tname和prof

–union求并集

select * from teacher where depart=‘计算机系’;

mysql> select * from teacher where depart=‘计算机系’;
±----±-------±-----±--------------------±----------±-------------+
| tno | tname | tsex | tbirthday | prof | depart |
±----±-------±-----±--------------------±----------±-------------+
| 804 | 李成 | 男 | 1984-12-03 00:00:00 | 副教授 | 计算机系 |
| 825 | 王萍 | 女 | 1984-12-03 00:00:00 | 助教 | 计算机系 |
±----±-------±-----±--------------------±----------±-------------+
2 rows in set (0.00 sec)

select * from teacher where prof not in(select prof from teacher where depart='计算机系');

mysql> select * from teacher where prof not in(select prof from teacher where depart=‘计算机 系’);
±----±-------±-----±--------------------±-------±----------------+
| tno | tname | tsex | tbirthday | prof | depart |
±----±-------±-----±--------------------±-------±----------------+
| 856 | 张旭 | 男 | 1974-11-03 00:00:00 | 教授 | 电子工程系 |
±----±-------±-----±--------------------±-------±----------------+
1 row in set (0.00 sec)

select * from teacher where prof not in(select prof from teacher where depart=‘电子工程系’);

mysql> select * from teacher where prof not in(select prof from teacher where depart=‘电子工 程系’);
±----±-------±-----±--------------------±----------±-------------+
| tno | tname | tsex | tbirthday | prof | depart |
±----±-------±-----±--------------------±----------±-------------+
| 804 | 李成 | 男 | 1984-12-03 00:00:00 | 副教授 | 计算机系 |
±----±-------±-----±--------------------±----------±-------------+
1 row in set (0.00 sec)


select * from teacher where prof not in(select prof from teacher where depart='计算机系')
union
select * from teacher where prof not in(select prof from teacher where depart='电子工程系');

mysql> select * from teacher where prof not in(select prof from teacher where depart=‘计算机 系’)
-> union
-> select * from teacher where prof not in(select prof from teacher where depart=‘电子工 程系’);
±----±-------±-----±--------------------±----------±----------------+
| tno | tname | tsex | tbirthday | prof | depart |
±----±-------±-----±--------------------±----------±----------------+
| 856 | 张旭 | 男 | 1974-11-03 00:00:00 | 教授 | 电子工程系 |
| 804 | 李成 | 男 | 1984-12-03 00:00:00 | 副教授 | 计算机系 |
±----±-------±-----±--------------------±----------±----------------+
2 rows in set (0.01 sec)

27、查询选修编号为3-105课程且成绩至少高于编号为3-245的同学的cno\sno和degree

并按照degree从高到低次序排序

select * from score where cno='3-105';

mysql> select * from score where cno=‘3-105’;
±----±------±-------+
| sno | cno | degree |
±----±------±-------+
| 103 | 3-105 | 89 |
| 105 | 3-105 | 88 |
| 109 | 3-105 | 65 |
±----±------±-------+
3 rows in set (0.00 sec)

select * from score where cno=‘3-245’;
mysql> select * from score where cno=‘3-245’;
±----±------±-------+
| sno | cno | degree |
±----±------±-------+
| 105 | 3-245 | 75 |
| 108 | 3-245 | 87 |
| 109 | 3-245 | 68 |
±----±------±-------+
3 rows in set (0.00 sec)

select * from score
where cno='3-105'
and degree >any(select degree from score where cno='3-245')
order by degree desc;

mysql> select * from score
-> where cno=‘3-105’
-> and degree >any(select degree from score where cno=‘3-245’)
-> order by degree desc;
±----±------±-------+
| sno | cno | degree |
±----±------±-------+
| 103 | 3-105 | 89 |
| 105 | 3-105 | 88 |
±----±------±-------+
2 rows in set (0.00 sec)

28、查询选修编号为3-105课程且成绩高于编号为3-245的同学的cno\sno和degree


select * from score
where cno='3-105'
and degree >all(select degree from score where cno='3-245')
order by degree desc;

mysql> select * from score
-> where cno=‘3-105’
-> and degree >all(select degree from score where cno=‘3-245’)
-> order by degree desc;
±----±------±-------+
| sno | cno | degree |
±----±------±-------+
| 103 | 3-105 | 89 |
| 105 | 3-105 | 88 |
±----±------±-------+
2 rows in set (0.00 sec)

29、查询所有教师和同学的name、sex和birthday

别名 as

select sname as name,ssex as sex,sbirthday as birthday from student
union
select tname,tsex,tbirthday from teacher;

mysql> select sname as name,ssex as sex,sbirthday as birthday from student
-> union
-> select tname,tsex,tbirthday from teacher;
±-------±----±--------------------+
| name | sex | birthday |
±-------±----±--------------------+
| 大明 | 男 | 1597-04-23 00:00:00 |
| 刘思 | 男 | 1499-03-23 00:00:00 |
| 张三 | 女 | 1999-03-23 00:00:00 |
| 李白 | 男 | 1897-12-23 00:00:00 |
| 李芳 | 女 | 1997-02-23 00:00:00 |
| 李四 | 男 | 2000-02-23 00:00:00 |
| 小黑 | 男 | 1597-04-23 00:00:00 |
| 小红 | 女 | 1997-02-23 00:00:00 |
| 小芳 | 男 | 2010-02-23 00:00:00 |
| 李成 | 男 | 1984-12-03 00:00:00 |
| 王萍 | 女 | 1984-12-03 00:00:00 |
| 刘冰 | 女 | 1994-12-03 00:00:00 |
| 张旭 | 男 | 1974-11-03 00:00:00 |
±-------±----±--------------------+
13 rows in set (0.00 sec)

30、查询所有女教师和女同学的name、sex、birthday

select sname as name,ssex as sex,sbirthday as birthday from student where ssex='女'
union
select tname,tsex,tbirthday from teacher where tsex='女';

mysql> select sname as name,ssex as sex,sbirthday as birthday from student where ssex=‘女’
-> union
-> select tname,tsex,tbirthday from teacher where tsex=‘女’;
±-------±----±--------------------+
| name | sex | birthday |
±-------±----±--------------------+
| 张三 | 女 | 1999-03-23 00:00:00 |
| 李芳 | 女 | 1997-02-23 00:00:00 |
| 小红 | 女 | 1997-02-23 00:00:00 |
| 王萍 | 女 | 1984-12-03 00:00:00 |
| 刘冰 | 女 | 1994-12-03 00:00:00 |
±-------±----±--------------------+
5 rows in set (0.00 sec)

31、查询成绩比该课程平均成绩低的学生成绩表

select cno,avg(degree) from score group by cno;

select * from score a where degree<(select avg(degree) from score  b where a.cno=b.cno);

mysql> select * from score a where degree<(select avg(degree) from score b where a.cno=b.cno);
±----±------±-------+
| sno | cno | degree |
±----±------±-------+
| 103 | 6-166 | 67 |
| 105 | 3-245 | 75 |
| 109 | 3-105 | 65 |
| 109 | 3-245 | 68 |
±----±------±-------+
4 rows in set (0.00 sec)

32、查询所有任课教师的Tname和depart;

select tno from course;

mysql> select tno from course;
±----+
| tno |
±----+
| 804 |
| 825 |
| 831 |
| 856 |
±----+
4 rows in set (0.00 sec)

select tname,depart from teacher where tno in(select tno from course);

mysql> select tname,depart from teacher where tno in(select tno from course);
±-------±----------------+
| tname | depart |
±-------±----------------+
| 李成 | 计算机系 |
| 王萍 | 计算机系 |
| 刘冰 | 电子工程系 |
| 张旭 | 电子工程系 |
±-------±----------------+
4 rows in set (0.01 sec)

33、查询至少有两名同学的班号

select class  from student where ssex='男' group by class having count(*)>1;

mysql> select class from student where ssex=‘男’ group by class having count(*)>1;
±------+
| class |
±------+
| 95034 |
| 95035 |
±------+
2 rows in set (0.00 sec)

34、查询student表中不姓王的同学记录。

select * from student where sname not like '王%';

mysql> select * from student where sname not like ‘王%’;
±----±-------±-----±--------------------±------+
| sno | sname | ssex | sbirthday | class |
±----±-------±-----±--------------------±------+
| 101 | 大明 | 男 | 1597-04-23 00:00:00 | 95035 |
| 102 | 刘思 | 男 | 1499-03-23 00:00:00 | 95033 |
| 103 | 张三 | 女 | 1999-03-23 00:00:00 | 95036 |
| 104 | 李白 | 男 | 1897-12-23 00:00:00 | 95034 |
| 105 | 李芳 | 女 | 1997-02-23 00:00:00 | 95032 |
| 106 | 李四 | 男 | 2000-02-23 00:00:00 | 95035 |
| 107 | 小黑 | 男 | 1597-04-23 00:00:00 | 95034 |
| 108 | 小红 | 女 | 1997-02-23 00:00:00 | 95033 |
| 109 | 小芳 | 男 | 2010-02-23 00:00:00 | 95037 |
±----±-------±-----±--------------------±------+
9 rows in set (0.00 sec)

35、查询student表中每个学生的姓名和年龄

–年龄=当前年份-出生年份

select year(now());

mysql> select year(now());
±------------+
| year(now()) |
±------------+
| 2021 |
±------------+
1 row in set (0.01 sec)

select year(sbirthday) from student;

mysql> select year(sbirthday) from student;
±----------------+
| year(sbirthday) |
±----------------+
| 1597 |
| 1499 |
| 1999 |
| 1897 |
| 1997 |
| 2000 |
| 1597 |
| 1997 |
| 2010 |
±----------------+
9 rows in set (0.00 sec)

select sname,year(now())-year(sbirthday) as '年龄' from student;

mysql> select sname,year(now())-year(sbirthday) as ‘年龄’ from student;
±-------±-------+
| sname | 年龄 |
±-------±-------+
| 大明 | 424 |
| 刘思 | 522 |
| 张三 | 22 |
| 李白 | 124 |
| 李芳 | 24 |
| 李四 | 21 |
| 小黑 | 424 |
| 小红 | 24 |
| 小芳 | 11 |
±-------±-------+
9 rows in set (0.00 sec)

36、查询student表中最大和最小的sbirthday的日期值

select max(sbirthday) as '最大' ,min(sbirthday) as '最小' from student;

mysql> select max(sbirthday) as ‘最大’ ,min(sbirthday) as ‘最小’ from student;
±--------------------±--------------------+
| 最大 | 最小 |
±--------------------±--------------------+
| 2010-02-23 00:00:00 | 1499-03-23 00:00:00 |
±--------------------±--------------------+
1 row in set (0.00 sec)

37、以班号和年龄从大到小的顺序查询student表中的全部记录。

select * from student order by class desc,sbirthday ;

mysql> select * from student order by class desc,sbirthday ;
±----±-------±-----±--------------------±------+
| sno | sname | ssex | sbirthday | class |
±----±-------±-----±--------------------±------+
| 109 | 小芳 | 男 | 2010-02-23 00:00:00 | 95037 |
| 103 | 张三 | 女 | 1999-03-23 00:00:00 | 95036 |
| 101 | 大明 | 男 | 1597-04-23 00:00:00 | 95035 |
| 106 | 李四 | 男 | 2000-02-23 00:00:00 | 95035 |
| 107 | 小黑 | 男 | 1597-04-23 00:00:00 | 95034 |
| 104 | 李白 | 男 | 1897-12-23 00:00:00 | 95034 |
| 102 | 刘思 | 男 | 1499-03-23 00:00:00 | 95033 |
| 108 | 小红 | 女 | 1997-02-23 00:00:00 | 95033 |
| 105 | 李芳 | 女 | 1997-02-23 00:00:00 | 95032 |
±----±-------±-----±--------------------±------+
9 rows in set (0.00 sec)

38、查询男教师及其所上课程

select cno from course where tno in(select tno from teacher where tsex='男');

mysql> select cno from course where tno in(select tno from teacher where tsex=‘男’);
±------+
| cno |
±------+
| 3-245 |
| 6-166 |
±------+
2 rows in set (0.00 sec)

39、查询最高分同学的sno、cno,degree列

select max(degree) from score;

mysql> select max(degree) from score;
±------------+
| max(degree) |
±------------+
| 98 |
±------------+
1 row in set (0.00 sec)

select sno,cno,degree from score where degree=(select max(degree) from score);
mysql> select sno,cno,degree from score where degree=(select max(degree) from score);
±----±------±-------+
| sno | cno | degree |
±----±------±-------+
| 105 | 6-166 | 98 |
±----±------±-------+
1 row in set (0.00 sec)

40、查询和小芳同性别的所有同学的sname

select * from student where sname='小芳';

mysql> select * from student where sname=‘小芳’;
±----±-------±-----±--------------------±------+
| sno | sname | ssex | sbirthday | class |
±----±-------±-----±--------------------±------+
| 109 | 小芳 | 男 | 2010-02-23 00:00:00 | 95037 |
| 110 | 小芳 | 女 | 2003-08-12 00:00:00 | 95037 |
| 111 | 小芳 | 女 | 2013-08-12 00:00:00 | 95036 |
±----±-------±-----±--------------------±------+
3 rows in set (0.00 sec)

select ssex from student where sname=‘李白’;

mysql> select ssex from student where sname=‘李白’;
±-----+
| ssex |
±-----+
| 男 |
±-----+
1 row in set (0.00 sec)

select sname from student where ssex=(select ssex from student where sname=‘李白’);

mysql> select sname from student where ssex=(select ssex from student where sname=‘李白’);
±-------+
| sname |
±-------+
| 大明 |
| 刘思 |
| 李白 |
| 李四 |
| 小黑 |
| 小芳 |
±-------+
6 rows in set (0.00 sec)

41、查询和李白同性别并且同班同学的sname

select sname from student
where ssex=(select ssex from student where sname='李白')
and class=(select class from student where sname='李白');

mysql> select sname from student
-> where ssex=(select ssex from student where sname=‘李白’)
-> and class=(select class from student where sname=‘李白’);
±-------+
| sname |
±-------+
| 李白 |
| 小黑 |
±-------+
2 rows in set (0.00 sec)

42、查询所有选修计算机导论课程的男同学的成绩表

select * from course where cname='计算机导论';

select * from score where cno=(select cno from course where cname=‘计算机导论’);

mysql> select * from score where cno=(select cno from course where cname=‘计算机导论’);
±----±------±-------+
| sno | cno | degree |
±----±------±-------+
| 103 | 3-105 | 89 |
| 105 | 3-105 | 88 |
| 109 | 3-105 | 65 |
±----±------±-------+
3 rows in set (0.00 sec)

;

select * from score
where cno=(select cno from course where cname=‘计算机导论’)
and sno in(select sno from student where ssex=‘男’);

mysql> select * from score
-> where cno=(select cno from course where cname=‘计算机导论’)
-> and sno in(select sno from student where ssex=‘男’);
±----±------±-------+
| sno | cno | degree |
±----±------±-------+
| 109 | 3-105 | 65 |
±----±------±-------+
1 row in set (0.00 sec)

43、假设使用如下命令建立了一个grade表:

create table grade(
low int(3),
upp int(3),
grade char(1)
);

insert into grade values(90,100,‘A’);
insert into grade values(80,89,‘B’);
insert into grade values(70,79,‘C’);
insert into grade values(60,69,‘D’);
insert into grade values(0,59,‘E’);

–现在查询所有同学的sno、cno、grade列。
select sno,cno,grade from score, grade where degree between low and upp;
mysql> select sno,cno,grade from score, grade where degree between low and upp;
±----±------±------+
| sno | cno | grade |
±----±------±------+
| 103 | 3-105 | B |
| 103 | 6-166 | D |
| 105 | 3-105 | B |
| 105 | 3-245 | C |
| 105 | 6-166 | A |
| 108 | 3-245 | B |
| 109 | 3-105 | D |
| 109 | 3-245 | D |
| 109 | 6-166 | B |
| 109 | 9-888 | B |
±----±------±------+
10 rows in set (0.00 sec)

SQL语句编写的练习(MySQL)的更多相关文章

  1. 【MySQL】经典数据库SQL语句编写练习题——SQL语句扫盲

    [MySQL]数据库原理复习——SQL语言 对基本的SQL语句编写的练习题,其中的题目的答案可能会有多种书写方式. 1.题目1 1.1 关系模式 学生student:SNO:学号,SNAME:姓名,A ...

  2. php面试专题---17、MySQL的SQL语句编写考点

    php面试专题---17.MySQL的SQL语句编写考点 一.总结 一句话总结: 注意:只写精品 1.MySQL的关联UPDATE语句? 关键UPDATE A,B:UPDATE A,B SET A.c ...

  3. PHP面试 MySQL的SQL语句编写

    MySQL的SQL语句编写 面试题一 有A表(id,sex,par,c1,c2),B(id,age,c1,c2)两张表,其中A.id与B.id关联,现在要求写出一条SQL语句,将B中age>50 ...

  4. PHP如何通过SQL语句将数据写入MySQL数据库呢?

    1,php和MySQL建立连接关系 2,打开 3,接受页面数据,PHP录入到指定的表中 1.2两步可直接使用一个数据库链接文件即可:conn.php <?phpmysql_connect(&qu ...

  5. 解决乱码的方法是,在执行SQL语句之前,将MySQL以下三个系统参数设置为与服务器字符集character-set-server相同的字符集

    character-set-server/default-character-set:服务器字符集,默认情况下所采用的. character-set-database:数据库字符集. characte ...

  6. sql语句编写 有时候一个子查询可以拆分成多个子查询

    sql语句编写 有时候一个子查询可以拆分成多个子查询

  7. sql语句练习50题(Mysql版-详加注释)

    表名和字段 1.学生表       Student(s_id,s_name,s_birth,s_sex) --学生编号,学生姓名, 出生年月,学生性别 2.课程表       Course(c_id, ...

  8. sql语句练习50题(Mysql版)

    表名和字段–1.学生表Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别–2.课程表Course(c_id,c_name,t_id) – ...

  9. sql语句浅谈以及mysql遇到的问题解决见解

    mysql数据库基本操作: .显示数据库和查看mysql版本 show databases; select version(); select user();查看用户 .选择数据库 use 数据库名; ...

随机推荐

  1. Redis系列5:深入分析Cluster 集群模式

    Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) 1 背景 前面我们 ...

  2. 活动回顾|Apache DolphinScheduler x Pulsar 在线 Meetup

    关于 Apache DolphinScheduler: " Apache DolphinScheduler(Incubating) 是一个分布式去中心化.易扩展的可视化工作流任务调度系统,致 ...

  3. 创建deploymen的几种方式

    创建deployment方式有两种,一种是命令直接创建,一种是使用yaml文件 1. 直接使用命令方式: --record 参数用来记录版本,也可以忽略,建议带上 kubectl create dep ...

  4. 报错:①Tog goal specified requires a project to execute but there is no POM in this directory......②说类HelloWorld是公共的, 应在名为 HelloWorld.java 的文件中声明 public class HelloWorld......

    在运行Maven的命令时,在DOS窗口里面必须把目录切换到项目的根部,要不然命令是找不到目的地. 下图是错误示范,项目在Demo02这个目录里,就必须将目录切换到Demo02下,否则DOS窗口只有飘红 ...

  5. Spring源码学习笔记12——总结篇,IOC,Bean的生命周期,三大扩展点

    Spring源码学习笔记12--总结篇,IOC,Bean的生命周期,三大扩展点 参考了Spring 官网文档 https://docs.spring.io/spring-framework/docs/ ...

  6. 安装docker-compose--翻译

    Install Docker Compose 译文 安装 Docker Compose 你可以在macOS.Windows.64-bit Linux上运行 Compose 前提条件 Docker Co ...

  7. Docker_构建_运行总结

    样例: 构建镜像 build-image-fim-backend.sh echo "开始构建 fim-backend 镜像..." cp -rp ../target/fim-bac ...

  8. 使用Pipeline抽象业务生命周期流程

    上篇关于流程引擎的文章还是快两年以前的<微服务业务生命周期流程管控引擎>,这中间各种低代码平台层出不穷,虽然有些仅仅是OA+表单的再度包装,但有些的确是在逻辑和操作单元层面进行了真正的高度 ...

  9. Java String Pool--String s = new String("a") 到底创建了几个对象?

    本篇重点(tips): 1. String Pool 是以Java 中 String 对象是不可变的这一特性为基础的 2. String Pool是Heap(堆)中的一块特殊空间(JDK 1.7 之前 ...

  10. 阿色全息脑图,及制作软件AHMM

    阿色全息脑图 AHMM 全息脑图是按照大系统观原理开发的新型思维工具,用于升维思考. 让您以系统的观点看待世界,专注系统的结构信息--全息,抓住事物的本质,透过表象和数据发现规律. 世间每项事物都是一 ...