1、第二节:数据定义1、库文件和表文件的建立建库文件: crea database 学生管理modi database (此时可以见到数据库设计器)建表文件: 有数据库打开的时候,所建立的表是数据库表,如果想建立自由表, 在建表时要在表文件名后加上free.例1在打开数据库设计器时,比较以下两条命令的操作结果。Create table abc free (sno c(5), sname c(6)Crea table abc (sno c(5),sname c(6)例2 建立一个名为temp的表,该表字段情况为:学号 c(5),姓名 c(8),性别 c(2),出生日期 d,其中学号和姓名字段不能为空
2、)crea table temp(学号 c(5),姓名 c(8) ,; 性别 c(2) null,;出生日期 d null)在vf中,字段默认是不允许为空值的,所以对于不允许为空值的字段,not null可以省略不写。另外,在输入空值的时候需要使用 ctrl+0例3:以第五章为例,建立学生管理数据库,要求有学生、选课、课程,共3张表。crea database 学生管理 (建立数据库)crea table 学生(学号 c(6) primary key,; 姓名 c(8),性别 c(2),籍贯 c(6),; 入学成绩 n(5,1) check(入学成绩=480) error 入学成绩至少为480
3、分,; 少数民族 l,简历 m,照片 g)在学生管理数据库中建立学生表。字段名及宽度如命令中所示,注意字段名和字段类型中间有空格,一行写不下时加分号换行。Primary key 表示学号为主关键字,check是字段有效性规则,error为报错信息。crea table 课程(课程号 c(6) primary key,课程名 c(20),学分 n(1) (建立课程表)crea table 选课(学号 c(6),课程号 c(6),成绩 n(2,0); check(成绩=0.and.成绩=34) error至少需要学时34 default 51为课程表增加学时字段,该字段为整型,至少34 默认51a
4、lter table 课程 alter 学时 n(2,0) check(学时=16) error学时至少16 default 34将课程表的学时字段修改为数值型,并且修改字段有效性规则及默认值注意:对于一个刚建立好的空表(没有记录的表),vf不会去检查字段有效性,因此check条件可以任意写,但对于一个有记录的表文件,如果声明了check条件,那么最好要加上default,而且default必须符合check条件要求,否则vf报错(因为vf认为新加的字段不符合check条件的限定)。上机实验时,可以在一个已经建好的数据库(比如之前的学生管理数据库)中给课程表加字段。例如:=80) error学
5、时至少80 default 80可以发现,第一条命令为课程表添加了一个学时字段,而第二条命令修改了学时字段的字段有效性,但第三条命令无法执行下去。因为之前的学时默认值是34,无法满足大于等于80的要求。定义、修改、删除字段有效性规则alter table 课程 alter 学时 drop check将课程表中学时字段的字段有效性规则删除,保留默认值,如果想实现刚好相反的效果,可以将drop check换成drop default删除字段: alter table 课程 drop 学时第三节:数据查询1、命令语法 Select 要查询的字段或表达式 from 字段的来源 where 查询条件2、
6、基本查询 Select * from 学生 显示学生表的全部信息select 学号,姓名,籍贯,出生日期 from 学生 显示学生表的指定字段sele 姓名 as 学生名单, year(date()-year(出生日期) as 年龄 from 学生sele 学号,姓名,round(入学成绩,0) as 考试成绩 from 学生sele avg(入学成绩) as 入学成绩平均分 from 学生sele round(avg(入学成绩),0) as 入学成绩平均分 from 学生sele 性别,count(*) as 学生人数 from 学生 group by 性别3、条件查询 sele 姓名,入学
7、成绩 from 学生 where 少数民族 and 性别=女sele * from 学生 where 籍贯 in (云南,陕西)sele * from 学生 where 籍贯= or 籍贯=以下3条命令是等价的1、sele * from 学生 where 籍贯!=2、sele * from 学生 where 籍贯 sele * from 学生 where 籍贯#3、sele * from 学生 where not(籍贯=sele * from 学生 where 入学成绩 between 565 and 575sele * from 学生 where 入学成绩=565 and 入学成绩=a an
8、d x(select 年龄 from s where 姓名=张三)(因为子查询只返回了一个值,因此称为返回单值的子查询)(2)返回一组值的子查询列出选修01101的学生中成绩比选修01102的最低成绩高的学生的学号和成绩。(找出选修数据库原理的成绩比选修软件工程的最低分成绩高的)sele 学号,成绩 from 选课 where 课程号=01101 找出选修01101课程的学生sele 成绩 from 选课 where 课程号=01102 找出选修01102课程的学生 and 成绩any; (sele 成绩 from 选课 where 课程号=该命令还可以写成如下形式:sele 学号,成绩 fr
9、om 选课 where 课程号=;(sele 课程号 from 课程 where 课程名=) and 成绩 (sele 成绩 from 选课 where 课程号= 这个形式的意思是找出选修数据库原理的成绩比选修01102的最低分成绩高的学生的学号和成绩。(sele 成绩 from 选课 where 课程号=;(select 课程号 from 课程 where 课程名=软件工程)这个形式的含义是对的。但是嵌套了两层(蓝色部分是第一层嵌套,褐色部分是第二层嵌套)。Vf只支持一层嵌套,所以这个命令无法执行。列出选修01101的学生,要求这些学生的成绩比选修01102课程的最高成绩还要高的学生的学号和成绩select 学号,成绩 from 选课 where 课程号=all; (select 成绩 from 选课 where 课程号=列出选修数据库原理或软件工程的所有学生的学号select 学号 from 选课 where 课程号 in; or 课程名=软件工程
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1