数据库操作习题三(50道题-含答案)

目录:

习题篇:

一:创建数据库STUxxxx(其中xxxx为自己的姓名)。

二:在STUxxxx数据库中使用SQL语句创建如下的表结构:  

三:使用语句对以上的表结构进行修改

四:用insert语句向数据库STUxxxx的XS表、KC表和XS_KC表中插入如下数据:

五:数据的插入、删除和修改

六:查询

解答篇:

一、    创建数据库STUxxxx(其中xxxx为自己的姓名)。

二、    在STUxxxx数据库中使用SQL语句创建如下的表结构:  

三、    使用语句对以上的表结构进行修改

四、    用insert语句向数据库STUxxxx的XS表、KC表和XS_KC表中插入如下数据:

五、    数据的插入、删除和修改

六:查询*

参考篇:


习题篇:

  • 一:创建数据库STUxxxx(其中xxxx为自己的姓名)。

  • 二:在STUxxxx数据库中使用SQL语句创建如下的表结构:  

1.学生情况表(XS)结构    

列名

数据类型

长度

可否为空

默认值

说明

序号

Int

 

 

自增字段,主键

学号

Char

7

唯一键

姓名

Char

8

 

性别

 

 

只能为男或女

出生日期

datetime

 

 

班级

Char

5

‘41021’

 

总学分

Tinyint

 

0

 

是否团员

char

1

 

 

身份证号码

char

18

 

 

备注

Text

 

 

2.课程表(KC)结构

列名

数据类型

长度

可否为空

默认值

说明

序号

Int

 

 

自增字段,初始值为5,主键

课程号

Char

3

 

课程名

Char

20

 

开课学期

 

 

1

只能为1~8

学时

Tinyint

 

 

学分

Tinyint

 

0

 

3.学生与课程表(XS_KC)结构

列名

数据类型

长度

可否为空

默认值

说明

学号

Char

7

学号与课程号的组合为主键

课程号

Char

3

成绩

Tinyint

 

0

 

  • 三:使用语句对以上的表结构进行修改

1.修改学生情况表(XS)的“姓名”字段,使其数据类型改为varchar(10),且允许为空。

2.删除学生与课程表(XS_KC)中的“学分”字段。

3.修改学生情况表(XS),删除“班级”字段。

4.修改学生情况表(XS),增加一“专业”字段(varchar(20),   默认值为“计算机”)。

5.修改课程表(KC),把字段“学时”的名称改为“总学时”。

 

  • 四:用insert语句向数据库STUxxxx的XS表、KC表和XS_KC表中插入如下数据:

学生情况表(XS)

学号

姓名

性别

出生日期

专业

总学分

是否团员

身份证号码

备注

4102101

王林

1983-1-23

计算机

null

1

null

NULL

4102102

吴荣华

1984-3-28

计算机

null

0

null

NULL

4202103

张强

1981-11-19

电子

NULL

1

null

NULL

4202110

王向荣

1980-12-9

电子

null

0

111111111

111111111

NULL

4202221

李丽

1982-7-30

电子

NULL

1

null

NULL

4302101

刘明

1982-10-18

自控

null

1

null

NULL

4402130

叶凡

1983-11-18

数学

null

1

null

转专业学习

 

课程表(KC)

课程号

课程名

开课学期

学时

学分

101

计算机基础

1

48

3

102

C语言

2

80

5

103

数据库

4

64

4

201

离散数学

6

64

4

202

计算机网络

7

64

4

301

软件工程

6

64

4

 

学生与课程表(XS_KC)

学号

课程号

成绩

4102101

101

80

4102101

102

89

4102101

103

78

4102102

101

57

4102102

102

67

4202103

103

90

4202110

101

85

4202110

102

91

4202221

101

69

4402130

101

78

4402130

103

74

  • 五:数据的插入、删除和修改

  1. 将KC表中总学时超过60的课程对应的学分增加1分。
  2. 将XS表中学号为“4102101”的同学的总学分增加4分,备注改为“提前修完一门课程”。
  3. 将XS_KC表中学号为“4102101”的同学的“计算机基础”课程的成绩增加10分。
  4. 将XS_KC表计算机专业所有学生的各科成绩均提高5%。
  5. 将XS_KC表中“数据库”课程的所有成绩信息删除。
  6. 将XS_KC表中其学号在XS表中不存在或其课程号在KC表中不存在的学生的成绩信息删除。
  7. 创建新表XS1,该表的结构与数据与XS表完全一样。
  8. 删除XS1表中前两个同学的基本信息。
  9. 删除XS1表中的所有数据。
  • 六:查询

    1. 查询XS表中所有同学的学号、姓名和总学分,结果中各列的标题分别指定为num,name和mark。
    2. 查询XS表中的学生数据来自哪些专业(使用DISTINCT子句消除结果集中的重复行)。
    3. 查询XS表中各个同学的姓名、专业名和总学分,只返回结果集的前5行。
    4. 查询XS表中各个同学的姓名、专业名和总学分,只返回结果集的3-6行。
    5. 查询XS表中每个学生的学号、姓名和年龄信息。
    6. 查询XS表中1979年出生的学生姓名和专业情况。
    7. 查询XS表中专业名为“计算机”或“电子”或“数学”的学生的情况。
    8. 查询XS表中姓“张”或“王”或“李”且单名的学生的情况。
    9. 查询XS表中专业为“计算机”且总学分尚未确定的学生情况。
    10. 查询年龄最小的前三个同学的姓名、专业和年龄。
    11. 求选修了“101”课程的学生的平均成绩。
    12. 求选修了“102”课程的学生的最高分和最低分。
    13. 求学号为“4102101”学生的总成绩。
    14. 求专业为“计算机”的学生的总人数。
    15. 求选修了“101”课程的学生的人数。
    16. 求选修了课程的学生的人数。
    17. 求一门课程都未选修的学生的人数。
    18. 统计各个专业的学生数。(按专业分组)
    19. 统计各个专业的男女生人数。格式如下:

                                   专业 性别 人数

                                   …… …… ……

                20.查找平均成绩在80分以上的学生的学号和平均成绩。

                21.查找选修的课程中超过2门成绩在80分以上的学生的学号和成绩高于80分的门数。格式如下:

                                   学号 成绩高于80分的门数

                                   …… ……

               22.查询选修了课程号为101的每个学生的姓名及成绩。

               23.查询 “计算机”专业且选修了“计算机基础”课程的学生的学号、姓名及成绩。

               24.显示每门课程的平均成绩。格式如下:

                                 课程名 平均成绩

                                 ……   ……

               25.查询各个专业各门课程的平均成绩。格式如下

                                   专业 课程名 平均成绩

                                   …… …… ……

               26.查询“计算机”专业平均成绩在85分以上的学生的学号、姓名和平均成绩。

               27.查询101号课程及格的学生的基本情况。

               28.查找比所有计算机专业的学生年龄都大的学生的情况。

<---------------------------------------------------------------------------------------------------->

解答篇:

 

一、    创建数据库STUxxxx(其中xxxx为自己的姓名)。

/*新建数据*/

create database stu_liuxinlei;

/*进入指定数据库*/

use stu_liuxinlei;

二、    在STUxxxx数据库中使用SQL语句创建如下的表结构:  

/*新建学生情况表XS*/

create table XS(
    xs_id int not null AUTO_INCREMENT,
    stu_id char(7) not null unique,
    stu_name char(8) not null,
    stu_sex enum('男','女') not null default '男',
    stu_birth datetime not null,
    stu_class char(5) default '41021',
    stu_credit tinyint default 0,
    whether_the_member char(1),
    car_id char(18),
    remark text,
    primary key (xs_id)
);

/*新建课程表(KC)*/

create table KC(
    kc_id int not null AUTO_INCREMENT,
    kc_number char(3) not null unique,
    kc_name char(20) not null,
    kc_semester tinyint default 1,
    kc_period tinyint not null,
    kc_credit tinyint not null default 0,
    primary key (kc_id),
    constraint check_semester check(kc_semester >= 1 and kc_semester <= 8)
) AUTO_INCREMENT=5;

/*学生与课程表(XS_KC)*/

create table XS_KC(
    stu_id char(7) not null,
    kc_number char(3) not null,
    kc_soucre tinyint default 0,
    constraint for_key_stu_id foreign key (stu_id) references XS(stu_id),
    constraint for_key_kc_number foreign key (kc_number) references KC(kc_number) 
);


三、    使用语句对以上的表结构进行修改

/*修改学生情况表(XS)的“姓名”字段,使其数据类型改为varchar(10),且允许为空。*/

alter table XS
modify stu_name varchar(10) null /*设置为空不要写出is null*/

/*删除学生与课程表(XS_KC)中的“学分”字段。*/

alter table XS_KC
drop kc_soucre;

/*修改学生情况表(XS),删除“班级”字段。*/

alter table XS
drop stu_class;

/*修改学生情况表(XS),增加一“专业”字段(varchar(20),   默认值为“计算机”)。*/

alter table XS
add xs_major varchar(20) default '计算机';

/*修改课程表(KC),把字段“学时”的名称改为“总学时”。*/

alter table KC
change kc_period z_kc_period tinyint; /*要想修改字段名称需要定义字段的数据类型*/


四、    用insert语句向数据库STUxxxx的XS表、KC表和XS_KC表中插入如下数据:

/*插入XS表数据*/

insert into XS(stu_id,stu_name,stu_sex,stu_birth,stu_class,stu_credit,whether_the_member,car_id,remark)
values
('4102101', '王林', '男',    '1983-1-23', '计算机', null, 1,    null,    NULL),
('4102102', '吴荣华', '女', '1984-3-28', '计算机', null, 0, null, NULL),
('4202103', '张强', '男', '1981-11-19', '电子', NULL, 1, null, NULL),
('4202110', '王向荣', '男', '1980-12-9', '电子', null, 0, '111111111111111111', NULL),
('4202221', '李丽', '女', '1982-7-30', '电子', NULL, 1, null, NULL),
('4302101', '刘明', '男', '1982-10-18', '自控', null, 1, null, NULL),
('4402130', '叶凡', '男', '1983-11-18', '数学', null, 1, null, '转专业学习');

/*插入KC表数据*/

insert into KC(kc_number,kc_name,kc_semester,kc_period,kc_credit)
values
('101', '计算机基础', 1, 48, 3),
('102', 'C语言', 2, 80, 5),
('103', '数据库', 4, 64, 4),
('201', '离散数学', 6, 64, 4),
('202', '计算机网络', 7, 64, 4),
('301', '软件工程', 6, 64, 4);

/*插入XS_KC表数据*/

insert into XS_KC(stu_id, kc_number, kc_soucre)
values
('4102101', '101', 80),
('4102101', '102', 89),
('4102101', '103', 78),
('4102102', '101', 57),
('4102102', '102', 67),
('4202103', '103', 90),
('4202110', '101', 85),
('4202110', '102', 91),
('4202221', '101', 69),
('4402130', '101', 78),
('4402130', '103', 74);

五、    数据的插入、删除和修改

/*数据的插入、删除和修改*/
/*1.    将KC表中总学时超过60的课程对应的学分增加1分。*/
 

update KC
set kc_credit = kc_credit + 1 
where kc_period > 60;


/*2.    将XS表中学号为“4102101”的同学的总学分增加4分,备注改为“提前修完一门课程”。*/
 

update XS
set stu_credit = stu_credit + 4, remark = '提前修完一门课程'
where stu_id = '4102101';


/*3.    将XS_KC表中学号为“4102101”的同学的“计算机基础”课程的成绩增加10分。*/

update XS_KC
set kc_soucre = kc_soucre + 10
where stu_id = '4102101';


/*4.    将XS_KC表计算机专业所有学生的各科成绩均提高5%。*/
 

update XS_KC
set kc_soucre = kc_soucre * (0.05 + 1)
where stu_id = all(
                    select stu_id 
                    from XS 
                    where stu_class = '计算机'
                   );


/*5.    将XS_KC表中“数据库”课程的所有成绩信息删除。*/
 

delete from XS_KC
where kc_number = all(
                    select kc_number 
                    from KC 
                    where kc_name = '数据库'
                    );


/*6.    将XS_KC表中其学号在XS表中不存在或其课程号在KC表中不存在的学生的成绩信息删除。*/

delete 
#SELECT *
from XS_KC
where 学号 not in (
    select 学号
    from XS

) or 课程号 not in (
    select 课程号
    from KC
)

 

/*7.    创建新表XS1,该表的结构与数据与XS表完全一样。*/
 

create table XS1(
    xs_id int not null AUTO_INCREMENT,
    stu_id char(7) not null unique,
    stu_name char(8) not null,
    stu_sex enum('男','女') not null default '男',
    stu_birth datetime not null,
    stu_class char(5) default '41021',
    stu_credit tinyint default 0,
    whether_the_member char(1),
    car_id char(18),
    remark text,
    primary key (xs_id)
);


/*8.    删除XS1表中前两个同学的基本信息。*/
 

delete from XS1
where xs_id = all(
                    select xs_id 
                    from XS1 
                    limit 0,2
                );


/*9.    删除XS1表中的所有数据。*/

delete from XS1;

六:查询*

/*查询*/
-- 1.    查询XS表中所有同学的学号、姓名和总学分,结果中各列的标题分别指定为num,name和mark。
 

select stu_id as num, stu_name as name, stu_credit as mark
from XS;


-- 2.    查询XS表中的学生数据来自哪些专业(使用DISTINCT子句消除结果集中的重复行)。
 

select distinct stu_id, stu_name, stu_class 
from XS;


-- 3.    查询XS表中各个同学的姓名、专业名和总学分,只返回结果集的前5行。
 

select stu_name, stu_class, stu_credit 
from XS 
limit 0,5;


-- 4.    查询XS表中各个同学的姓名、专业名和总学分,只返回结果集的3-6行
 

select stu_name, stu_class, stu_credit 
from XS 
limit 2,3;


-- 5.    查询XS表中每个学生的学号、姓名和年龄信息。
 

select stu_id, stu_name, 
timestampdiff(year,stu_birth,now()) as 'age' 
from XS;


-- 6.    查询XS表中1979年出生的学生姓名和专业情况。
 

select stu_name, stu_class 
from XS 
where stu_birth >= '1979-01-01' and  stu_birth <= '1979-12-31';


-- 7.    查询XS表中专业名为“计算机”或“电子”或“数学”的学生的情况。
 

select * 
from XS 
where stu_class in('计算机','电子','数学');


-- 8.    查询XS表中姓“张”或“王”或“李”且单名的学生的情况。
 

select * 
from XS 
where stu_name like '张*' or stu_name like '王*' or stu_name like '李*';


-- 9.    查询XS表中专业为“计算机”且总学分尚未确定的学生情况。
 

select * 
from XS 
where stu_class = '计算机' and stu_credit is null;


-- 10.    查询年龄最小的前三个同学的姓名、专业和年龄。
 

select stu_name, stu_class, 
timestampdiff(year,stu_birth,now()) as 'age' 
from XS 
ORDER BY age 
limit 0,3;


-- 11.    求选修了“101”课程的学生的平均成绩。
 

select kc_number, avg(kc_soucre) 
from XS_KC 
group by kc_number 
having kc_number = '101';


-- 12.    求选修了“102”课程的学生的最高分和最低分。
 

select kc_number, max(kc_soucre) as '最高分', min(kc_soucre) as '最低分' 
from XS_KC
where kc_number = '102';


-- 13.    求学号为“4102101”学生的总成绩。
 

select XS.stu_id, sum(XS_KC.kc_soucre) as '总成绩' 
from XS
left join XS_KC on XS.stu_id = XS_KC.stu_id 
where XS.stu_id = '4102101';


-- 14.    求专业为“计算机”的学生的总人数。
 

select stu_class, count(*) as '总人数' 
from XS 
where stu_class = '计算机';


-- 15.    求选修了“101”课程的学生的人数。
 

select kc_number, count(*) as '总人数' 
from XS_KC 
where kc_number = '101';


-- 16.    求选修了课程的学生的人数。
 

select count(distinct stu_id) as '总人数' 
from XS_KC;


-- 17.    求一门课程都未选修的学生的人数。
 

select count(*) 
from  XS 
where stu_id != all(
                   select stu_id from XS_KC
                   );


-- 18.    统计各个专业的学生数。(按专业分组)
 

select stu_class, count(*) 
from XS 
group by stu_class;


-- 19.    统计各个专业的男女生人数。格式如下:
-- 专业        性别        人数
-- ……        ……        ……

 

select stu_class, stu_sex, count(*) 
from XS 
group by stu_class,stu_sex;


-- 20.    查找平均成绩在80分以上的学生的学号和平均成绩。
 

select stu_id ,avg(kc_soucre) as 'avg' 
from XS_KC 
group by stu_id 
having avg > 80;


-- 21.    查找选修的课程中超过2门成绩在80分以上的学生的学号和成绩高于80分的门数。格式如下:
-- 学号        成绩高于80分的门数
-- ……                ……

-- 22.    查询选修了课程号为101的每个学生的姓名及成绩。
 

select XS.stu_name,XS_KC.kc_soucre 
from  XS,XS_KC,KC 
where XS.stu_id = XS_KC.stu_id 
        and XS_KC.kc_number=KC.kc_number 
        and KC.kc_number = '101';


-- 23.    查询 “计算机”专业且选修了“计算机基础”课程的学生的学号、姓名及成绩。
 

select XS.stu_id, XS.stu_name,XS_KC.kc_soucre 
from  XS,XS_KC,KC 
where XS.stu_id = XS_KC.stu_id 
        and XS_KC.kc_number=KC.kc_number 
        and KC.kc_name = '计算机基础';


-- 24.    显示每门课程的平均成绩。格式如下:

select kc_number, avg(kc_soucre) as 'avg' 
from XS_KC 
group by kc_number

<---------------------------------------------------------------------------------------------------->

参考篇:

一、    创建数据库STUxxxx(其中xxxx为自己的姓名)。
create database STUliuxinlei;

use STUliuxinlei;

二、    在STUxxxx数据库中使用SQL语句创建如下的表结构:  
1.学生情况表(XS)结构    
列名    数据类型    长度    可否为空    默认值    说明
序号    Int        否        自增字段,主键
学号    Char    7    否    无    唯一键
姓名    Char    8    否    无    
性别            否    男    只能为男或女
出生日期    datetime        否    无    
班级    Char    5    是    ‘41021’    
总学分    Tinyint        是    0    
是否团员    char    1    是        
身份证号码    char    18    是        
备注    Text        是    无    

2.课程表(KC)结构
列名    数据类型    长度    可否为空    默认值    说明
序号    Int        否        自增字段,初始值为5,主键
课程号    Char    3    否    无    
课程名    Char    20    否    无    
开课学期            否    1    只能为1~8
学时    Tinyint        否    无    
学分    Tinyint        否    0    

3.学生与课程表(XS_KC)结构
列名    数据类型    长度    可否为空    默认值    说明
学号    Char    7    否    无    学号与课程号的组合为主键
课程号    Char    3    否    无    
成绩    Tinyint        是    0    

create table XS(
    序号 int primary key auto_increment,
    学号 char(7) not null unique key,
    姓名 char(8) not null ,
    性别 enum('男','女') not null default '男',   
    出生日期 datetime not null,
    班级 char(5) default '41021',
    总学分 tinyint default 0,
    是否团员 char(1) ,
    身份证号码 char(18) ,
    备注 text 
)

create table KC(
序号 int primary key auto_increment,
课程号 char(3) not null ,
课程名 char(20) not null,
开课学期 enum('1','2','3','4','5','6','7','8') not null default '1',
学时 tinyint not null ,
学分 tinyint not null default 0
)auto_increment=5

create table XS_KC(
学号 char(7) ,
课程号 char(3),
成绩 tinyint default 0,
primary key (学号,课程号)
)

三、    使用语句对以上的表结构进行修改
1.修改学生情况表(XS)的“姓名”字段,使其数据类型改为varchar(10),且允许为空。

alter table XS modify 姓名 varchar(10) 

2.删除学生与课程表(XS_KC)中的“学分”字段。

alter table XS_KC drop 学分

3.修改学生情况表(XS),删除“班级”字段。

alter table XS drop 班级

4.修改学生情况表(XS),增加一“专业”字段(varchar(20),   默认值为“计算机”)。

alter table XS add 专业 varchar(20) default '计算机'

5.修改课程表(KC),把字段“学时”的名称改为“总学时”。
 

alter table KC change 学时 总学时 tinyint default 0

四、    用insert语句向数据库STUxxxx的XS表、KC表和XS_KC表中插入如下数据:

学生情况表(XS)
学号    姓名    性别    出生日期    专业    总学分    是否团员    身份证号码    备注
4102101    王林    男    1983-1-23    计算机    null    1    null    NULL
4102102    吴荣华    女    1984-3-28    计算机    null    0    null    NULL
4202103    张强    男    1981-11-19    电子    NULL    1    null    NULL
4202110    王向荣    男    1980-12-9    电子    null    0    111111111
111111111    NULL
4202221    李丽    女    1982-7-30    电子    NULL    1    null    NULL
4302101    刘明    男    1982-10-18    自控    null    1    null    NULL
4402130    叶凡    男    1983-11-18    数学    null    1    null    转专业学习


insert into XS (学号,姓名,性别,出生日期,专业,是否团员,身份证号码,备注) 
values (4102101,'王林','男','1983-1-23','计算机','1','',''),
(4102102,'吴荣华','女','1984-3-28','计算机','0','',''),
(4202103,'张强','男','1981-11-19','电子','1','',''),
(4202110,'王向荣','男','1980-12-9','电子','0','111111111111111111',''),
(4202221,'李丽','女','1982-7-30','电子','1','',''),
(4302101,'刘明','男','1982-10-18','自控','1','',''),
(4402130,'叶凡','男','1982-11-18','数学','1','','转专业学习')


课程表(KC)
课程号    课程名    开课学期    学时    学分
101    计算机基础    1    48    3
102    C语言    2    80    5
103    数据库    4    64    4
201    离散数学    6    64    4
202    计算机网络    7    64    4
301    软件工程    6    64    4


insert into KC (课程号,课程名,开课学期,学时,学分)
VALUES ('101','计算机基础','1',48,3),
('102','C语言','2',80,5),
('103','数据库','4',64,4),
('201','离散数学','6',64,4),
('202','计算机网络','7',64,4),
('301','软件工程','6',64,4)


学生与课程表(XS_KC)
学号    课程号    成绩
4102101    101    80
4102101    102    89
4102101    103    78
4102102    101    57
4102102    102    67
4202103    103    90
4202110    101    85
4202110    102    91
4202221    101    69
4402130    101    78
4402130    103    74


insert into XS_KC (学号,课程号,成绩)
values 
('4102101','101',80),
('4102101','102',89),
('4102101','103',78),
('4102102','101',57),
('4102102','102',67),
('4202103','103',90),
('4202110','101',85),
('4202110','102',91),
('4202221','101',69),
('4402130','101',78),
('4402130','103',74)

五、    数据的插入、删除和修改
1.    将KC表中总学时超过60的课程对应的学分增加1分。

update KC set 总学时=总学时+1 where 总学时>60 

2.    将XS表中学号为“4102101”的同学的总学分增加4分,备注改为“提前修完一门课程”。

update XS set 总学分 = 总学分+4,备注='提前修完一门课程'    where 学号='4102101'

3.    将XS_KC表中学号为“4102101”的同学的“计算机基础”课程的成绩增加10分。

update XS_KC 
set 成绩 =成绩+10 
where 学号='4102101' and 课程号=
(
    SELECT 课程号
    from KC
    where 课程名 = '计算机基础'
)

4.    将XS_KC表计算机专业所有学生的各科成绩均提高5%。

UPDATE XS_KC set 成绩 = 成绩*1.05 where 学号 in
(
    select 学号
    from XS 
    where 专业='计算机'
)

5.    将XS_KC表中“数据库”课程的所有成绩信息删除。

delete 
from XS_KC
where 课程号 in(
    SELECT 课程号
    from  KC
    where 课程名 = '数据库'
)

6.    将XS_KC表中其学号在XS表中不存在或其课程号在KC表中不存在的学生的成绩信息删除。

delete 
#SELECT *
from XS_KC
where 学号 not in (
    select 学号
    from XS

) or 课程号 not in (
    select 课程号
    from KC
)


7.    创建新表XS1,该表的结构与数据与XS表完全一样。

create table XS1 like XS;
insert into XS1 select * from XS;

8.    删除XS1表中前两个同学的基本信息。

delete
from XS1
limit 2

9.    删除XS1表中的所有数据。

delete from XS1
 

你可能感兴趣的:(数据库)