1、2018/10/13,经济与管理学院,1,第4章 结构化查询语言SQL,4.1 SQL概述 4.2 SQL的数据查询功能 4.3 SQL的数据操作功能 4.4 SQL的数据定义功能,2018/10/13,经济与管理学院,2,SQL是Sturctured Query Language(结构化查询语言)的缩写。SQL包含数据查询、数据定义、数据操纵和数据控制等功能。其中查询是SQL语言的重要组成部分。 SQL是关系数据库的标准语言,所有的关系数据库管理系统都支持SQL。,4.1 SQL简介,2018/10/13,经济与管理学院,3,一体化语言 高度非过程化 语言简洁,易学易用 统一的语法格式,不同
2、的工作方式 视图数据结构,SQL操作的两个基本数据结构对象是:表和视图,SQL语言主要特点:,2018/10/13,经济与管理学院,4,4.2 SQL的数据查询功能,格式:SELECT ALL|DISTINCT , FROM , ,2018/10/13,经济与管理学院,5,INTO | TO FILE ADDITIVE | TO PRINTER | TO SCREEN|into cursor|into table,2018/10/13,经济与管理学院,6,WHERE AND AND|OR AND |OR ,2018/10/13,经济与管理学院,7,GROUP By , UNION ALL OR
3、DER By ASCENDING|DESCENDING,ASCENDING|DESCENDING ,建议:多多操作! 来加深印象!,2018/10/13,经济与管理学院,8,ALL:,DISTINCT:,在查询结果中包含所有的行(包括重复值)。它是系统的默认设置。,在查询结果中删除重复行。,2018/10/13,经济与管理学院,9,当涉及到多表查询时,需要通过别名来区分不同表文件中的字段。,:,:,检索项主要是FROM子句中所给出的表文件中的字段名。选中的字段名可以和SQL函数一起使用。,常用到的函数有:,平均值函数AVG(): 求一列数据的平均值,求和函数SUM(): 求一列数的总和,计数函
4、数COUNT(): 求一列中该字段的个数,最大值函数MAX(): 求一列数的最大值,最小值函数MIN(): 求一列数的最小值,2018/10/13,经济与管理学院,10,FROM:,form子句也是命令中不可缺少的成分,用于指定数据来源,其后列出所有要查询的表文件名,可以加上相应的别名。,2018/10/13,经济与管理学院,11,WHERE,WHERE是命令可选项,其后各子句含义为: 是指多表文件查询的条件;是指单表文件的查询条件.,2018/10/13,经济与管理学院,12,GRONP By短语:,将查询结果按某一列(或多个列)的值进行分组;,HAVING子句,只与GROUP By配合使用
5、,用于说明分组条件;,HAVING子句:,2018/10/13,经济与管理学院,13,说明将两个查询结果合并在一起输出;若无ALL,重复记录将被自动取消,若有ALL表示结果全部合并;,UNION ALL :,2018/10/13,经济与管理学院,14,ORDER By ASC|DESC,ORDER BY子句指定按哪个字段对查询结果排序,ASC为升序, DESC为降序;,2018/10/13,经济与管理学院,15,INTO Destination:,指定在何处保存查询结果。如果在同一个查询中同时包含了INTO子句和TO子句,则TO子句不起作用。如果没有包含INTO子句,查询结果显示在“浏览”窗口
6、中。,Destination可以是下列三种子句之一,ARRAY ArrayName: 将查询结果保存到数组中。如果查询 结果中不包含任何记录,则不创建这 个数组。,CURSOR CursorName:将查询结 果保存到临时表中。如果指定了一 个已打开表的名称,则VFP产生错 误信息。执行完SELECT语句后, 临时表仍然保持打开,但只读。一 旦关闭临时表,则自动删除它。,DBF TableName|TABLE TableName: 将查询结果保存到一个表中,如果指定 的表已经打开,并且SET SAFETY设置 为OFF,则VFP在不给出任何警告信息 的情况下改写该表。执行完SELECT语 句后
7、,该表仍然保持打开活动状态。,2018/10/13,经济与管理学院,16,TO FILE FileName ADDITIVE | TO PRINTER PROMPT | TO SCREEN:,如果命令中包含了TO子句,但没有包括INTO子句,则查询结果定向输出到名为FileName的ASCII码文件、打印机或主窗口。包含ADDITIVE子句使查询结果追加到所指定的文本文件的内容后面。,2018/10/13,经济与管理学院,17,1.无条件查询:select-from结构,eg1:查询部分字段(查询学生的学号和姓名),select 学号,姓名 from student,4.2.1 简单查询,eg
8、2:查询职工的所有工资值select 工资 from 职工,2018/10/13,经济与管理学院,18,eg5:列出学生表中的班级名称 (无重复行)select distinct 班级 from student,eg3:查询学生表中全部字段 select * from student eg4:查询仓库表中的所有元组 Select * from 仓库,“*”是通配符,表示所有字段,Distinct:去掉查询结果中的重复值,2018/10/13,经济与管理学院,19,2.条件查询:select-from-where结构eg1:查询课程号是7100081,成绩大于70分的学生学号及成绩,且将成绩由高
9、到低列出,Select 学号,成绩 from grade where 课程; 号=“7100081” and 成绩70 order by 成绩 desc,eg2:查询1983年9月1日以后出生的学生名单,Select 姓名 from student where 出生日期ctod(“09/01/83”),eg3:列出选修课的课程名称和课程号,Select 课程名,课程号 from course where 课程性质=“选修”,2018/10/13,经济与管理学院,20,eg4:查询职工表中工资多于1210元的职工所在的仓库号 Select distinct 仓库号 from 职工 where 工
10、资1210eg5:给出在仓库“WH1”或“WH2”工作并且工资少于1250元的职工号 select 职工号 from 职工; where 工资1250 and (仓库号=“WH1“ OR 仓库号=“WH2“),2018/10/13,经济与管理学院,21,4.2.2简单的连接查询,连接是关系的基本操作之一,连接查询是一种基于多个关系(表)的查询。eg1:找出工资多于1230元的职工号和他们所在的城市。select 职工号,城市 from 职工,仓库;where(工资1230) and (职工.仓库号=仓库.仓库号),2018/10/13,经济与管理学院,22,eg2:找出工作在面积大于400的仓
11、库的职工号以及这些职工工作的城市。select 职工号,城市 from 仓库,职工;where(面积400) and (职工.仓库号=仓库.仓库号),2018/10/13,经济与管理学院,23,4.2.3 嵌套查询,在一个select命令的where子句中,如果还出现了另一个select命令,则这种查询称为嵌套查询。Vfp只支持单层嵌套查询。嵌套查询所要求的结果出自一个关系,但相关的条件却涉及多个关系:一般外层查询的条件依赖内层查询的结果,而内层查询与外层查询无关。,2018/10/13,经济与管理学院,24,eg1:查询哪些城市至少有一个仓库的职工的工资为1250元。 select 城市 f
12、rom 仓库 where 仓库号 in (select 仓库号 from 职工 where 工资=1250),2018/10/13,经济与管理学院,25,eg2:查询所有职工的工资都多于1210元的仓库的信息。select * from 仓库 where 仓库号 not in (select 仓库号 from 职工 where 工资=1210)and 仓库号 in (select 仓库号 from 职工),2018/10/13,经济与管理学院,26,eg3:找出和职工E4挣同样工资的所有职工。select 职工号 from 职工;where 工资=(select 工资 from 职工 wher
13、e 职工号=“E4“),2018/10/13,经济与管理学院,27,eg4:查询选修运筹学的所有学生的学号及成绩) Select 学号,成绩 from grade where 课程号= (select distinct 课程号 from course where 课程名=“运筹学“),2018/10/13,经济与管理学院,28,eg5:查询开出选修课的所有教师情况 select * from teacher where 课程号 in (select 课程号 from course where 课程性质=“选修”),2018/10/13,经济与管理学院,29,特殊运算符:betweenand,
14、in, like, not,!=eg1:确定范围的查询(eg1:查询成绩在80分到90分之间的学生得分情况),select * from grade where 成绩 between 80 and 90,注意in和between的区别,或 select * from grade where 成绩=80 and 成绩=90,4.2.4 特殊运算符,2018/10/13,经济与管理学院,30,eg2:查询工资在1220元到1240元范围内的职工信息。select * from 职工 where 工资 between 1220 and 1240 或:select * from 职工 where 工资
15、=1220 and 工资=1240,2018/10/13,经济与管理学院,31,eg3:查询工资不在1220元到1240元范围内的职工信息。 select * from 职工 where 工资 not between 1220 and 1240,2018/10/13,经济与管理学院,32,eg4:列出课程号是5200010和课程号是8600730的全体学生的学号和成绩.,select 学号,成绩 from grade where 课程号 in (“5200010”,”8600730”) 或:select 学号,成绩 from grade where 课程号=“5200010” or 课程号=“
16、8600730”,2018/10/13,经济与管理学院,33,模糊查询:like,eg1:在student表中,查询2002级学生的基本情况 select * from student where 学号 like“2002%“eg2:从供应商关系中找出全部公司的信息 select * from 供应商 where 供应商名 like “%公司“,注意like的使用及%与_的区别,2018/10/13,经济与管理学院,34,!=及NOT的使用,eg:找出不在北京的全部供应商的信息。select * from 供应商 where 地址 !=“北京“ 或select * from 供应商 where
17、 not (地址 =“北京“),2018/10/13,经济与管理学院,35,4.2.5 排序,ORDER By ASC|DESC:指定将查询结果按哪个字段排序,ASC为升序, DESC为降序; eg1:对学生表按姓名排序Select * from student order by 姓名,2018/10/13,经济与管理学院,36,eg2:按职工的工资值升序检索出全部职工的信息。select * from 职工 order by 工资eg3:先按仓库号排序,再按工资排序输出全部职工信息 select * from 职工 order by 仓库号,工资,注意:order by 是对最终的查询结果进
18、行排序,不可以在子查询中使用该短语,2018/10/13,经济与管理学院,37,eg1:找出供应商所在地的数目。select count(distinct 地址) from 供应商eg2:找出供应商关系中的记录数 select count(*) from 供应商eg3:求支付的工资总数 select sum(工资) from 职工,4.2.6 简单的计算查询(库函数查询),用于计算检索的库函数有: count( )、 sum( )、avg( )、max( )、min( ),2018/10/13,经济与管理学院,38,eg4:求北京和上海的仓库职工的工资总和select sum(工资) from
19、 职工 where 仓库号 in (select 仓库号 from 仓库 where 城市=“北京“ or 城市=“上海“),2018/10/13,经济与管理学院,39,eg5:求所有职工的工资都多于1210元的仓库的平均面积。select avg(面积) from 仓库 where 仓库号 not in (select 仓库号 from 职工 where 工资=1210) 若不包括没有职工的仓库,则为 select avg(面积) from 仓库 where 仓库号 not in (select 仓库号 from 职工 where 工资=1210) and 仓库号 in (select 仓库
20、号 from 职工),2018/10/13,经济与管理学院,40,eg6:求在WH2仓库工作的职工的最高工资值 select max(工资) from 职工 where 仓库号=“WH2“ eg7:求在WH2仓库工作的职工的最低工资值 select min(工资) from 职工 where 仓库号=“WH2“,2018/10/13,经济与管理学院,41,eg8:查询1983年1月1日后出生的学生人数,select count(*) from student where 出生日期ctod(“01/01/83“),2018/10/13,经济与管理学院,42,4.2.7 分组与计算查询,GRONP
21、 By短语:,将查询结果按某一列(或多个列)的值进行分组;,HAVING子句,只与GROUP By配合使用,用于说明分组条件;,HAVING子句:,2018/10/13,经济与管理学院,43,eg1:查询男女生人数,Select count(性别) from student group by 性别,2018/10/13,经济与管理学院,44,eg2:求每个仓库的职工的平均工资select 仓库号,avg(工资) from 职工 group by 仓库号eg3:求至少有两个职工的每个仓库的平均工资select 仓库号,count(*),avg(工资) from 职工 group by 仓库号 h
22、aving count(*)=2,2018/10/13,经济与管理学院,45,eg4:列出最少选修二门课程的学生姓名select 姓名 from student where 学号 in(select 学号 from grade group by 学号 having count(*)=2),2018/10/13,经济与管理学院,46,eg5:列出各门课的平均成绩、最高成绩、最低成绩和选课人数select 课程号, AVG(成绩) AS 平均成绩, MAX(成绩) AS 最高分, MIN(成绩) AS 最低分, COUNT(学号) AS 选课人数 from grade group by 课程号,2
23、018/10/13,经济与管理学院,47,eg6:求出总分大于140的学生的学号,姓名及总成绩 select s.学号,姓名,sum(成绩) as 总成绩 from student s, grade g where s.学号=g.学号 group by g.学号 having sum(成绩)140,2018/10/13,经济与管理学院,48,4.2.8 利用空值查询:is null,空值怎么查?,eg1:在KZS表中,查询年龄为空值的记录,并列出学号,姓名,性别和年龄select 学号,姓名,性别,年龄 from kzs where 年龄 is nulleg2:找出尚未确定供应商的订购单sel
24、ect * from 订购单 where 供应商号 is null,2018/10/13,经济与管理学院,49,eg3:列出已经确定了供应商的订购单信息select * from 订购单 where 供应商号 is not null,2018/10/13,经济与管理学院,50,4.2.9别名与自连接查询,别名 SQL允许在FROM短语中为关系名定义别名,格式为. eg:select 供应商名 from 供应商 S,订购单 P,职工 E,仓库 W;where 地址=“北京“ and 城市=“北京“;and s.供应商号=p.供应商号;and p.职工号=e.职工号;and e.仓库号=w.仓库号
25、,2018/10/13,经济与管理学院,51,等值连接eg:查询学号是20015799的学生所选课程的课程名及成绩,Select 课程名,成绩 from grade, course where grade. 课程号=course.课程号 and 学号=“20015799”,或:Select 课程名,成绩 AS 考试成绩 from;grade g, course c where g.课程号=c.课程号; and 学号=“20015799”,2018/10/13,经济与管理学院,52,自连接:同一关系与自身进行连接 eg1:找出至少选修5200010号课和4200013号课学生的学号,select
26、 x.学号 from grade x, grade y where x.学号=y.学号 and x.课程号=“5200010” and y.课程号=“4200013”,2018/10/13,经济与管理学院,53,eg2:根据雇员关系列出上一级经理及其职员的清单select s.雇员姓名,“领导“,e.雇员姓名 from 雇员 s,雇员 e where s.雇员号=e.经理,2018/10/13,经济与管理学院,54,4.2.10 内外层互相关嵌套查询,若内层查询的条件需要外层查询提供值,而外层查询的条件需要内层查询的结果,则这种查询即为内外层互相关嵌套查询。,2018/10/13,经济与管理学
27、院,55,eg:列出每个职工经手的具有最高金额的订购单信息,select out.职工号,out.供应商号,out.订购单号,out.订购日期,out.总金额;from 订购单 out where 总金额=;(select max(总金额) from 订购单 innerl; where out.职工号=innerl.职工号),2018/10/13,经济与管理学院,56,4.2.11 使用量词和谓词的查询,比较运算符ANYALLSOME(子查询) 量词:ANY、ALL、SOME,其中ANY与SOME为同义词,在进行比较运算时只要子查询中有一行能使结果为真,则结果就为真;而ALL则要求子查询中的所
28、有行都使结果为真时,结果才为真。 NOTEXISTS(子查询) 谓词:EXISTS,EXISTS或NOT EXISTS是用来检查在子查询中是否有结果返回(即存在元组或不存在元组),2018/10/13,经济与管理学院,57,eg1:检索那些仓库中还没有职工的仓库的信息。select * from 仓库 where not exists (select * from 职工 where 仓库号=仓库.仓库号) 等价于:select * from 仓库 where 仓库号 not in (select 仓库号 from 职工 ),2018/10/13,经济与管理学院,58,eg2:检索那些仓库中至少
29、已经有一个职工的仓库的信息。select * from 仓库 where exists (select * from 职工 where 仓库号=仓库.仓库号) 等价于select * from 仓库 where 仓库号 in (select 仓库号 from 职工 ),注意:NOTEXISTS只是 判断子查询中是否有或没有结果返回,它本身并没有任何运算或比较。,2018/10/13,经济与管理学院,59,eg3:检索有职工的工资大于或等于WH1仓库中任何一名职工的工资的仓库号select distinct 仓库号 from 职工 where 工资=any (select 工资 from 职工
30、where 仓库号=“WH1“)等价于:select distinct 仓库号 from 职工 where 工资= (select min(工资) from 职工 where 仓库号=“WH1“),2018/10/13,经济与管理学院,60,eg4:检索有职工的工资大于或等于WH1仓库中所有职工的工资的仓库号。select distinct 仓库号 from 职工 where 工资=all (select 工资 from 职工 where 仓库号=“WH1“) 等价于:select distinct 仓库号 from 职工 where 工资=(select max(工资) from 职工 wh
31、ere 仓库号=“WH1“),2018/10/13,经济与管理学院,61,eg5:求必修课程号是5200010的学生中成绩比必修课程号是7200050课的最低成绩要高的学生的学号与成绩select 学号,成绩 from grade where 课程号=“5200010” and 成绩any (select 成绩 from grade where 课程号=“7200050”),2018/10/13,经济与管理学院,62,eg6:求必修课程号是5200010的学生中成绩比必修课程号是7200050课的任何学生的成绩都要高的学生的学号与成绩,select 学号,成绩 from grade where
32、 课程号=“5200010” and 成绩all (select 成绩 from grade where 课程号=“7200050”),2018/10/13,经济与管理学院,63,4.2.12超连接查询,INNER JOIN(JOIN),普通连接:只有满足连接条件的记录才出现在查询结果中。,2018/10/13,经济与管理学院,64,Vfp 不支持超连接运算符“*=”和“=*” VFP有专门的连接运算语法格式,它支持超连接查询。,2018/10/13,经济与管理学院,65,LIFT JOIN,左连接:在进行连接运算时,首先将满足连接条件的所有元组放在结果关系中,同时将第一个表(或称Join左边
33、的表)中不满足连接条件的元组也放入结果关系中,这些元组对应第二个表(或称Join右边的表)的属性值为空值。,2018/10/13,经济与管理学院,66,RIGHT JOIN,右连接:在进行连接运算时,首先将满足连接条件的所有元组放在结果关系中,同时将第二个表(或称Join右边的表)中不满足连接条件的元组也放入结果关系中,这些元组对应第一个表(或称Join左边的表)的属性值为空值。,2018/10/13,经济与管理学院,67,FULL JOIN,全连接:在进行连接运算时,首先将满足连接条件的所有元组放在结果关系中,同时将两个表中不满足连接条件的元组也放入结果关系中,这些元组对应另一个表的属性值为
34、空值。,2018/10/13,经济与管理学院,68,连接查询的SQL Select语句的格式如下: Select From Table1 Inner | Left | Right | Full JoinTable2 OnWhere 其中,Left、Right、Full分别代表左连接、右连接和全连接,保留字Outer只能与Left、Right、Full连用,使用与否功能相同,Left、Right、Full三种连接方式也称为外连接。,2018/10/13,经济与管理学院,69,eg1:普通连接(将仓库表和职工表通过公共的字段仓库号进行连接) select 仓库.仓库号,城市,面积,职工号,工资 f
35、rom 仓库,职工 where 仓库.仓库号=职工.仓库号 等价于:select 仓库.仓库号,城市,面积,职工号,工资 from 仓库 join 职工 on 仓库.仓库号=职工.仓库号 或:select 仓库.仓库号,城市,面积,职工号,工资 from 仓库 inner join 职工 on 仓库.仓库号=职工.仓库号,2018/10/13,经济与管理学院,70,eg2:左连接select 仓库.仓库号,城市,面积,职工号,工资 from 仓库 left join 职工 on 仓库.仓库号=职工.仓库号,2018/10/13,经济与管理学院,71,eg3:右连接select 仓库.仓库号,城
36、市,面积,职工号,工资 from 仓库 right join 职工 on 仓库.仓库号=职工.仓库号,2018/10/13,经济与管理学院,72,eg4: 全连接select 仓库.仓库号,城市,面积,职工号,工资 from 仓库 full join 职工 on 仓库.仓库号=职工.仓库号,2018/10/13,经济与管理学院,73,注:在这种格式中,JOIN和ON的顺序很重要,join的顺序和on的顺序正好相反。,select 仓库.仓库号,城市,供应商名,地址;from 供应商 join 订购单 join 职工 join 仓库;on 职工.仓库号=仓库.仓库号;on 订购单.职工号=职工.
37、职工号;on 供应商.供应商号=订购单.供应商号,2018/10/13,经济与管理学院,74,4.2.13集合的并运算,SQL支持集合的并(UNION)运算,即可以将两个SELECT 语句的查询结果通过并运算合并成一个查询结果。为了进行并运算,要求两个查询结果具有相同的字段个数,并且对应字段的值要出自同一个值域。,2018/10/13,经济与管理学院,75,格式:UNION ALL 说明将两个查询结果合并在一起输出;若无ALL,重复记录将被自动取消,若有ALL表示结果全部合并;,2018/10/13,经济与管理学院,76,eg:以下结果为城市为北京和上海的仓库信息select * from 仓
38、库 where 城市=“北京“;union;select * from 仓库 where 城市=“上海“,2018/10/13,经济与管理学院,77,4.2.14 VFP SQL SELECT的几个特殊选项,只显示前几项记录 格式:TOP nExpr PERCENT 说明: nExpr为数字表达式,当不使用PERCENT时, nExpr为1至32767间的整数,说明显示前几个记录;当使用PERCENT时, nExpr是0.01至99.99间的实数,说明显示结果中前百分之几的记录。,注意:TOP短语要与ORDER BY短语同时使用才有效。,2018/10/13,经济与管理学院,78,eg1:显示
39、工资最高的3位职工的信息 select * top 3 from 职工 order by 工资 desceg2:显示工资最低的那30%职工的信息 select * top 30 percent from 职工 order by 工资,2018/10/13,经济与管理学院,79,查询结果的输出去向 Into Array Into Cursor Into Dbf|Table To File To Printer prompt,2018/10/13,经济与管理学院,80,eg1:将查询到的职工信息存放在数组tmp中。select * from 职工 into array tmp?tmp(1,1),t
40、mp(1,2),tmp(1,3),2018/10/13,经济与管理学院,81,eg2:将查询到的职工信息存放在临时.dbf表文件tmp中。 select * from 职工 into cursor tmpeg3:将查询到的职工信息存放在永久表文件highsal中select * top 3 from 职工 order by 工资 desc into table highsal,2018/10/13,经济与管理学院,82,eg4:将查询结果以文本的形式存储在文本文件tmp.txt 中select * top 3 from 职工 order by 工资 desc to file tmp,2018/
41、10/13,经济与管理学院,83,4.3 SQL的数据操作功能,4.3.1.插入数据 格式1:INSERT INTO (, )VALUES (, ),2018/10/13,经济与管理学院,84,eg1:往订购单关系中插入元组insert into 订购单values(“OR01“,“E7“,“S4“,2001-05-25)eg2:若供应商尚未确定,只插入订购单号与职工号两个属性值。insert into 订购单(订购单号,职工号)values (“OR02“,“E7“),2018/10/13,经济与管理学院,85,格式2:Insert Into From Array |MEMVAR,2018/
42、10/13,经济与管理学院,86,eg3:dimension b(5)b(1)=“100010“b(2)=“张珊“ b(3)=“女“ b(4)=.null.b(5)=2002/09/06insert into kzs from array b,2018/10/13,经济与管理学院,87,eg4:学号=“100011“姓名=“黎明“年龄=19性别=“男“insert into kzs from memvar,2018/10/13,经济与管理学院,88,4.3.2.更新数据 UPDATE SET= WHERE 注意:update-sql只能在单一的表中更新记录。,2018/10/13,经济与管理学
43、院,89,eg5:给仓库号为WH1的职工提高10%的工资。update 职工 set 工资=工资*1.10 where 仓库号=“WH1“,2018/10/13,经济与管理学院,90,4.3.3.删除数据 DELETE FROM WHERE ,2018/10/13,经济与管理学院,91,eg6:delete from kzs where 姓名=“黎明“eg7:delete from 仓库 where 仓库号=“WH2“,2018/10/13,经济与管理学院,92,4.4 SQL的数据定义功能,1.表的定义 SQL语言提供的定义表的命令是Create Table。在使用这个命令之前,首先要设计好
44、表结构的各种细节,包括: 表名; 各列(字段)的名称、数据类型、宽度; 哪(几)列将组成表的主键; 表中的哪些列必须提供数据;,2018/10/13,经济与管理学院,93,创建表的语句格式如下: Create Table | Dbf Tablename1 Name LongTableName Free(Fieldname1 FieldType (nFieldWidth , nPrecision) Null | Not Null Check lExpression1 Error cMessageText1Default eExpression1 Primary Key | UniqueRefer
45、ences TableName2 Tag TagName1 , FieldName2 ., Primary Key eExpression2 Tag TagName2|, Unique eExpression3 Tag TagName3, Foreign Key eExpression4 Tag TagName4 Nodup References TableName3 Tag TagName5, Check lExpression2 Error cMessageText2 ) | From Array ArrayName,2018/10/13,经济与管理学院,94,关于Create Table
46、命令说明如下: 命令关键字Create Table 与Create DBF功能相同。 Name LongTableName:为所创建的表定义长表名,只有当前有打开的数据库时,才能使用此选项。 Free:创建为自由表。,2018/10/13,经济与管理学院,95,FieldName1 FieldType(nFieldWidth, nPrecision):4个选项依次分别定义字段名、字段类型,数值型和字符型字段的宽度,数值型字段的小数位宽度。 Null|Not Null:定义本字段是否可以为空。,2018/10/13,经济与管理学院,96,ChecklExpression1Error cMessa
47、geText1:定义本字段的有效性规则和出错时的提示信息字符串。 Default eExpression1:定义字段的默认值。 Primary Key:将本字段创建为主索引字段。 Unique:将本字段创建为侯选索引字段。,2018/10/13,经济与管理学院,97,ReferencesTableName2Tag TagName1:说明本表与之建立永久联系的父表及父表的索引名。 Foreign Key:创建一个外部索引(非主索引),并与一个父表建立关联。 From Array ArrayName:由一个数组创建表,数组中存放了有关表的每个字段的名称、类型、宽度、小数宽度等信息。,2018/10
48、/13,经济与管理学院,98,eg1:create table kzs free(学号 c(6), 姓名; c(8), 性别 c(2), 年龄 n(3) null, 入学年;月 d),2018/10/13,经济与管理学院,99,eg2:create database kkkcreate table 学生2(学号 c(8) primary key, 姓名 c(8) not null, 性别 c(2), 年龄 n(3) check 年龄16 and 年龄25 error “年龄范围在16-25,请输入正确的年龄”, 是否团员 l, 入学年月 d default ctod(“09/06/2002”)
49、, 备注 m nocptrans),2018/10/13,经济与管理学院,100,eg3:open database kkkcreate table 课程2(课号 c(4) primary key, 课程名 c(12) not null, 学分 n(2),2018/10/13,经济与管理学院,101,eg4:open database kkkcreate table 选课2(学号 c(8) references 学生2, 课号 c(4), 成绩 n(5,2), primary key 学号+课号 tag 学号课号, foreign key 课号 tag 课号 references 课程2 tag 课号),2018/10/13,经济与管理学院,102,Eg5: create database 订货管理1 create table 仓库1(仓库号 C(5) primary key,城市 c(10),面积 i check (面积0) error “面积应该大于0“) create table 职工1(仓库号 C(5),职工号 c(5) primary key,工资 i check(工资=1000 and 工资=5000)error “工资值的范围在1000-5000!“ default 1200,foreign key 仓库号 tag 仓库号 references 仓库1),