综合练习

4.5 综合练习

把前四节合起来做一套练习:建库建表、灌数据、多条件查询、连接统计。

第4章 SQL 操作数据库练习13 页课件1 个知识点

本讲导览

核心内容

第5节

综合练习

练习1:创建带有约束的表1(学号作主键)

1、在XK库中,创建一个‘学生表’,表名:学生表,结构如下:

说明:成绩用decimal(4,1)

课件表格 · 第1页
序号字段名数据类型长度小数位数约束备注
1学号字符11主键
2姓名字符5非空
3性别字符1默认值为‘男’
4年龄整数允许为空
5生日日期允许为空
6成绩小数41允许为空
7籍贯字符10默认值为‘山东青岛’

2、数据操作:

(1)用insert插入你个人的数据,及其它2位同学的模拟数据。

体验:主键不能重复也不能为空、非空字段必须输入值、有默认值字段不输入值时自动填充默认值。

(2)查看数据

(3)用update修改你的数据

3、提示说明:

(1)通常,数据库中的数据表,都要有主键。主键有3种情况:

①主键是一个字段。在定义该字段时,可以直接用primary key说明。如:学号 varchar(11) primary key,

凡是指定为主键的字段,默认都是为not null的,此时也可以不写not null。

②主键是二个或二个以上字段构成,称为联合主键([P103]),定义时,在最后单独定义primary key(字段1,字段2)。

③如果表中没有明显主键,可以使用标识列id,指定标识列id作主键。

提示说明:

使用标识列作主键,ID为整数,起始值(又称种子)可以为1,增量(又称步长)也可以为1。

即id int primary key auto_increment

(2)默认值为‘男’, 用default‘男’

(3)成绩,保留1位小数,用decimal 或numeric(2者用法相同), decimal (4,1)表示长度共4位(不包括小数点),其中小数1位。如小数位数是0,则表示整数。

4、参考答案:

练习2:创建带有约束的表2(标识列作主健)

1、在XK库中,创建一个‘选举表’,表名:选举表,结构如下:

说明:id int primary key auto_increment 。

要有关键字auto_increment,默认从1开始,增量也是1。

但用insert语句插入数据时,不要给id赋值,系统会自动根据定义赋给相应值。

课件表格 · 第6页
序号字段名数据类型长度小数位数约束备注
1ID整数主键(从1开始,步长为1)
2姓名字符5非空
3性别字符1默认值为‘女’
4得票整数

(1)用insert录入3条模拟数据

(2)显示数据,观察id变化。

(3)删除一条记录,再增加一条记录,观察id的变化。

3、参考答案:

练习3:修改表的结构

为“选举表”增加1个字段,班委varchar(6)

练习4:2个表数据操作

1、复制“选举表”,生成新表“得票表”

(包括结构和数据)

2、查看2个表的结构和数据

3、思考并实验

如果用一条语句

SQL
create table 得票表 select * from 选举表;

那么,得票表和选举表有什么区别?

4、清空“得票表”的数据后,只将“选举表”中的姓名、性别2列数据,追加到“得票表”中,如何写语句?

执行后,查看得票表id有什么变化?

说明:

从表1中的查询出数据插入到表2中

SQL
insert into 表2(字段1, 字段2,……) select 字段1, 字段2,…… from 表1 where 条件

(1)表1、表2都是已存在的表,结构可以不完全相同。

(2)语句中表2的字段列表,要与表1的字段列表一一对应(个数、类型、顺序等)。

(3)表2中,没有插入数据的字段,要允许为空。

如:

SQL
insert into 得票表(姓名,性别) select 姓名,性别 from 选举表

练习5:数据从2个表中关联查询出来

SQL
Select 表1.字段名1, 表1.字段名2,…, 表2.字段名1, 表2.字段名2, …
From 表1,表2 where 表1和表2的关联条件
select 学生表.学号, 学生表.姓名, 学生表.性别, 班级表.班级
from 学生表,班级表
where 学生表.班级代码=班级表.班级代码

执行下列语句,查看结果:

SQL
select student.stuno,student.stuname,class.ClassName from student,class where student.ClassNo=class.ClassNo;
📄 展开课件原文(第 1–13 页,共 13 页)
第 1 页

第5节、综合练习

练习1:创建带有约束的表1(学号作主键)

1、在XK库中,创建一个‘学生表’,表名:学生表,结构如下:

说明:成绩用decimal(4,1)

序号字段名数据类型长度小数位数约束备注
1学号字符11主键
2姓名字符5非空
3性别字符1默认值为‘男’
4年龄整数允许为空
5生日日期允许为空
6成绩小数41允许为空
7籍贯字符10默认值为‘山东青岛’
第 2 页

2、数据操作:

(1)用insert插入你个人的数据,及其它2位同学的模拟数据。

体验:主键不能重复也不能为空、非空字段必须输入值、有默认值字段不输入值时自动填充默认值。

(2)查看数据

(3)用update修改你的数据

第 3 页

3、提示说明:

(1)通常,数据库中的数据表,都要有主键。主键有3种情况:

①主键是一个字段。在定义该字段时,可以直接用primary key说明。如:学号 varchar(11) primary key,

凡是指定为主键的字段,默认都是为not null的,此时也可以不写not null。

②主键是二个或二个以上字段构成,称为联合主键([P103]),定义时,在最后单独定义primary key(字段1,字段2)。

③如果表中没有明显主键,可以使用标识列id,指定标识列id作主键。

第 4 页

提示说明:

使用标识列作主键,ID为整数,起始值(又称种子)可以为1,增量(又称步长)也可以为1。

即id int primary key auto_increment

(2)默认值为‘男’, 用default‘男’

(3)成绩,保留1位小数,用decimal 或numeric(2者用法相同), decimal (4,1)表示长度共4位(不包括小数点),其中小数1位。如小数位数是0,则表示整数。

第 5 页

4、参考答案:

第 6 页

练习2:创建带有约束的表2(标识列作主健)

1、在XK库中,创建一个‘选举表’,表名:选举表,结构如下:

说明:id int primary key auto_increment 。

要有关键字auto_increment,默认从1开始,增量也是1。

但用insert语句插入数据时,不要给id赋值,系统会自动根据定义赋给相应值。

序号字段名数据类型长度小数位数约束备注
1ID整数主键(从1开始,步长为1)
2姓名字符5非空
3性别字符1默认值为‘女’
4得票整数
第 7 页

2、数据操作:

(1)用insert录入3条模拟数据

(2)显示数据,观察id变化。

(3)删除一条记录,再增加一条记录,观察id的变化。

第 8 页

3、参考答案:

第 9 页

练习3:修改表的结构

为“选举表”增加1个字段,班委varchar(6)

第 10 页

练习4:2个表数据操作

1、复制“选举表”,生成新表“得票表”

(包括结构和数据)

2、查看2个表的结构和数据

第 11 页

3、思考并实验

如果用一条语句

create table 得票表 select * from 选举表;

那么,得票表和选举表有什么区别?

4、清空“得票表”的数据后,只将“选举表”中的姓名、性别2列数据,追加到“得票表”中,如何写语句?

执行后,查看得票表id有什么变化?

第 12 页

说明:

从表1中的查询出数据插入到表2中

insert into 表2(字段1, 字段2,……) select 字段1, 字段2,…… from 表1 where 条件

说明:

(1)表1、表2都是已存在的表,结构可以不完全相同。

(2)语句中表2的字段列表,要与表1的字段列表一一对应(个数、类型、顺序等)。

(3)表2中,没有插入数据的字段,要允许为空。

如:

insert into 得票表(姓名,性别) select 姓名,性别 from 选举表

第 13 页

练习5:数据从2个表中关联查询出来

Select 表1.字段名1, 表1.字段名2,…, 表2.字段名1, 表2.字段名2, …

From 表1,表2 where 表1和表2的关联条件

如:

select 学生表.学号, 学生表.姓名, 学生表.性别, 班级表.班级

from 学生表,班级表

where 学生表.班级代码=班级表.班级代码

执行下列语句,查看结果:

select student.stuno,student.stuname,class.ClassName from student,class where student.ClassNo=class.ClassNo;

课件里的提醒 课件原文中的“说明 / 注意 / 出错”

  • 说明:成绩用decimal(4,1)
  • 说明:id int primary key auto_increment 。

本讲 SQL 速览 把课件里出现的语句集中起来,方便照着敲

SQL
create table 得票表 select * from 选举表;
SQL
insert into 表2(字段1, 字段2,……) select 字段1, 字段2,…… from 表1 where 条件
SQL
insert into 得票表(姓名,性别) select 姓名,性别 from 选举表
SQL
Select 表1.字段名1, 表1.字段名2,…, 表2.字段名1, 表2.字段名2, …
SQL
From 表1,表2 where 表1和表2的关联条件
SQL
select 学生表.学号, 学生表.姓名, 学生表.性别, 班级表.班级
SQL
from 学生表,班级表
SQL
where 学生表.班级代码=班级表.班级代码
SQL
select student.stuno,student.stuname,class.ClassName from student,class where student.ClassNo=class.ClassNo;