计算机导论sql试题,sql语句查询 练习题

sql 练习题

答案不一定正确,部分没有答案

一、已知有如下表,请用sql语句在mysql里建立相应的表

表1 学生表(student)

列名意义类型约束

sno学号varchar(3)主键

sname姓名varchar(4)非空

ssex性别varchar(2)

sbirthday生日datetime

class班级编号varchar(5)非空

表2 课程表(course)

列名意义类型约束

cno课程号varchar(5)主键

cname课程名varchar(10)非空

tno教师编号varchar(10)非空

表3 成绩表(grade)

列名意义类型约束

sno学号varchar(3)主键

cno课程号varchar(5)主键

degree分数numeric(3)非空

表4 教师表(teacher)

列名意义类型约束

tno教师编号varchar(3)主键

tname教师姓名varchar(10)非空

tsex性别varchar(2)

tbirthday生日datetime

prof职称varchar(6)非空

depart系varchar(10)非空

表5 等级表(rank)

列名意义类型约束

down分数下届numeric(3)非空

up分数上界numeric(3)非空

rank级别varchar(1)主键

二、将如下数据插入到表里

INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (108 ,'曾华' ,'男' , '1977-09-01',95033);

INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (105 ,'匡明' ,'男' ,1975-10-02,95031);

INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (107 ,'王丽' ,'女' ,1976-01-23,95033);

INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (101 ,'李军' ,'男' ,1976-02-20,95033);

INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (109 ,'王芳' ,'女' ,1975-02-10,95031);

INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (103 ,'陆君' ,'男' ,1974-06-03,95031);

INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('3-105' ,'计算机导论', '825')

INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('3-245' ,'操作系统' , '804');

INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('6-166' ,'数据电路' , '856');

INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('9-888' ,'高等数学' , '100');

INSERT INTO GRADE(SNO,CNO,DEGREE)VALUES ('103','3-245',86);

INSERT INTO GRADE(SNO,CNO,DEGREE)VALUES (105,'3-245',75);

INSERT INTO GRADE(SNO,CNO,DEGREE)VALUES (109,'3-245',68);

INSERT INTO GRADE(SNO,CNO,DEGREE)VALUES (103,'3-105',92);

INSERT INTO GRADE(SNO,CNO,DEGREE)VALUES (105,'3-105',88);

INSERT INTO GRADE(SNO,CNO,DEGREE)VALUES (109,'3-105',76);

INSERT INTO GRADE(SNO,CNO,DEGREE)VALUES (101,'3-105',64);

INSERT INTO GRADE(SNO,CNO,DEGREE)VALUES (107,'3-105',91);

INSERT INTO GRADE(SNO,CNO,DEGREE)VALUES (108,'3-105',78);

INSERT INTO GRADE(SNO,CNO,DEGREE)VALUES (101,'6-166',85);

INSERT INTO GRADE(SNO,CNO,DEGREE)VALUES (107,'6-106',79);

INSERT INTO GRADE(SNO,CNO,DEGREE)VALUES (108,'6-166',81);

INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)

VALUES (804,'李诚','男','1958-12-02','副教授','计算机系');

INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)

VALUES (856,'张旭','男','1969-03-12','讲师','电子工程系');

INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)

VALUES (825,'王萍','女','1972-05-05','助教','计算机系');

INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)

VALUES (831,'刘冰','女','1977-08-14','助教','电子工程系');

insert into csl.rank(down,up,rank) values(90,100,'A');

insert into csl.rank(down,up,rank) values(80,89,'B');

insert into csl.rank(down,up,rank) values(70,79,'C');

insert into csl.rank(down,up,rank) values(60,69,'D');

insert into csl.rank(down,up,rank) values(0,59,'E');

三、sql语句练习

1、 查询Student表中的所有记录的Sname、Ssex和Class列。

select Sname,Ssex,Class from student

2、 查询教师所有的单位即不重复的Depart列。

select distinct Depart from Teacher

3、 查询Student表的所有记录。

select * from student

4、 查询Grade表中成绩在60到80之间的所有记录。

select * from grade where Degree between 60 and 80

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

select * from grade where Degree in ('85','86','88')

6、 查询Student表中“95031”班或性别为“女”的同学记录。

select * from student where Class='95031' or Ssex='女'

7、 以Class降序查询Student表的所有记录。

select * from student order by Class desc

8、 以Cno升序、Degree降序查询Grade表的所有记录。

select * from grade order by Cno asc,Degree desc

9、 查询“95031”班的学生人数。

select count(*) from student where Class='95031'

10、查询Grade表中的最高分的学生学号和课程号。

select SNO,CNO from grade where Degree=(select MAX(Degree) from grade)

11、查询‘3-105’号课程的平均分。

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

12、查询Grade表中至少有5名学生选修的并以3开头的课程的平均分数。

select AVG(Degree ) from grade where Cno like '3%' group by Cno having COUNT(Cno)>4

13、查询最低分大于70,最高分小于90的Sno列。

select sno from grade where Degree between 70 and 90

14、查询所有学生的Sname、Cno和Degree列。

select Sname,Cno,Degree from student join grade on student.Sno=grade.Sno

15、查询所有学生的Sno、Cname和Degree列。

select Sno,Cname,degree from grade join Course on Course.Cno=grade.Cno

16、查询所有学生的Sname、Cname和Degree列。

Select student.Sname,Cname,degree from student join grade on student.Sno=grade.Sno join Course on Course.Cno=grade.Cno

17、查询“95033”班所选课程的平均分。

select AVG(Degree) from grade where Sno in (select Sno from student where Class='95033')

select AVG(Degree) from grade,student where student.Sno=grade.Sno and Class='95033'

---以下题目均需提供两种sql语句

18、查询选修课成绩为A等的学生信息

select * from grade inner join rank on (grade.degree >= rank.down and grade.degree <= rank.up) inner join student on student.sno=grade.sno where rank = 'A';

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

select * from student,grade where grade.Cno='3-105' and student.Sno=grade.Sno and Score.Degree>(select Degree from grade where Cno='3-105' and Sno='109')

20、查询grade中选学一门以上课程的同学中分数为非最高分成绩的记录。

select * from grade a where Degree 1)

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

22、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。

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

24、查询选修某课程的同学人数多于5人的教师姓名。

25、查询95033班和95031班全体学生的记录。

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

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

28、查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。

29、查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。

30、查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree.

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

32、查询所有“女”教师和“女”同学的name、sex和birthday.

33、查询成绩比该课程平均成绩低的同学的成绩表。

select * from grade a where a.degree < (

select avg(degree) from grade b group by b.cno having a.cno = b.cno

);

For a in grade:

Sum = 0;

Count = 0

For b in grade:

If b.cno = a.cno

Sum += b.degree

Count+=1

Avg = sum / count

If a.degree < avg:

Print()

34、查询所有任课教师的Tname和Depart.

35 查询所有未讲课的教师的Tname和Depart.

36、查询至少有2名男生的班号。

37、查询Student表中不姓“王”的同学记录。

38、查询Student表中每个学生的姓名和年龄。

39、查询Student表中最大和最小的Sbirthday日期值。

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

41、查询“男”教师及其所上的课程。

42、查询最高分同学的Sno、Cno和Degree列。

43、查询和“李军”同性别的所有同学的Sname.

44、查询和“李军”同性别并同班的同学Sname.

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

46、查询计算机系教师所教课程成绩为B等的课程信息

47、查询成绩在C等以上的学生的所在班级

48、查询班里B等以上学生人数最多的班级信息

mysql> select * from grade;

+-----+-------+--------+

| sno | cno | degree |

+-----+-------+--------+

| 101 | 3-105 | 64 |

| 101 | 6-166 | 85 |

| 103 | 3-105 | 92 |

| 103 | 3-245 | 86 |

| 105 | 3-105 | 88 |

| 105 | 3-245 | 75 |

| 107 | 3-105 | 91 |

| 107 | 6-106 | 79 |

| 108 | 3-105 | 78 |

| 108 | 6-166 | 81 |

+-----+-------+--------+

10 rows in set (0.01 sec)

mysql> select avg(degree) from grade group by cno;

+-------------+

| avg(degree) |

+-------------+

| 82.6000 |

| 80.5000 |

| 79.0000 |

| 83.0000 |

+-------------+

4 rows in set (0.00 sec)

mysql> select cno,avg(degree) from grade group by cno;

+-------+-------------+

| cno | avg(degree) |

+-------+-------------+

| 3-105 | 82.6000 |

| 3-245 | 80.5000 |

| 6-106 | 79.0000 |

| 6-166 | 83.0000 |

+-------+-------------+

4 rows in set (0.00 sec)

mysql> select * from grade a where a.degree < (select avg(degree) from grade b group by b.cno having a.cno = b.cno);

+-----+-------+--------+

| sno | cno | degree |

+-----+-------+--------+

| 101 | 3-105 | 64 |

| 105 | 3-245 | 75 |

| 108 | 3-105 | 78 |

| 108 | 6-166 | 81 |

+-----+-------+--------+

4 rows in set (0.01 sec)

mysql> select * from grade;

+-----+-------+--------+

| sno | cno | degree |

+-----+-------+--------+

| 101 | 3-105 | 64 |

| 101 | 6-166 | 85 |

| 103 | 3-105 | 92 |

| 103 | 3-245 | 86 |

| 105 | 3-105 | 88 |

| 105 | 3-245 | 75 |

| 107 | 3-105 | 91 |

| 107 | 6-106 | 79 |

| 108 | 3-105 | 78 |

| 108 | 6-166 | 81 |

+-----+-------+--------+

10 rows in set (0.00 sec)

mysql>

mysql> select * from teacher;

+-----+--------+------+---------------------+-----------+-----------------+

| tno | tname | tsex | tbirthday | prof | depart |

+-----+--------+------+---------------------+-----------+-----------------+

| 804 | 李诚 | 男 | 1958-12-02 00:00:00 | 副教授 | 计算机系 |

| 825 | 王萍 | 女 | 1972-05-05 00:00:00 | 助教 | 计算机系 |

| 831 | 刘冰 | 女 | 1977-08-14 00:00:00 | 助教 | 电子工程系 |

| 856 | 张旭 | 男 | 1969-03-12 00:00:00 | 讲师 | 电子工程系 |

+-----+--------+------+---------------------+-----------+-----------------+

4 rows in set (0.01 sec)

mysql> select * from course;

+-------+-----------------+-----+

| cno | cname | tno |

+-------+-----------------+-----+

| 3-105 | 计算机导论 | 825 |

| 3-245 | 操作系统 | 804 |

| 6-166 | 数据电路 | 856 |

| 9-888 | 高等数学 | 100 |

+-------+-----------------+-----+

4 rows in set (0.01 sec)

mysql> select distinct tno from course ;

+-----+

| tno |

+-----+

| 825 |

| 804 |

| 856 |

| 100 |

+-----+

4 rows in set (0.00 sec)

mysql> select tname,depart from teacher where tno not in(select distinct tno from course);

+--------+-----------------+

| tname | depart |

+--------+-----------------+

| 刘冰 | 电子工程系 |

+--------+-----------------+

1 row in set (0.00 sec)

mysql> select * from teacher t left join course c on t.tno = c.tno;

+-----+--------+------+---------------------+-----------+-----------------+-------+-----------------+------+

| tno | tname | tsex | tbirthday | prof | depart | cno | cname | tno |

+-----+--------+------+---------------------+-----------+-----------------+-------+-----------------+------+

| 825 | 王萍 | 女 | 1972-05-05 00:00:00 | 助教 | 计算机系 | 3-105 | 计算机导论 | 825 |

| 804 | 李诚 | 男 | 1958-12-02 00:00:00 | 副教授 | 计算机系 | 3-245 | 操作系统 | 804 |

| 856 | 张旭 | 男 | 1969-03-12 00:00:00 | 讲师 | 电子工程系 | 6-166 | 数据电路 | 856 |

| 831 | 刘冰 | 女 | 1977-08-14 00:00:00 | 助教 | 电子工程系 | NULL | NULL | NULL |

+-----+--------+------+---------------------+-----------+-----------------+-------+-----------------+------+

4 rows in set (0.00 sec)

mysql> select * from teacher t left join course c on t.tno = c.tno and c.cno is null;

+-----+--------+------+---------------------+-----------+-----------------+------+-------+------+

| tno | tname | tsex | tbirthday | prof | depart | cno | cname | tno |

+-----+--------+------+---------------------+-----------+-----------------+------+-------+------+

| 804 | 李诚 | 男 | 1958-12-02 00:00:00 | 副教授 | 计算机系 | NULL | NULL | NULL |

| 825 | 王萍 | 女 | 1972-05-05 00:00:00 | 助教 | 计算机系 | NULL | NULL | NULL |

| 831 | 刘冰 | 女 | 1977-08-14 00:00:00 | 助教 | 电子工程系 | NULL | NULL | NULL |

| 856 | 张旭 | 男 | 1969-03-12 00:00:00 | 讲师 | 电子工程系 | NULL | NULL | NULL |

+-----+--------+------+---------------------+-----------+-----------------+------+-------+------+

4 rows in set (0.00 sec)

mysql> select * from teacher t left join course c on t.tno = c.tno where c.cno is null;

+-----+--------+------+---------------------+--------+-----------------+------+-------+------+

| tno | tname | tsex | tbirthday | prof | depart | cno | cname | tno |

+-----+--------+------+---------------------+--------+-----------------+------+-------+------+

| 831 | 刘冰 | 女 | 1977-08-14 00:00:00 | 助教 | 电子工程系 | NULL | NULL | NULL |

+-----+--------+------+---------------------+--------+-----------------+------+-------+------+

1 row in set (0.00 sec)

mysql> select * from student where ssex='男';

+-----+--------+------+---------------------+-------+

| sno | sname | ssex | sbirthday | class |

+-----+--------+------+---------------------+-------+

| 101 | 李军 | 男 | 1976-02-20 00:00:00 | 95033 |

| 103 | 陆君 | 男 | 1974-06-03 00:00:00 | 95031 |

| 105 | 匡明 | 男 | 1975-10-02 00:00:00 | 95031 |

| 108 | 曾华 | 男 | 1977-09-01 00:00:00 | 95033 |

+-----+--------+------+---------------------+-------+

4 rows in set (0.00 sec)

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

+-------+----------+

| class | count(*) |

+-------+----------+

| 95031 | 2 |

| 95033 | 2 |

+-------+----------+

2 rows in set (0.00 sec)

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

+-------+----------+

| class | count(*) |

+-------+----------+

| 95031 | 2 |

| 95033 | 2 |

+-------+----------+

2 rows in set (0.00 sec)

mysql> select * from student sname not like '王%';

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'not like '王%'' at line 1

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

+-----+--------+------+---------------------+-------+

| sno | sname | ssex | sbirthday | class |

+-----+--------+------+---------------------+-------+

| 101 | 李军 | 男 | 1976-02-20 00:00:00 | 95033 |

| 103 | 陆君 | 男 | 1974-06-03 00:00:00 | 95031 |

| 105 | 匡明 | 男 | 1975-10-02 00:00:00 | 95031 |

| 108 | 曾华 | 男 | 1977-09-01 00:00:00 | 95033 |

+-----+--------+------+---------------------+-------+

4 rows in set (0.00 sec)

mysql> select max(sbirthday),min(sbirthday) from student;

+---------------------+---------------------+

| max(sbirthday) | min(sbirthday) |

+---------------------+---------------------+

| 1977-09-01 00:00:00 | 1974-06-03 00:00:00 |

+---------------------+---------------------+

1 row in set (0.00 sec)

mysql> select date_format(max(sbirthday),'%Y-%m-%d'),min(sbirthday) from student;

+----------------------------------------+---------------------+

| date_format(max(sbirthday),'%Y-%m-%d') | min(sbirthday) |

+----------------------------------------+---------------------+

| 1977-09-01 | 1974-06-03 00:00:00 |

+----------------------------------------+---------------------+

1 row in set (0.00 sec)

mysql> select max(degree) from grade;

+-------------+

| max(degree) |

+-------------+

| 92 |

+-------------+

1 row in set (0.00 sec)

mysql> select sno from grade where degree=(select max(degree) from grade);

+-----+

| sno |

+-----+

| 103 |

+-----+

1 row in set (0.00 sec)

mysql> select * from student where ssex=() and class=();

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') and class=()' at line 1

mysql> select * from teacher;

+-----+--------+------+---------------------+-----------+-----------------+

| tno | tname | tsex | tbirthday | prof | depart |

+-----+--------+------+---------------------+-----------+-----------------+

| 804 | 李诚 | 男 | 1958-12-02 00:00:00 | 副教授 | 计算机系 |

| 825 | 王萍 | 女 | 1972-05-05 00:00:00 | 助教 | 计算机系 |

| 831 | 刘冰 | 女 | 1977-08-14 00:00:00 | 助教 | 电子工程系 |

| 856 | 张旭 | 男 | 1969-03-12 00:00:00 | 讲师 | 电子工程系 |

+-----+--------+------+---------------------+-----------+-----------------+

4 rows in set (0.00 sec)

mysql> select * from course;

+-------+-----------------+-----+

| cno | cname | tno |

+-------+-----------------+-----+

| 3-105 | 计算机导论 | 825 |

| 3-245 | 操作系统 | 804 |

| 6-166 | 数据电路 | 856 |

| 9-888 | 高等数学 | 100 |

+-------+-----------------+-----+

4 rows in set (0.01 sec)

mysql> select cno from teacher t join course c on t.tno = c.tno;

+-------+

| cno |

+-------+

| 3-105 |

| 3-245 |

| 6-166 |

+-------+

3 rows in set (0.00 sec)

mysql> select * from grade where cno in (select cno from teacher t join course c on t.tno = c.tno);

+-----+-------+--------+

| sno | cno | degree |

+-----+-------+--------+

| 101 | 3-105 | 64 |

| 101 | 6-166 | 85 |

| 103 | 3-105 | 92 |

| 103 | 3-245 | 86 |

| 105 | 3-105 | 88 |

| 105 | 3-245 | 75 |

| 107 | 3-105 | 91 |

| 108 | 3-105 | 78 |

| 108 | 6-166 | 81 |

+-----+-------+--------+

9 rows in set (0.00 sec)

mysql> select * from grade where cno in (select cno from teacher t join course c on t.tno = c.tno) and d

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值