4.5 综合练习
把前四节合起来做一套练习:建库建表、灌数据、多条件查询、连接统计。
本讲导览
核心内容
综合练习
练习1:创建带有约束的表1(学号作主键)
1、在XK库中,创建一个‘学生表’,表名:学生表,结构如下:
说明:成绩用decimal(4,1)
| 序号 | 字段名 | 数据类型 | 长度 | 小数位数 | 约束 | 备注 |
|---|---|---|---|---|---|---|
| 1 | 学号 | 字符 | 11 | 主键 | ||
| 2 | 姓名 | 字符 | 5 | 非空 | ||
| 3 | 性别 | 字符 | 1 | 默认值为‘男’ | ||
| 4 | 年龄 | 整数 | 允许为空 | |||
| 5 | 生日 | 日期 | 允许为空 | |||
| 6 | 成绩 | 小数 | 4 | 1 | 允许为空 | |
| 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赋值,系统会自动根据定义赋给相应值。
| 序号 | 字段名 | 数据类型 | 长度 | 小数位数 | 约束 | 备注 |
|---|---|---|---|---|---|---|
| 1 | ID | 整数 | 主键(从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、思考并实验
如果用一条语句
create table 得票表 select * from 选举表;那么,得票表和选举表有什么区别?
4、清空“得票表”的数据后,只将“选举表”中的姓名、性别2列数据,追加到“得票表”中,如何写语句?
执行后,查看得票表id有什么变化?
说明:
从表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 选举表练习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;📄 展开课件原文(第 1–13 页,共 13 页)
课件里的提醒 课件原文中的“说明 / 注意 / 出错”
- 说明:成绩用decimal(4,1)
- 说明:id int primary key auto_increment 。
本讲 SQL 速览 把课件里出现的语句集中起来,方便照着敲
create table 得票表 select * from 选举表;insert into 表2(字段1, 字段2,……) select 字段1, 字段2,…… from 表1 where 条件insert into 得票表(姓名,性别) select 姓名,性别 from 选举表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;