结构化查询语言_第1页
结构化查询语言_第2页
结构化查询语言_第3页
结构化查询语言_第4页
结构化查询语言_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

关于结构化查询语言5.1SQL简介SQL是SturcturedQueryLanguage(结构化查询语言)的缩写。SQL包含数据查询、数据定义、数据操纵和数据控制等功能。其中查询是SQL语言的重要组成部分。SQL是关系数据库的标准语言,所有的关系数据库管理系统都支持SQL。第2页,共91页,2024年2月25日,星期天5.1SQL简介SQL语言主要特点:一体化语言高度非过程化语言简洁,易学易用统一的语法格式,不同的工作方式视图数据结构SQL操作的两个基本数据结构对象是:表和视图第3页,共91页,2024年2月25日,星期天5.2数据查询格式:SELECT[ALL|DISTINCT][<别名>·]<检索项>[,<别名>·]<检索项>····]FROM<表名>[<别名>][,<表名>[<别名>]···][WHERE<连接条件>[AND<连接条件···][AND|OR<过滤条件>[AND|OR<过滤条件>···]]][GROUPBy<分组列>[,<分组列···]][HAVING<过滤条件>][UNION[ALL]<SELECT>][ORDERBy<排序项>[ASCENDING|DESCENDING][,<排序项>[ASCENDING|DESCENDING···]]第4页,共91页,2024年2月25日,星期天5.2数据查询[[INTO<目标>]|[TOFILE<文件名>[ADDITIVE]|TOPRINTER|TOSCREEN|intocursor<file>|intotable<file>]]建议:多多操作!来加深印象!第5页,共91页,2024年2月25日,星期天5.2数据查询[ALL]:在查询结果中包含所有的行(包括重复值)。它是系统的默认设置。[DISTINCT]:在查询结果中删除重复行[<别名>·]:当涉及到多表查询时,需要通过别名来区分不同表文件中的字段。<检索项>:检索项主要是FROM子句中所给出的表文件中的字段名。选中的字段名可以和SQL函数一起使用。常用到的函数有:平均值函数AVG(<字段名>):求一列数据的平均值最小值函数MIN(<字段名>):求一列数的最小值最大值函数MAX(<字段名>):求一列数的最大值计数函数COUNT(<字段名>):求一列中该字段的个数求和函数SUM(<字段名>):求一列数的总和第6页,共91页,2024年2月25日,星期天5.2数据查询FROM:form子句也是命令中不可缺少的成分,用于指定数据来源,其后列出所有要查询的表文件名,可以加上相应的别名。WHERE:WHERE是命令可选项,其后各子句含义为:<连接条件>是指多表文件查询的条件;<过滤条件>是指单表文件的查询条件.第7页,共91页,2024年2月25日,星期天5.2数据查询GRONPBy短语:将查询结果按某一列(或多个列)的值进行分组;HAVING子句:HAVING子句,只与GROUPBy配合使用,用于说明分组条件;UNION[ALL]<SELECT>:说明将两个查询结果合并在一起输出;若无ALL,重复记录将被自动取消,若有ALL表示结果全部合并;第8页,共91页,2024年2月25日,星期天5.2数据查询ORDERBy<排序项>[ASC|DESC]:ORDERBY子句指定按哪个字段对查询结果排序,ASC为升序,DESC为降序;第9页,共91页,2024年2月25日,星期天5.2数据查询[INTODestination]:指定在何处保存查询结果。如果在同一个查询中同时包含了INTO子句和TO子句,则TO子句不起作用。如果没有包含INTO子句,查询结果显示在“浏览”窗口中。Destination可以是下列三种子句之一DBFTableName|TABLETableName:将查询结果保存到一个表中,如果指定的表已经打开,并且SETSAFETY设置为OFF,则VFP在不给出任何警告信息的情况下改写该表。执行完SELECT语句后,该表仍然保持打开活动状态。CURSORCursorName:将查询结果保存到临时表中。如果指定了一个已打开表的名称,则VFP产生错误信息。执行完SELECT语句后,临时表仍然保持打开,但只读。一旦关闭临时表,则自动删除它。ARRAYArrayName:将查询结果保存到数组中。如果查询结果中不包含任何记录,则不创建这个数组。第10页,共91页,2024年2月25日,星期天5.2数据查询TOFILEFileName[ADDITIVE]|TOPRINTER[PROMPT]|TOSCREEN]:如果命令中包含了TO子句,但没有包括INTO子句,则查询结果定向输出到名为FileName的ASCII码文件、打印机或主窗口。包含ADDITIVE子句使查询结果追加到所指定的文本文件的内容后面。第11页,共91页,2024年2月25日,星期天5.2.1简单查询简单查询基于单个表,由select-from构成无条件查询,select-from-where构成条件查询无条件查询:select-from构成1.查询表中部分字段例5.1查询student表中学生的学号和姓名select学号,姓名fromstudent例5.2

查询department表中所有的系名Select

系名fromdepartment第12页,共91页,2024年2月25日,星期天5.2.1简单查询2.使用distinct短语例5.3

列出学生表中的班级名称(无重复行)select

distinct

班级fromstudent3.查询表中全部字段例5.4

查询学生表中全部字段select

*

fromstudent例5.5

查询course表中的所有元组Select

*fromcourseDistinct:去掉查询结果中的重复值“*”是通配符,表示所有字段第13页,共91页,2024年2月25日,星期天5.2.1简单查询条件查询:select-from-where结构4.简单的条件查询例5.6

查询1992年9月1日以后出生的学生名单Select姓名

fromstudentwhere出生日期>ctod(“09/01/92”)例5.7

列出选修课的课程名称和课程号Select课程名,课程号fromcoursewhere

课程性质=“选修”例5.8查询课程号是0600101,成绩大于80分的学生学号及成绩,且将成绩由高到低列出Select学号,成绩

fromgradewhere

课程号=“0600101”and成绩>80orderby

成绩desc第14页,共91页,2024年2月25日,星期天5.2.1简单查询4.简单的条件查询例5.9

查询teacher表中工资多于2200元的职工所在的系号Selectdistinct系号fromteacherwhere

工资>2200例5.10

给出在系号“01”或“02”工作并且工资少于3000元的教师编号select教师编号fromteacherwhere工资<3000and(系号="01"OR系号="02")多个查询条件可以用AND、OR或者NOT连接第15页,共91页,2024年2月25日,星期天5.2.2简单连接查询连接是关系的基本操作之一,连接查询是一种基于多个关系(表)的查询。对于连接查询,检索项来自不同的关系,在FROM短语后多个数据表的名称之间用逗号隔开,在WHERE短语中必须指定数据表之间进行的连接条件。第16页,共91页,2024年2月25日,星期天5.2.2简单连接查询1.等值连接对于等值连接,连接条件通常是两个数据表的公共字段的值相等。例5.11找出工资多于2200元的教师编号和他们所在的系名。

select

教师编号,系名from

teacher,department;

where(工资>2200)and(teacher.系号=department.系号)例5.12找出成绩大于90分的学生的学号、姓名及成绩。selectstudent.学号,姓名,成绩

from

student,gradewhere

成绩>90and

student.学号=grade.学号或者selects.学号,姓名,成绩

from

students,gradegwhere

成绩>90and

s.学号=g.学号在连接查询中引用两个表的公共字段时,须在公共字段名前添加表名或表别名作为前缀,否则系统会提

示出错。对于只在一个数据表中出现的字段,则无须指定前缀。在select查询的from子句中,可以对数据表指定别名,格式为<关系名>.<别名>,指定别名后,在引用该数据表的字段时,应以别名作为数据表的前缀。第17页,共91页,2024年2月25日,星期天5.2.2简单连接查询1.等值连接例5.13

查询上官小梅所学课程的课程名及其对应的成绩select姓名,课程名,成绩fromstudents,coursec,gradeg

where姓名="上官小梅"and

s.学号=g.学号

andg.课程号=c.课程号对于3个表的连接查询,使用where子句指定查询条件时,其形式为:

from<数据表1>,<数据表2>,<数据表3>where<连接条件1>and<连接条件2>第18页,共91页,2024年2月25日,星期天5.2.2简单连接查询2.自连接查询:同一关系与自身进行连接例5.14找出至少选修0200101号课和0600201号课学生的学号selectx.学号fromgradex,gradeywherex.学号=y.学号

andx.课程号="0200101"andy.课程号="0600201"第19页,共91页,2024年2月25日,星期天5.2.3嵌套查询在一个select命令的where子句中,如果还出现了另一个select命令,则这种查询称为嵌套查询。Vfp只支持单层嵌套查询。嵌套查询所要求的结果出自一个关系,但相关的条件却涉及多个关系:一般外层查询的条件依赖内层查询的结果,而内层查询与外层查询无关。第20页,共91页,2024年2月25日,星期天5.2.3嵌套查询例5.15查询哪些系至少有一个教师的工资为2200元。select系名fromdepartmentwhere系号

in

(select

系号

fromteacherwhere

工资=2200)例5.16

查询所有教师的工资都多于2200元的系的信息。select*fromdepartmentwhere

系号notin(select

系号fromteacherwhere

工资<=2200)and系号in(select系号

from

teacher)第21页,共91页,2024年2月25日,星期天5.2.3嵌套查询例5.17

查询还没有被学生选修课程的课程号和课程名select课程号,课程名fromcoursewhere课程号notin

(select

课程号

fromgrade)例5.18

查询选修“管理学”的所有学生的学号及成绩Select学号,成绩

fromgradewhere

课程号=(selectdistinct课程号fromcoursewhere课程名="管理学")第22页,共91页,2024年2月25日,星期天5.2.3嵌套查询例5.19

查询同时选修了课程号为0200101和0600201两门课程的学生姓名select

姓名

fromstudentwhere

学号in(selectg1.学号

fromgradeg1,gradeg2whereg1.学号=g2.学号andg1.课程号="0200101"andg2.课程号="0600201")第23页,共91页,2024年2月25日,星期天5.2.4特殊运算符特殊运算符:between…and,in,like,not,!=1.确定范围的查询:between…and例5.20

查询成绩在80分到90分之间的学生得分情况select*fromgradewhere成绩between80and90或select*fromgradewhere成绩>=80and成绩<=90例5.21查询工资不在2200元到2500元范围内的教师信息。select*fromteacherwhere工资notbetween2200and2500注意in和between的区别第24页,共91页,2024年2月25日,星期天5.2.4特殊运算符2.In例5.22

列出课程号是0200101和课程号是0600201的全体学生的学号、课程号和成绩.select

学号,课程号,成绩fromgradewhere

课程号in

("0200101","0600201")或select

学号,课程号,成绩fromgradewhere

课程号=

"0200101"or

课程号="0600201"In运算符后面接一个集合,集合中的元素可以是数值、字符、日期和逻辑表达式等。第25页,共91页,2024年2月25日,星期天5.2.4特殊运算符3.!=和NOT例5.23

查询不在市场营销11-1班学生的信息。select*fromstudentwhere

班级

!="市场营销11-1"或select*fromstudentwhere

not班级

="市场营销11-1“例5.24

查询成绩不在80分到90分之间的学生得分情况select*fromgradewhere成绩

notbetween

80and90第26页,共91页,2024年2月25日,星期天5.2.4特殊运算符4.模糊查询like例5.25

在student表中,查询2011级学生的基本情况select*fromstudentwhere

学号

like"2011%"

例5.26

在student表中,查询所有姓“王”的学生名单select

姓名fromstudentwhere

姓名like"王%"注意like的使用及%与_的区别第27页,共91页,2024年2月25日,星期天5.2.5空值查询例5.27

查询teacher表中出生日期还没有确定的教师信息。select*fromteacherwhere

出生日期isnull例5.28

查询teacher表中已经确定了出生日期的教师信息。select*fromteacherwhere

出生日期isnotnull空值怎么查?Isnull空值查询时要用isnull,而不是“=null”,因为空值不是一个确定的值,所以不能用“=”这样的运算符进行比较第28页,共91页,2024年2月25日,星期天5.2.6简单的计算查询(库函数查询)用于计算检索的库函数有:count()、sum()、avg()、max()、min()例5.29

统计student表中班级的个数selectcount(distinct班级)as

班级个数fromstudent例5.30

统计student表中男生人数selectcount(*)fromstudentwhere

性别=“男"例5.31查询1992年1月1日后出生的学生人数selectcount(*)fromstudentwhere出生日期>{^1992-01-01}As的作用是在查询结果中将指定列命名为一个新的名称Count(*)是count()函数的一种特殊形式,用来统计查询结果的记录个数第29页,共91页,2024年2月25日,星期天5.2.6简单的计算查询(库函数查询)例5.32

查询grade表中成绩的最高分、最低分及平均分。selectmax(成绩)as最高分,min(成绩)as最低分,avg(成绩)as平均分fromgrade例5.33

查询grade表中所有选修课的成绩总和selectsum(成绩)fromgradewhere课程号

in(select课程号fromcoursewhere课程性质="选修")第30页,共91页,2024年2月25日,星期天5.2.7分组与计算查询GRONPBy短语:

将查询结果按某一列(或多个列)的值进行分组;HAVING子句:

HAVING子句,只与GROUPBy配合使用,用于说明分组条件;第31页,共91页,2024年2月25日,星期天5.2.7分组与计算查询例5.34

查询男女生人数Select性别,count(*)fromstudentgroupby

性别或Select性别,count(性别)fromstudentgroupby

性别例5.35

求每个系的教师的平均工资select系号,avg(工资)fromteachergroupby系号例5.36

求至少有两名教师的每个系的平均工资select系号,count(*),avg(工资)fromteachergroupby

系号havingcount(*)>=2Count(*)为每一组的记录个数第32页,共91页,2024年2月25日,星期天5.2.7分组与计算查询例5.37

列出各门课的平均成绩、最高成绩、最低成绩和选课人数select课程号,AVG(成绩)AS平均成绩,MAX(成绩)AS最高分,MIN(成绩)AS最低分,COUNT(学号)AS选课人数fromgradegroupby课程号例5.38

列出最少选修二门课程的学生姓名select姓名fromstudentwhere学号in(select学号fromgradegroupby学号

havingcount(*)>=2)第33页,共91页,2024年2月25日,星期天5.2.7分组与计算查询例5.39

求出总分大于180的学生的学号,姓名及总成绩selects.学号,姓名,sum(成绩)as总成绩fromstudents,gradegwheres.学号=g.学号groupbyg.学号havingsum(成绩)>180第34页,共91页,2024年2月25日,星期天5.2.8排序ORDERBy<排序项>[ASC|DESC]:指定将查询结果按哪个字段排序,ASC为升序,DESC为降序;例5.40

对学生表按姓名排序

Select*fromstudentorderby

姓名例5.41

对teacher表按工资升序检索出全部教师的信息。

select*fromteacher

orderby工资例5.42

先按系号排序,再按工资降序排序输出全部教师信息select*fromteacherorderby

系号,工资desc第35页,共91页,2024年2月25日,星期天5.2.8排序显示前几项记录:有时只需要查找满足条件的前几个记录,这时可使用top短语格式:TOPnExpr[PERCENT]说明:

nExpr为数字表达式,当不使用PERCENT时,nExpr为1至32767间的整数,说明显示前几个记录;当使用PERCENT时,nExpr是0.01至99.99间的实数,说明显示结果中前百分之几的记录。第36页,共91页,2024年2月25日,星期天5.2.8排序例5.43

显示teacher表工资最高的3位教师的信息select*top3fromteacherorderby

工资desc例5.44

显示teacher表工资最低的那20%教师的信息select*top20percentfromteacherorderby

工资例5.45

在grade表中查询成绩最高的5位学生的得分情况。select*top5fromgradeorderby成绩

desc例5.46

在grade表中查询成绩最低的30%学生的得分情况select*top30percentfromgradeorderby

成绩top短语必须和orderby短语配合起来使用才有效,它不能单独使用第37页,共91页,2024年2月25日,星期天5.2.9超连接查询用where指定的连接条件一般都是等值连接,即只有满足连接条件的记录才会出现在查询结果中。在SQL标准中还支持表的超连接,使用下面的命令:

Select…… FromTable1[[Inner|Left|Right|FullJoinTable2 On<连接条件> Where……其中,inner代表内连接,即普通连接;Left、Right、Full分别代表左连接、右连接和全连接,Left、Right、Full三种连接方式也称为外连接。第38页,共91页,2024年2月25日,星期天5.2.9超连接查询INNERJOIN(JOIN),普通连接:只有满足连接条件的记录才出现在查询结果中。LIFTJOIN,左连接:在进行连接运算时,首先将满足连接条件的所有元组放在结果关系中,同时将第一个表(或称Join左边的表)中不满足连接条件的元组也放入结果关系中,这些元组对应第二个表(或称Join右边的表)的属性值为空值。第39页,共91页,2024年2月25日,星期天5.2.9超连接查询RIGHTJOIN,右连接:在进行连接运算时,首先将满足连接条件的所有元组放在结果关系中,同时将第二个表(或称Join右边的表)中不满足连接条件的元组也放入结果关系中,这些元组对应第一个表(或称Join左边的表)的属性值为空值。

FULLJOIN,全连接:在进行连接运算时,首先将满足连接条件的所有元组放在结果关系中,同时将两个表中不满足连接条件的元组也放入结果关系中,这些元组对应另一个表的属性值为空值。第40页,共91页,2024年2月25日,星期天5.2.9超连接查询例5.47

普通连接(将teacher表和department表的部分字段通过公共的字段“系号”进行连接)selectd.系号,系名,教师编号,教师姓名fromDepartmentd,teachertwhered.系号=t.系号等价于selectd.系号,系名,教师编号,教师姓名fromDepartmentdjointeachertond.系号=t.系号等价于selectd.系号,系名,教师编号,教师姓名fromDepartmentdinnerjointeachertond.系号=t.系号第41页,共91页,2024年2月25日,星期天5.2.9超连接查询例5.48左连接selectd.系号,系名,教师编号,教师姓名fromDepartmentdLeftjointeachertond.系号=t.系号例5.49

右连接假设teacher表插入一条记录“2006108”,“07”,“刘丽”,{^1972-06-24},“副教授”,2500.00selectd.系号,系名,教师编号,教师姓名fromDepartmentdRightjointeachertond.系号=t.系号第42页,共91页,2024年2月25日,星期天5.2.9超连接查询例5.50全连接selectd.系号,系名,教师编号,教师姓名fromDepartmentdFulljointeachertond.系号=t.系号Join连接格式在连接多个表时的书写方法要特别注意,在这种格式中join和on的顺序很重要,特别要注意join的顺序与on的顺序正好相反第43页,共91页,2024年2月25日,星期天5.2.10使用量词和谓词的查询格式1:<表达式><比较运算符>[ANY︱ALL︱SOME](子查询)量词:ANY、ALL、SOME,其中ANY与SOME为同义词,在进行比较运算时只要子查询中有一行能使结果为真,则结果就为真;而ALL则要求子查询中的所有行都使结果为真时,结果才为真。格式2:[NOT]︱EXISTS(子查询)谓词:EXISTS,EXISTS或NOTEXISTS是用来检查在子查询中是否有结果返回(即存在元组或不存在元组)第44页,共91页,2024年2月25日,星期天5.2.10使用量词和谓词的查询例5.51检索那些系中还没有教师的系的信息。select*fromdepartmentwherenotexists(select*fromteacherwhere系号=department.系号)等价于select*fromdepartmentwhere系号notin(select系号fromteacher)例5.52

检索那些系中至少已经有一个教师的系的信息。

select*fromdepartmentwhereexists(select*fromteacherWhere系号=department.系号)等价于select*fromdepartmentwhere系号in(select系号fromteacher)第45页,共91页,2024年2月25日,星期天5.2.10使用量词和谓词的查询例5.53查询还没有被学生选修课程的课程号和课程名Select

课程号,课程名

fromcoursewhere

not

exist(select*fromgradewherecourse.课程号=grade.课程号)注意:[NOT]EXISTS只是判断子查询中是否有或没有结果返回,它本身并没有任何运算或比较。第46页,共91页,2024年2月25日,星期天5.2.10使用量词和谓词的查询例5.54求必修课程号是0200101的学生中成绩比必修课号是0600201课的最低成绩要高的学生的学号与成绩select学号,成绩fromgradewhere课程号="0200101"and成绩>any(select

成绩fromgradewhere

课程号="0600201")等价于select学号,成绩fromgradewhere课程号="0200101"and成绩>(select

min(成绩)

fromgradewhere

课程号="0600201")第47页,共91页,2024年2月25日,星期天5.2.10使用量词和谓词的查询例5.55求必修课程号是0200101的学生中成绩比必修课号是0600201课的最高成绩要高的学生的学号与成绩select学号,成绩fromgradewhere课程号="0200101"and成绩>all(select

成绩fromgradewhere

课程号="0600201")等价于select学号,成绩fromgradewhere课程号="0200101"and成绩>(select

max(成绩)

fromgradewhere

课程号="0600201")第48页,共91页,2024年2月25日,星期天5.2.11集合的并运算SQL支持集合的并(UNION)运算,即可以将两个SELECT语句的查询结果通过并运算合并成一个查询结果。为了进行并运算,要求两个查询结果具有相同的字段个数,并且对应字段的值要出自同一个值域。格式:<SELECT…>UNION[ALL]<SELECT…>说明将两个查询结果合并在一起输出;若无ALL,重复记录将被自动取消,若有ALL表示结果全部合并;第49页,共91页,2024年2月25日,星期天5.2.11集合的并运算例5.56

以下结果为系名为自动化系和经济系的教师信息select*fromteacherwhere系号=(select系号fromdepartmentwhere系名="自动化系")union;select*fromteacherwhere系号=(select系号fromdepartmentwhere系名="经济系")

第50页,共91页,2024年2月25日,星期天5.2.11集合的并运算例5.57以下结果为“选修课”和“必修课”的课程相关信息。select课程名,课程号fromcoursewhere课程性质="选修“Unionselect课程名,课程号fromcoursewhere课程性质=“必修“第51页,共91页,2024年2月25日,星期天5.2.12查询结果的输出查询结果的输出去向⑴

IntoArray<数组名>⑵IntoCursor<临时表名>⑶IntoDbf|Table<表名>⑷ToFile<文本文件名>⑸ToPrinter[prompt]Intocursor<临时表文件名>产生的临时表文件是只读的.dbf文件,当查询结束后该临时文件是当前文件,可像一般的.dbf文件使用,当该临时文件被关闭后,文件将自动被删除。执行完intotable<表文件名>后,系统将在默认路径下建立数据表文件,同时打开该文件,并将其设为当前数据表。与临时表文件不同,该表文件存放在磁盘上,关闭后不会被自动删除。Tofile<文件名>[additive]可将查询结果保存到一个文本文件,文本文件的默认扩展名是.txt,若使用additive可将查询结果追加到原文本文件的尾部,否则将覆盖原有文件。第52页,共91页,2024年2月25日,星期天5.2.12查询结果的输出1.将查询结果存放在数组例5.58将查询到的选修课的课程号和课程名存放在数组xx中。select课程号,课程名fromcoursewhere课程性质=“选修”intoarrayxx?xx(1,1),xx(1,2)?xx(2,1),xx(2,2)第53页,共91页,2024年2月25日,星期天5.2.12查询结果的输出2.将查询结果存放到临时表文件例5.59

将查询到的选修课的课程号和课程名存放在临时.dbf表文件xx中。

select课程号,课程名fromcoursewhere课程性质="选修“intocursorxx3.将查询结果存放到永久表文件例5.60

将查询到选修课的课程号和课程名存放在永久表文件yy中select课程号,课程名fromcoursewhere课程性质=“选修“intotableyy第54页,共91页,2024年2月25日,星期天5.2.12查询结果的输出4.将查询结果存放到文本文件若命令中包含了to子句,但没有包含into子句,则to子句起作用。例5.61将查询到的选修课的课程号和课程名存放在文本文件xx中。select课程号,课程名fromcoursewhere课程性质="选修"

tofilexx5.将查询结果直接输出到打印机使用子句toprinter[prompt]可以直接将查询结果输出到打印机,若使用了prompt选项,则在打印之前还会打开打印机设置对话框。第55页,共91页,2024年2月25日,星期天5.3数据操作SQL的数据操作功能是指对数据库中的数据进行操作的功能,主要包括数据的插入、数据的更新和数据的删除,对应的SQL命令动词分别是INSERT、UPDATE和DELETE。第56页,共91页,2024年2月25日,星期天5.3.1.插入数据格式1:INSERTINTO<表名>(<字段名1>[,<字段名2>]····)VALUES(<表达式1>[,<表达式2>]‥‥)功能:向指定的数据表尾部插入一条记录,并用指定的表达式对字段赋值。说明:当对新记录的所有字段都赋值时,可省略字段名。若只对某些字段赋值,即插入的不是完整的记录时,则需要指定要赋值的字段名称。VALUES子句中各个表达式的值为赋给每个字段的值,表达式和对应字段的数据类型、取值范围必须一致。第57页,共91页,2024年2月25日,星期天5.3.1.插入数据例5.62

在course表中插入记录。Insertintocoursevalues(“0600010”,””,48,3,”选修”)&&

在course表中插入记录,课程号为“0600010”,课程名为空,学时为48,学分为3,课程性质为“选修”Insertintocourse(课程号,课程名)values(“0600020”,”信息资源管理“)&&

在course表中插入记录,课程号为“0600020”,课程名为”信息资源管理“第58页,共91页,2024年2月25日,星期天5.3.1.插入数据格式2:InsertInto<表名>FromArray<数组名>|MEMVAR功能:向指定的数据表插入一条新记录,插入新记录的字段值来自于数组元素或内存变量。例5.63输入以下命令并查看输出结果。dimensionb(4)b(1)=“2012052101"b(2)="张珊"b(3)="女"b(4)=.null.insertintostudentfromarrayb第59页,共91页,2024年2月25日,星期天5.3.1.插入数据例5.64输入以下命令并查看输出结果。学号=“2012052102“姓名="黎明“性别="男“出生日期={^1986-09-10}insertintostudentfrommemvar第60页,共91页,2024年2月25日,星期天5.3.2.更新数据格式:UPDATE<表名>SET<字段名>=<表达式>[WHERE<条件>]功能:对于指定表中满足条件的记录,用指定的表达式的值来更新指定的字段。注意:update-sql只能在单一的表中更新记录。第61页,共91页,2024年2月25日,星期天5.3.2.更新数据例5.65

将course表中所有选修课的学时增加5个学时。Updatecourseset

学时=学时+5where

课程性质=”选修“第62页,共91页,2024年2月25日,星期天5.3.3删除数据格式:DELETEFROM<表名>WHERE<条件>功能:对于指定数据表中满足条件的记录进行逻辑删除。说明:where<条件>用来指定删除的条件,若不使用where子句,则逻辑删除表中的全部记录。第63页,共91页,2024年2月25日,星期天5.3.3删除数据例5.66逻辑删除course表中课程性质为选修的记录。Deletefromcoursewhere

课程性质=“选修”第64页,共91页,2024年2月25日,星期天5.4数据定义SQL的数据定义功能主要包括数据库、表、视图、存储过程、规则和索引等对象的定义。本节主要介绍使用CREATETABLE命令建立数据表结构,使用ALTERTABLE命令修改数据表结构以及使用DROPTABLE命令删除数据表。第65页,共91页,2024年2月25日,星期天5.4.1表的定义SQL语言提供的定义表的命令是CreateTable。在使用这个命令之前,首先要设计好表结构的各种细节,包括:①表名;②各列(字段)的名称、数据类型、宽度;③哪(几)列将组成表的主键;④表中的哪些列必须提供数据;第66页,共91页,2024年2月25日,星期天5.4.1表的定义

创建表的语句格式如下:

CreateTable|Dbf<表名>[Name<长表名>][Free] (<字段名1><字段类型>[(字段宽度[,<小数位数>])] [Null|NotNull] [Check<字段有效性规则>[Error<出错信息1>]] [Default<默认值>] [PrimaryKey|Unique] [References<数据表1>[Tag<索引标志>]] [,<字段名2>...]

第67页,共91页,2024年2月25日,星期天5.4.1表的定义

[,PrimaryKey<索引表达式1>Tag<索引名1>], [,Unique<索引表达式2>Tag<索引名2>] [,ForeignKey<索引表达式3>Tag<索引名3>[Nodup]References<数据表2>[Tag<索引名4>]] [,Check<记录有效性规则>[Error<出错信息2>]])

功能:创建一个由指定字段组成的数据表。第68页,共91页,2024年2月25日,星期天5.4.1表的定义

关于CreateTable命令说明如下:用CREATETable命令可以完成表设计器所能完成的所有功能。命令关键字CreateTable与CreateDBF功能相同。Name<长表名>:为所创建的表定义长表名,只有当前有打开的数据库时,才能使用此选项。Free:创建为自由表。第69页,共91页,2024年2月25日,星期天5.4.1表的定义<字段名1><字段类型>[(字段宽度[,<小数位数>])]

:4个选项依次分别定义字段名、字段类型,数值型和字符型字段的宽度,数值型字段的小数位宽度。Null|NotNull:定义本字段是否可以为空。[Check<字段有效性规则>[Error<出错信息1>]]:定义本字段的有效性规则和出错时的提示信息字符串。[Default<默认值>]:定义字段的默认值。第70页,共91页,2024年2月25日,星期天5.4.1表的定义PrimaryKey|Unique:将本字段创建为主索引字段。或将本字段创建为侯选索引字段。References<数据表1>[Tag<索引标志>]:说明本表与之建立永久联系的父表及父表的索引名。ForeignKey:创建一个外部索引(非主索引),并与一个父表建立关联。PrimaryKey<索引表达式1>Tag<索引名1>:以<索引表达式1>作为索引表达式建立主索引,索引名为<索引名1>第71页,共91页,2024年2月25日,星期天5.4.1表的定义[,Unique<索引表达式2>Tag<索引名2>]:以<索引表达式2>作为索引表达式建立候选索引,索引名为<索引名2>[,ForeignKey<索引表达式3>Tag<索引名3>[Nodup]References<数据表2>[Tag<索引名4>]]:以<索引表达式3>作为索引表达式建立外(普通)索引,索引名为<索引名3>,同时以该字段作为连接字段,通过引用<数据表2>的<索引标识4>建立两数据表之间的永久性关联。[,Check<记录有效性规则>[Error<出错信息2>]]):定义表记录的有效性规则和出错信息。第72页,共91页,2024年2月25日,星期天5.4.1表的定义例5.67:建立一个自由表KZScreatetablekzsfree(学号c(6),姓名;c(8),性别c(2),年龄n(3)null,入学年月d)第73页,共91页,2024年2月25日,星期天5.4.1表的定义例5.68

建立教学管理数据库,再用SQL命令建立学生表、课程表、成绩表。createdatabasekkkcreatetable学生(学号c(8)primarykey,姓名c(8)notnull,性别c(2),年龄n(3)check年龄>16and年龄<25error“年龄范围在16-25,请输入正确的年龄”,是否团员l,入学年月ddefaultctod(“09/06/2002”),备注m)createtable课程(课号c(4)primarykey,课程名c(12)notnull,学分n(2))第74页,共91页,2024年2月25日,星期天5.4.1表的定义createtable成绩(学号c(8)references学生2,课号c(4),成绩n(5,2),primarykey学号+课号tag学号课号,foreignkey课号tag课号references课程2tag课号)第75页,共91页,2024年2月25日,星期天5.4.1表的定义例5.69

创建订货管理数据库,并用SQL命令建立仓库表、职工表、供应商表及订购单表。createdatabase

订货管理createtable仓库(仓库号C(5)primarykey,城市c(10),面积icheck(面积>0)error"面积应该大于0")第76页,共91页,2024年2月25日,星期天5.4.1表的定义createtable职工(仓库号C(5),职工号c(5)primarykey,工资icheck(工资>=1000and工资<=5000)error“工资值的范围在1000-5000!“default1200,foreignkey仓库号tag仓库号references仓库1)createtable供应商(供应商号c(5)primarykey,供应商名c(20),地址c(20))第77页,共91页,2024年2月25日,星期天5.4.1表的定义createtable订购单(职工号c(5),供应商号c(5),订购单号c(5)primarykey,订购日期d,foreignkey职工号tag职工号references职工1,foreignkey供应商号tag供应商号references供应商1)第78页,共91页,2024年2月25日,星期天5.4.2表结构的修改AlterTable命令用于修改表结构,可以增添字段、删除字段、改变字段的定义、增添或删除约束等。第79页,共91页,2024年2月25日,星期天5.4.2表结构的修改AlterTable命令有3种格式。格式1:

AlterTable<表名> Add|Alter[Column]<字段名1><字段类型>[(字段宽度[,<小数位数>])]

[Null|NotNull] [Check<字段有效性规则>[Error<出错信息>]] [Default<默认值>] [PrimaryKey|Unique] [References<表名1>[Tag<索引名>]]第80页,共91页,2024年2月25日,星期天5.4.2表结构的修改功能:这种格式用来添加字段或修改字段的参数。可以修改字段的类型、宽度、有效性规则等,但不能修改字段名,不能删除字段及已定义的字段有效性规则。不管是否修改字段类型,必须将字段名和类型一同在命令中列出。第81页,共91页,2024年2月25日,星期天5.4.2表结构的修改例5.70

为课程表增加一个新的字段“学时”(数值型,宽度2)。Altertable

课程add学时n(2)check学时>0error“学时应该大于0"例5.71将课程表的“课程名”字段的宽度改为14Altertable

课程alter

课程名c(14)例5.72

为“订购单”表增加一个新字段“总金额”(货币类型)altertable

订购单add总金额ycheck总金额>0error“总金额应该大于0“例5.73

将订购单的“订购单号”字段的宽度改为6altertable订购单alter

订购单号c(6)第82页,共91页,2024年2月25日,星期天5.4.2表结构的修改格式2:ALTERTABLE<表名>ALTER[COLUMN]<字段名>[NULL|NOTNULL][SETCHECK<字段有效性规则>[ERROR<错误信息>]][SETDEFAULT<默认值>][DROPDEFAULT]

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论