sql实验一。
i. 范例。
我们也可用sql语言来处理学生选课系统,为有别于前面所建立的数据库文件,我们可建立数据库文件类似地,中有三个表:s,c,sc
1. 在student中用sql语句创建s、c和sc表。
sql语句的输入:打开一个已有的access数据库,在“对象”栏中选中“查询”,在“列表框”内选定“在设计视图中创建查询”命令,双击之,或按“设计”按钮,系统将显示一个查询窗口和一个“显示表”对话框,关闭“显示表”对话框,在不关闭查询窗口的情况下,①access窗口的菜单栏上才会出现查询菜单,该查询菜单下有“sql特定查询”子菜单、②视图菜单中会出现“sql视图”命令、③同时原来显示在菜单栏下的数据库工具栏自动被切换为“查询设计”工具栏,其中的左上角会有一个视图切换按钮。无论用上述三种方法的哪一种,均可在access窗口中显示供输入sql语句的“查询”窗口。
注意:①在该窗口中只能输入一条sql语句!但可分行输入,系统会把分号“;”作为命令的结束标志,但一般在输入命令时,不必人为地输入分号。
当需要分行输入时,不能把sql语言的关键字或字段名分在不同行。
sql语句中所有的标点符号和运算符号均为ascii字符!
每两个单词之间至少要有一个空格或有必要的逗号!
sql语句的保存:关闭“sql语句输入”窗口,命名为一个查询。
sql语句的执行:在“sql语句输入”窗口中输入一个完整的sql语句后,按“查询设计工具栏”中的运行按钮“!”或在数据库窗口中双击已被保存的相应查询。
create table s(sno char(6) primary key,sname char(8) not null,ssex char(2),sage char(2),phone char(8)
注意:当某一字段定义后有字句primary key,则说明该字段为主健;not null也是实体完整性约束条件,表示相应字段值非空,即必填字段,unique表示表中所有记录该字段的值各不相同的,即该字段值具有唯一性。
create table c(cno char(6) primary key,cname char(8) not null unique,cpno char(6) references c(cno),ctime smallint,ccredit smallint
注意:上述命令中cpno char(6) references c(cno),表示字段cpno的取值来自于c表的cno,参照关系不仅可以发生在不同表之间也可以发生在同一张表的不同字段之间。
create table sc (sno char(6)not null references s(sno),cno char(6) not null references c(cno),grade smallint,primary key (sno,cno)
注意:上述建表命令中的primary key (sno,cno),表示将两字段sno、cno合并在一起作为主键,即两字段的取值合并在一起(即字符串的合并)是非空且唯一的。
2. 用如下的sql命令修改表结构,将s表中的sage字段的数据类型改为短整数型;给s表添加一个长度为10的文本型字段sdept;删除s 表的**号码列。
命令分别为:
alter table s alter sage smallint:
alter table s add sdept char(10);
alter table s drop phone;
ii. 实验内容。
一、 新建一个空的数据库,该数据库文件的主名为“四级考试+教学班**(三位数)+学生在该班内的序号(三位数)”
二、 该数据库中有数据表stud和exam,分别存放学生情况和学生参加英语四级考试的情况。并且:
1. 每位学生的身份证号不能为空且各不相同,不同学校的学生学号可能相同(姓名更可能相同),但同一所学校的学生学号不会相同;
2. 每年在1月和7月举行两次考试,每次考试分听力、语法和写作三个部分,各部分满分分别为40分、30分和30分;一次考试成绩总分》=60分,且三个部分的成绩均不低于相应满分的一半时,该次考试为合格;
3. 同一个学生在校期间可多次参加四级考试,直至合格为止;但同一位学生不会在同一次考试中有多于一条的记录。
三、 考虑两数据表的结构如下:
表stud的结构为:sno(学号) 文本型 6个字符。
sname(姓名) 文本型 6个字符。
ssex(性别) 文本型 2个字符。
syear(年级) 短整型。
suniname(校名) 文本型 8个字符。
sid(身份证号) 文本型 9个字符(每位学生的身份证号各不相同,且不能为空)
表exam的结构为:sid(身份证号) 文本型 9个字符(非空,仅在表stud中的学生才能参加四级考试)
eyear(考试年份) 文本型 4个字符(非空)
emonth(考试月份) 文本型 1个字符(非空)
elisten(听力成绩) 短整型。
egrammar(语法成绩) 短整型。
ewrite(写作成绩) 短整型。
同一位学生不能多次参加同一场考试。
在实际建表前先分析:
实体完整性约束条件以决定两表的主键及两表之间的参照完整性约束条件。
显然stud表的主键为sid,故在创建表stud结构的sql语句中应有短语“sid char(9) primary key,”;那么,exam表的主健是什么呢?在创建表exam结构的sql语句中又应如何书写呢?
用sql语句创建两表的结构,包括定义实体完整性和参照完整性。
创建stud表命令为:
create table stud(sno char(6),sname char(6),ssex char(2),syear short,suniname char(8),sid char(9) primary key)
保存此数据定义查询为“建表stud命令”
创建exam表命令为:
create table exam(sid char(9) not null references stud(sid),eyear char(4) not null,emonth char(1) not null,elisten short,egrammar short,ewrite short,primary key(sid,eyear,emonth))
保存此数据定义查询为“建表exam命令”
四、 用sql语句修改数据表的结构。
1. 删除表stud中的syear字段,将该sql语句保存为“删除字段命令”
alter table stud drop syear
2. 修改表stud中的ssex字段的类型为1个字符,将该sql语句保存为“修改字段命令”
alter table stud alter ssex char(1)
3. 在表exam表中增加ssum(总分)字段,其类型为短整型,将该sql语句保存为“增加字段命令”
alter table exam add ssum short
五、 用insert命令数据表追加记录。
1. 向表stud追加一条如下的记录:
sno sname ssex suniname sid
02005 程忠男上海理工 850310123
将该sql语句保存为“追加具有全部字段值记录命令”
insert into stud values ('02005', 程忠', 男', 上海理工', 850310123');
2. 向表exam追加一条如下的记录:
sid eyear emonth elisten egrammar ewrite
将该sql语句保存为“追加具有部分字段值记录命令”
insert into exam ( sid, eyear, emonth, elisten, egrammar, ewrite )
values ('850310123', 2007", 7", 10, 25, 15);
六、 用导入方法将位于文件“四级考试。xls”中的记录导入到相应的数据表中。
七、 数据表的记录的编辑。
1. 在表stud中将sid字段值为“871221226”的性别改为女,并将该命令保存为“修改字段值命令1”。
update stud set ssex = 女' where sid='871221226';
2. 在表stud中将学校名称为“上海大学”的记录的学校名称一律改为“上海政法学院”,并将该命令保存为“修改字段值命令2”。
update stud set suniname = 上海政法学院' where suniname = 上海大学';
3. 在表stud中将sid字段值为“860501236”的记录删除,并将该命令保存为“删除记录命令”。
delete * from stud where sid="860501236";
4. 计算每位考生每次考试的总成绩,并填入总分字段ssum中,并将该命令保存为“计算总分字段值命令”。
update exam set ssum = elisten+egrammar+ewrite;
SQL习题有答案
一 选择。1 根据关系数据基于的数据模型 关系模型的特征判断下列正确的一项 b a 只存在一对多的实体关系,以图形方式来表示。b 以二维 结构来保存数据,在关系表中不允许有重复行存在。c 能体现一对多 多对多的关系,但不能体现一对一的关系。d 关系模型数据库是数据库发展的最初阶段。2 a 如果要让w...
实验5SQL查询答案
1.查询zgda表中所有职工的信息。sele from zgda 2.查询zgda表中所有职工的职称字段值。sele职称 from zgda 3.查询zgda表中所有职工的职称种类,即去掉重复的职称信息。sele dist 职称 from zgda 4.查询zgda表中所有职工的姓名 性别 年龄 职...
实验二SQL简单查询 答案
实验目的 掌握select语句的基本语法格式和用法,能够灵活使用select语句完成提出的查询要求。实验内容 使用select语句完成以下查询 1.查询全体学生的学号 姓名,要求查询结果按学号的升序进行排序。select sno,sname from student order by sno 2.查...