网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > SQL语法 > 正文

第4章结构化查询语言

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

    第4章
    4.1.
    结构化查询语言
    SQL语言概述
    SQL是structuredquerylanguage的缩写,即结构化查询语言,它既可以用于大型数据库系统,也可以用于微型数据库系统,是关系数据库的标准语言。VF6数据库管理系统,除了具有VF6命令以外,还支持结构化查询语言(SQL)命令。
    4.1.1..
    SQL语言的特点
    SQL语言之所以成为数据库标准语言,因具有以下特点。1.综合统一.SQL语言集数据库定义语言(DDL)数据操纵语言、(DML,数据操纵包括数据查询)、数据控制语言(DCL)的功能于一体,可以独立完成数据库生命周期中的全部活动,包括定义数据库和表结构、录入数据及建立数据库、查询、更新、维护、数据库重构、数据库安全性控制等一系列操作的要求,这就为数据应用系统的开发提供了良好的环境。2.高度非过程化.用SQL语言进行数据操作时,用户只需要提出做什么,而不必指明怎么做。这不但大大减轻了用户的负担,而且还有利于提高数据独立性。3.面向集合的操作方式.SQL语言采用集合操作方式,不仅查找结果可以是记录的集合,而且操作对象的一次插入、删除、更新也可以是记录的集合。4.以同一种语法结构提供两种使用方式.以同一种语法结构提供两种使用方式SQL语言既是自含式语言,又是嵌入式语言。作为自含式语言,它能够独立地用于联机交互的使用方式,用户可以在键盘上直接输入SQL命令对数据库进行操作。作为嵌入式语言,SQL能够嵌入到高级语言(例如C、FORTRAN、PL/I)程序中,供程序员设计程序时使用。而在两种不同的使用方法下,SQL语言的语法结构基本上是一致的。这种以统一的语法结构提供两种不同的使用方法的做法,为用户提供了极大的灵活性与方便性。5.功能强大,语言简洁,易学易用.功能强大,语言简洁,SQL语言语法十分简单,总共只用了9个命令动词(见表4.1)但是能实现数据定义、,数据操作、数据控制等功能。
    表4.1SQL功能数据定义数据操作数据控制数据查询SQL的动词及功能划分命令动词CREATE,DROP,ALTERUPDATE,DELETE,INSERTGRANT,REVOTESELECT
    101
    4.1.2..
    数据定义语言
    数据定义语言由CREAT、DROP、ALTER命令组成。这3个命令关键字针对不同的数据库对象(如数据库、查询、视图等)分别有3个命令。例如针对表对象的3个命令是建表结构命令CREATTABLE、修改表结构命令ALTERTABLE、删除表命令DROPTABLE。数据库可操作多少个对象就有多少3个相应的命令。下面以定义表结构为例,讲解这3个命令。1.建立表结构命令CREATTABLE.命令的语法与功能详见3.2.5节。【例4.1】使用命令建立“研究生”自由表,其表结构及要求如表3.2所示。
    表4.2研究生表的结构及要求字段类型CCC字段长度782小数位数特殊要求字段类型ND字段长度3允许为空值小数位数特殊要求
    字段名性别
    字段名年龄入学年月
    定义该表的SQL命令如下
    CREATETABLEd:\教学管理\研究生FREE(C(7),C(8),性别C(2),;年龄N(3),入学年月DNULL)
    【例4.2】使用命令建立数据库XSK,然后在该库中建立student表,其表结构及要求如表4.3所示。
    表4.3字段类型CCCN字段长度7823大于10小于45小数位数student表的结构及要求字段类型LDD允许为空值禁止转换字段长度小数位数特殊要求
    字段名性别年龄
    特殊要求主索引不能不空值
    字段名是否党员入学年月备注
    定义该表的SQL命令如下
    CREATDATABASExskCREATTABLEstudent(C(7)PRIMAYKEY,C(8)NOTNULL,性别C(2),;年龄N(3)CHECK年龄>10AND年龄<45ERROR"年龄范围在10~45,请重输入!",;是否党员L,入学年月DDEFAULTCTOD("09/01/2001"),备注MNOCPTRANS)
    【例4.3】在XSK库中建立score表,其表结构及要求如表4.4所示。
    102
    表4.4字段类型CC字段长度75
    score表的结构及要求特殊要求外关键字,与student表建立关系外关键字,course表建立关系与(course表结构及建立参见第3章的“课程”表)
    字段名课号
    小数位数
    期末
    N
    5
    2
    定义该表的命令序列如下
    OPENDATABASExskCREATETABLEscore(c(7)REFERENCESstudent,课号c(5),期末N(5,2),;PRIMARYKEY+课号TAG课号,FOREIGNKEY课号TAG课号;REFERENCEScourseTAG课号注意:注意:要完成本题需在xsk数据库中添加student表和course课程表,同时学生表要以做主索引,课程表要以课号做主索引。Student表的表记录和course表可以从教学管理数据库中复制过来。
    2.修改表结构命令ALTERTABLE.1)语法格式1语法1:ALTERTABLE<表名1>ADD|ALTER[COLUMN]<字段名><字段类型>[(<宽度>[,<小数位数>])][NULL|NOTNULL][CHECK<expL>[ERROR<expC>]][DEEAULT<expr>][PRIMARYKEY|UNIQUE][REFERENCES<表名2>[TAG<标识名>]][NOCPTRANS][NOVALIDATE]功能:为指定的表的指定字段进行修改或添加指定的字段。【例4.4】为score表添加两个字段:“平时”字段N(5,1)和“期中”字段N(5,1)。
    ALTERTABLEscoreADD平时N(5,1)ALTERTABLEscoreADD期中N(5,1)
    【例4.5】在score表中,修改“期末”字段为N(5,1),并设置“平时”“期中”和、“期末”字段的值小于等于100。
    ALTERTABLEscoreALTER期末N(5,1)CHECK期末<=100ERROR"分数不能大于100!"ALTERTABLEscoreALTER期中N(5,1)CHECK期中<=100ERROR"分数不能大于100!"ALTERTABLEscoreALTER平时N(5,1)CHECK平时<=100ERROR"分数不能大于100!"
    2)语法格式2语法2:ALTERTABLE<表名>ALTER[COLUMN]<字段名>[NULL|NOTNULL][SETDEFAULT<expr>][SETCHECK<expL>[ERROR<expC>]]
    103
    [DROPDEFAULT][DROPCHECK]功能:修改指定的表中指定字段的DEFAULT、CHECK规则,但不影响原有表的数据。【例4.6】在score表中,删除对“期末”字段的合法值约束,并设置“平时”字段的默认值为80。
    ALTERTABLEscoreALTER期末DROPCHECKALTERTABLEscoreALTER平时DROPDEFAULT80
    3)语法格式3语法:ALTERTABLE<表名1>[DROP[COLUMN]<字段名>]&&从指定表删除指定的字段[SETCHECK<expL>[ERROR<expC>]]&&设置该字段的合法值和错误提示信息[DROPCHECK]&&删除该字段的合法值设置[ADDPRIMARYKEY<expr>TAG<索引标识>[FOR1<expL>]][DROPPRIMARYKEY]&&删除该表的主索引[ADDUNIQUE<expr>[TAG<索引标识>[FOR1<expL>]]][DROPUNIQUETAG<索引标识>]&&删除该表的候选索引[ADDFOREIGNKEY<expr>[TAG<索引标识>[FOR1<expL>]REFERENCES<表名2>[TAG<索引标识>]]&&设置该表的外部关键字[DROPFOREIGNKEYTAG<索引标识>[SAVE]]&&删除该表的外部关键字[RENAMECOLUMN<原字段名>TO<目标字段名>][NOVALIDATE]&&修改表结构时,允许违反该表的数据完整性规则。功能:删除指定表中的指定字段、修改字段名、修改指定表的完整性规则,包括主索引、外部关键字、候选索引及表的合法值限定的添加与删除。注意:修改自由表,不能使用DEFAULT、FOREIGHKEY、PRIMARYKEY、REFERENCES或SET子句。【例4.7】在student表中,删除“是否党员”字段,修改“备注”字段名为“其他情况”。
    ALTERTABLEstudentDROP是否党员RENAMECOLUMN备注TO其他情况
    如果在删除字段上建立了索引,要先将索引删除再删除该字段。【例4.8】在student表的“年龄”字段上建立候选索引。
    ALTERTABLEstudentADDUNIQUE年龄TAG年龄
    【例4.9】在student表中添加一个“出生日期”字段,删除“年龄”字段。
    ALTERTABLEstudentADD出生日期DALTERTABLEstudentDROPUNIQUETAG年龄DROP年龄
    3.删除表命令DROPTABLE.语法:DROPTABLE<表名>
    104
    【例4.10】删除已建立的course表
    DROPTABLEcourse
    4.1.3..
    数据操纵语言
    数据操纵语言是完成数据操作的命令,它由INSERT(插入)、DELETE(删除)UPDATE、(更新)和SELECT(查询)等命令组成。查询也划归为数据操纵范畴,但由于它比较特殊,所以又以查询语言单独出现。1.插入记录命令.插入记在数据库应用中,需要经常向表中插入数据,这主要是由INSERT命令实现的。1)语法格式1语法1:INSERTINTO<表名>[(<字段名1>[,<字段名2>[,…]])]VALUES(<表达式1>[,<表达式2>[,…]])功能:在指定的表尾添加一条新记录,其值为VALUES后面表达式的值。当需要插入表中所有字段的数据时,表名后面的字段名可以缺省,但插入数据的格式必需与表的结构完全吻合;若只需要插入表中某些字段的数据,就需要列出插入数据的字段名,当然相应表达式的数据位置应与之对应。【例4.11】向student表中添加记录
    INSERTINTOstudentVALUES("9902101","李明","男",{^1999/09/01},"三好生",CTOD("1981/03/24"))INSERTINTOstudent(,)VALUES("9902103","李成功")
    2)语法格式2语法2:INSERTINTO<表名>FROM<数组名>|FROMMEMVAR功能:在指定的表尾添加一条新记录,其值来自于数组或对应的同名内存变量【例4.12】先定义了数组AA(5),AA中各元素的值分别是AA(1)="9902001",AA(2)="张洋",AA(3)="女",AA(4)="1999/09/01",AA(5)="特长是长跑"。利用该数组向student表中添加记录。
    INSERTINTOstudentFROMAA
    完成以上操作后,student表中添加一条新记录,在新记录的值是指定的数组AA中各元素的数据。新记录的“入学年月”和“出生日期”字段为空。因为VF6要求,数组中各元素与表中各字段对应。如果数组中元素的数据类型与其对应的字段类型不一致,则新记录对应的字段为空值;如果表中字段个数大于数组元素的个数,则多出的字段为空值。【例4.13】已经定义了内存变量="9902002",="汪洋",性别="男",利用内存变量向student表中添加记录。
    INSERTINTOstudentFROMMEMVAR
    完成以上操作后,在student表中添加一条新记录,新记录的值除了“”“”、和“性别”字段外,其它字段均为空。因为VF6默认,添加的新记录的值与指定表中各字
    105
    段名同名的内存变量的值。如果同名的内存变量不存在,则相应的字段为空。9注意:在插入数据时,若指定的表没有在任何工作区中打开,在当前工作区中没有表被打开时,该命令执行后将在当前工作区打开该命令指定的表;若当前工作区打开的是其他表,则该命令执行后将在一个新的工作区中打开,添加记录后,仍保持原当前工作区。若指定的表在非当前工作区中打开,添加记录后,指定的表仍在原工作区中打开,且仍保持原当前工作区。2.删除记录命令.在VF6中,DELETE-SQL可以为指定的数据表中的记录加删除标记。语法:DELETEFROM[<数据库名>!]<表名>[WHERE][AND|OR]功能:从指定表中,根据指定的条件逻辑删除记录。【例4.14】将student表中所有男生的记录逻辑删除。
    DELETEFROMstudentWHERE性别="男"
    完成此命令后所有男生记录被逻辑删除,执行了PACK命令,逻辑删除的记录才会被物理删除。逻辑删除的记录可用RECALL命令恢复。3.更新记录命令.更新记更新记录就是对存储在表中的记录进行修改,命令是UPDATE-SQL,也可以对用SELECT-SQL语句选择出的记录进行数据更新。语法:UPDATE[<数据库名>!]<表名>SET<字段名1>=<expr1>[,<字段名2>=<expr2>…][WHERE<expL1>[AND|OR<expL2>…]功能:用指定的新值更新记录。【例4.15】将student表所有99级学生“入学年月”置为1999/09/10。
    UPDATEstudentSET入学年月={^1999/09/10}WHERELEFT(,2)="99"
    【例4.16】将所有男生的各科“平时”“期中”和“期末”成绩初始化为0。、UPDATEscoreSET平时=0,期中=0,期末=0;WHEREIN(SELECTFROMstudentWHERE性别="男")以上命令中,用到了WHERE条件关键字“IN”和对用SELECT-SQL语句选择出的记录进行数据更新。有关WHERE条件关键字和SELECT-SQL语句的使用,详见4.2节。注意:UPDATE-SQL一次只能在单一的表中更新记录。4.查询记录命令记录命令.查询记录语法:SELECT[ALL|DISTINCT][TOP<expN>[PERCENT]][<别名>.]<选项>[AS<列名>][,[<别名]<选项>[AS<列名>]…]FROM[FORCE][<数据库名?!>]<表名>[[AS]<本地别名>][[INNER|LEFT[OUTER]|RIGHT[OUTER]|FULL[OUTER]JOIN<数据库名>!]<表名>[[AS]<本地别名>][ON<连接条件>…][[INTO<目标>]|[TOFILE<文件名>[ADDITIVE]|TOPRINTER[PROMPT]|TOSCREEN]]
    106
    [PREFERENCE<参照名>][NOCONSOLE][PLAIN][NOWAIT][WHERE<连接条件1>[AND<连接条件2>…][AND|OR<过滤条件1>[AND]<过滤条件2>…]]][GROUPBY<分组列名1>[,<分组列名2>…]][HAVING<过滤条件>][UNION[ALL]SELECT命令][ORDERBY<排序项1>[ASC|DESC][,<排序项2>[ASC|DESC]…]]功能:查询这个命令的子句很多,理解了这条命令各项的含义,就能从数据库中查询出各种数据。SQL数据查询语言只有一条命令,即SELECT。与其说它是一条命令,倒不如说它是一个SELECT命令集合。它的选项极其丰富,同时查询条件和嵌套使用也是很复杂的。本章将重点介绍这条命令。
    4.1.4..
    数据控制语言
    数据控制语言(DCL)是用来控制用户对数据库的访问权限的。由GRANT(授权)、REVOTE(回收)命令组成。由于VF6没有权限管理,所以没有数据控制语言命令。这是VF6的优点也是缺点。说是优点,是因为没有这种权限管理,所以使用时既方便又简单。说是缺点,由于没有权限管理,所以安全性不高。数据库一旦建成,什么人都可以进行操作浏览。
    4.2.
    SELECT命令基本用法
    SELECT命令的基本结构是SELECT…FROM…WHERE,它的含义是输出字段…数据来源…查询条件。在这种固定模式中,可以不要WHERE,但是SELECT和FROM是必备的。
    4.2.1..
    基本查询
    所谓基本查询就是无条件查询,其格式如下所示。SELECT[ALL|DISTINCT][<别名>.]<选项>[AS<显示列名>][,[<别名>.]<选项>[AS<显示列名>…]FROM<表名1>[<别名1>],<表名2>[<别名2>…]其中:ALL表示输出所有记录,包括重复记录;DISTINCT表示输出无重复结果的记录;别名当选择多个数据库表中的字段时,可使用别名来区分不同的数据表;显示列名在输出结果中,如果不希望使用字段名,可以根据要求设置一个名称;选项目字段名、表达式或函数;表名要查询的表。SELECT命令类似于LISTFIELDS<字段名1>[,<字段名2>…]命令,它指出要输出的列,然后输出结果,但是SELECT命令的功能要强大得多。
    107
    【例4.17】列出学生名单。
    OPENDATABASEd:\教学管理\教学管理数据库SELECT*FROM学生&;&;打开数据库
    结果:性别出生日期专业入学成绩贷款否照片简历0103001王丽丽女03/23/83外贸626.5.T.GenMemo0103002王小刚女07/20/83外贸641.5.F.GenMemo0101019张红军男04/02/82中文450.0.F.GenMemo┆9901109马小莎女04/02/82/中文450.0.F.GenMemo命令中的*表示输出所有字段,数据来源是“学生.DBF”,表中所有内容以浏览方式显示(中间部分省略)。【例4.18】列出所有学生,去掉重名。
    SELECTDISTINCAS"学生名单"FROM学生
    结果:学生名单……邬军……显示的结果中,原表中如有重复,在这里只出现一次。SELECT命令中的选项,不仅可以是字段名,还可以是表达式,例如可以是一些函数,SELECT命令可操纵的函数很多,表4.5中列出了常用函数。
    表4.5SQL常用函数
    名称均值求和计数
    语
    法
    说
    明
    名称最小最大
    语
    法
    说
    明
    AVG(<字段名>)求一列数据的平均值SUM(<字段名>)给出一列数据的和COUNT(*)输出查询的行数
    MIN(<字段名>)给出列中的最小值MAX(<字段名>)给出列中的最大值
    【例4.19】将所有的学生入学成绩四舍五入,只显示、和入学成绩。
    SELECT,,ROUND(入学成绩,0)AS"入学成绩"FROM学生
    入学成绩0103001王小丽6270103002王小刚642┆从结果可以看出,所有的入学成绩都已经四舍五入。注意:这个结果不影响数据库表“学生”中的结果,只是在输出时通过函数计算输出。【例4.20】求出所有的学生入学成绩平均分。
    SELECTAVG(入学成绩)AS"入学成绩平均分"FROM学生108
    结果:
    结果:入学成绩平均分571.55由以上两例可见,人们可以直接利用VF6提供的各种函数,在输出时进行计算,便可得到相应的输出结果。
    4.2.2..
    带条件查询
    WHERE是条件语句关键字,是可选项,其格式如下所示。WHERE<条件表达式1>[AND│OR<条件表达式2>…]其中,条件表达式可以是单表的条件表达式,也可以是多表之间的条件表达式,表达式用的比较符为=(等于)、<>、!=(不等于)、==(精确等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)。注意:在写条件表达式时,有精确匹配和不精确匹配两种情况。一般情况下,=”“=表示要求精确匹配,“=”表示可以不精确匹配。但如果系统设置SETEXACTON则“=”也表示要求精确匹配。系统默认的是SETEXACTOFF条件表达式是子查询的结果集合应满足的条件,如果某行条件为真就包括该行记录。表4.6是条件表达式中关键的意义和使用方法。
    表4.6WHERE中条件关键字关键字ALL说明满足子查询中所有值的记录,例如,子查询的结果为{1,2,3,4},记录5中字段1的值等于5,则字段1大于集合中的所有值。如果字段1的值等于{2,3},则满足大条件用法:〈字段〉〈比较符〉ALL(〈子查询〉)ANY字段中的内容满足一个条件就为真用法:〈字段〉〈比较符〉ANY(〈子查询〉)BETWEEN〈字段〉的内容在指定范围内用法:〈字段〉BETWEEN〈范围始值〉AND(〈范围终值〉)EXISTS是否存在一个值满足子查询的条件用法:EXISTS(〈子查询〉)IN字段内容是结果集合或者子查询中的某一部分用法:〈字段〉IN〈结果集合〉或者〈字段〉IN(〈子查询〉)LIKE对字符型数据进行字符串比较,提供两种通配符,即下划“—”和“%”,匹配0个或多字符,类似于DOS中的“?”和“*”号用法:〈字段〉LIKE〈字符表达式〉SOME满足集合中的某一个值用法:〈字段〉〈比较符〉SOME(〈子查询〉)
    这种条件筛选的基本要领是:左边是一个字段,右边是一个集合,在集合中测定字段值(谓词演算)是否满足条件。NOT可以与这些谓词演算符号配合使用,得到一个反逻辑。1.计算字段.
    109
    【例4.21】求出计算机专业学生入学成绩平均分。
    SELECT专业,AVG(入学成绩)"入学成绩平均分"FROM学生WHERE专业="计算机"
    专业入学成绩平均分计算机642.832.排除后列出.【例4.22】列出非计算机专业的学生名单。
    SELECT,,专业FROM学生WHERE专业<>"计算机"
    结果:
    0103001王丽丽0103002王小刚0101019张红军9901009乌兰0108015高丽雅0008035达古拉9902010马小莎以上命令的功能等同于
    结果:
    专业外贸外贸中文中文数学数学英语
    SELECT,,专业FROM学生WHERE专业!="计算机"或SELECT,,专业FROM学生WHERENOT(专业="计算机")
    3.IN运算符.【例4.23】列出数学专业和外贸专业的学生名单。
    SELECT,,专业FROM学生WHERE专业IN("数学","外贸")
    0103001王小丽0103002王小刚0108015高丽雅0008035达古拉以上命令的功能等同于
    结果:
    专业外贸外贸数学数学
    SELECT,,专业FROM学生WHERE专业="数学"OR专业="外贸"
    4.BETWEEN运算符.【例4.24】列出入学成绩在560分到650分之间的学生名单。
    SELECT,,入学成绩FROM学生WHERE入学成绩BETWEEN560AND650
    结果:
    01030010103002010801500080359909010
    王丽丽王小刚高丽雅达古拉李天宁
    入学成绩626.5641.5587.5600.5622.5
    110
    以上命令的功能等同于
    SELECT,,专业FROM学生WHERE入学成绩>560AND入学成绩<650
    5.LIKE运算符.【例4.25】列出所有的姓王的学生名单。
    SELECT,FROM学生WHERELIKE"王%"
    结果:
    0103001王丽丽0103002王小刚在SETEXACTOFF时,以上命令的功能等同于
    SELECT,,专业FROM学生WHERE="王"
    6.ISNULL运算符.【例4.26】列出所有期末成绩为空值的学生和课号。
    SELECT,课号FROM成绩WHERE成绩ISNULL
    在以上命令中,使用了运算符ISNULL。该运算符是测试字段值是否为空值,在查询时用“字段名IS[NOT]NULL”的形式,而不能写成“字段名=NULL”或“字段名!=NULL”。
    4.2.3..
    嵌套查询
    有时候一个SELECT命令无法完成查询任务,需要一个子SELECT的结果作为条件语句的的条件。即需要在一个SELECT命令的WHERE子句中出现另一个SELECT命令,这种查询称为嵌套查询。通常把仅嵌入一层子查询的SELECT命令称为单层嵌套查询,把嵌入子查询多于一层的查询称为多层嵌套查询。VF6只支持单层嵌套查询。
    注意:子SELECT的查询结果必须是确定的内容。
    1.返回单值的子查询.【例4.27】列出选修电脑文秘应用课的所有学生的。】
    SELECTFROM成绩WHERE课号=;(SELECT课号FROM课程WHERE课名="电脑文秘应用")
    结果:01030010103002010101999010099902010上述SQL语句执行的是两个过程,首先在课程表中找出电脑文秘应用课的课号(比如“09001”,然后再在成绩表中找出课号等于“09001”的记录,列出这些记录的。)2.返回一组值的子查询.若某个子查询返回值不只一个,则必须指明在WHERE子句中应怎样使用这些返回值。通常使用条件关键字(即谓词)ANYALL和IN。
    111
    1)ANY谓词的用法【例4.28】列出选修“09001”课的学生中期末成绩比选修“09002”的最低期末成绩高的学生的和期末成绩。
    SELECT,期末AS期末成绩FROM成绩WHERE课号="09001"AND期末>ANY;(SELECT期末FROM成绩WHERE课号="09002"
    期末成绩010300190.0010300281.0010101976.0990100986.0990201063.0该查询必须做两件事:先找出“09002”课的所有学生的期末成绩(结果为何92和51),然后选出“09001”课期末成绩中高于“09002”课中任何一个期末成绩的那些学生。2)ALL谓词的用法【例4.29】列出选修“02002”课的学生,这些学生的期末成绩比选修“09002”课的最高期末成绩还要高的学生的和成绩。
    SELECT学生,期末AS期末成绩FROM成绩WHERE课号="02002"AND期末>ALL;(SELECT期末FROM成绩WHERE课号="09002")
    结果:
    期末成绩990201097.0该查询的含义是:先找出“09002”课的所有学生的成绩(结果为何92和51)然后再找“02002”课期末成绩中高于“09002”课中最高期末成绩的那些学生。3)IN谓词的用法【例4.30】列出文科类(即专业类别为“A”)学生的学生名单。
    SELECT,FROM学生WHERE专业IN;(SELECT专业名称FROM专业WHERE专业类别="A")
    结果:
    结果:0103001王丽丽0101019张红军9901009乌兰9902010马小莎该查询先从专业表中找出专业类别为“A”的专业名称,然后在学生表中查找专业属于A类专业集合的那些记录。IN是属于的意思,等价于“=ANY”,即等于子查询中任何一个值。
    4.2.4..
    多表查询
    在一个表中进行查询,一般说来是比较简单的,而在多表之间查询就比较复杂,必须
    112
    处理表和表间的连接关系。使用SELECT命令进行多表查询是很方便的。1.等值连接.等值连接是按对应字段的共同值将一个表中的记录与另一表中的记录相连接。【例4.31】输出所有学生的成绩单,要求给出、、课号、课名和总成绩。
    SELECTa.,a.,b.课号,c.课名,(b.平时+b.期中+b.期末)/3AS总成绩;FROM学生a,成绩b,课程c;WHEREa.=b.ANDb.课号=c.课号
    结果如图4.1所示。以上命令中,由于“”“课号”等字段名在两个表中出现,为防止二义性,在使、用时应在其字段名前加上表名以示区别(如果字段名是惟一的,可以不加表名),但表名一般输入时比较麻烦。所以在命令中,在FROM子名中给相关表定义了临时标记(即表别名),以利于在查询的其他部分中使用。【例4.32】列出99级学生的选课情况,要求列出、、课号、课名、授课教师和学分数。
    SELECTa.,a.AS学生,b.课号,c.课名,e.AS教师,c.学分;FROM学生a,成绩b,课程c,任课d,教师e;WHEREa.=b.ANDb.课号=c.课号ANDc.课号=d.课号;ANDd.教师代号=e.教师代号ANDLEFT(a.,2)="99"
    结果如图4.2所示。
    图4.1例4.31的命令结果示意图
    113
    图4.2例4.32的命令结果示意图
    【例4.33】请列出至少选修“09001”课和“09002”课的学生。
    SELECTa.FROM成绩a,成绩b;WHEREa.=b.ANDb.课号="09001"ANDa.课号="09002"
    结果:99010099902010从例4.33可以看出,连接不仅可以建立在不同的表之间,也可以建立在同一个表上,即将表与表自身连接,就像是两个表一样。2.非等值连接.【例4.34】列出选修“09001”课的学生中,期末成绩大于为“0101019”的同学该门课期末成绩的那些同学的及其期末成绩。
    SELECTa.,a.期末AS期末成绩FROM成绩a,成绩b;WHEREa.期末>b.期末ANDa.课号=b.课号ANDb.课号="09001"ANDb.="0101019"
    结果:期末成绩010300190.0010300281.0990100986.0在例4.34中,将成绩表看作a和b两张独立的表,b表中选出的是为“0101019”同学的“09001”课的期末成绩,表中选出的是选修a“09001”课学生的期末成绩,a.期末>b.期末反映的是不等值的连接。
    114
    4.2.5..
    连接查询
    VF6提供的SELECT命令,在FROM子句中提供一种称之为连接的子句。连接分为内部连接和外部连接。外部连接又分为左外连接、右外连接和全外连接。1.内部连接(InnerJoin).内部连接()实际上,上面例子全部都是内部连接。所谓内部连接是指包括符合条件的每个表格中的记录。也就是说是所有满足连接条件的记录都包含在查询结果中。【例4.35】列出01级学生的、课名及其期末成绩。
    SELECTa.,b.课名,a.期末AS期末成绩FROM成绩a,课程b;WHEREa.课号=b.课号ANDLEFT(a.,2)="01"
    结果:课名期末成绩0103001电脑文秘应用90.00108015计算机基础82.00108015英语(一)91.00103001英语(一)85.00103002电脑文秘应用81.00103002英语(一)96.00101019电脑文秘应用76.00101019英语(一)84.00109039计算机基础60.00109039英语(一)81.0如果采用内部连接方式,则命令如下
    SELECTa.,b.课名,a.期末AS期末成绩FROM成绩aINNERJOIN课程b;WHEREa.课号=b.课号ANDLEFT(a.,2)="01"
    所得到的结果完全相同。2.外部连接(OuterJoin).外部连接()所谓外部连接,是把两个表分为左右两个表。左外连接是指连接满足条件左侧表格的全部记录。右外连接是指连接满足条件右测表格的全部记录。全外连接是指连接满足条件的全部记录。1)左外连接也叫左连接(LeftOuterJoin),其系统执行过程是左表的某条记录与右表的所有记录依次比较字段值,若有满足连接条件的,则产生一个真实值记录;若都不满足,则产生一个含有NULL值的记录。接着,左表的下一记录与右表的所有记录依次比较字段值,重复上述过程,直到左表所有记录都比较完为止。2)右外连接也叫右连接(RightOuterJoin),其系统执行过程是右表的某条记录与左表的所有记录依次比较字段值,若有满足连接条件的,则产生一个真实值记录;若都不满足,则产生一个含有NULL值的记录。接着,右表的下一记录与左表的所有记录依次比较字段值,重复上述过程,直到右表所有记录都比较完为止。
    115
    3)全外连接也叫完全连接(FullJoin)其系统执行过程是先按右连接比较字段值并生成连接记录,,然后按左连接比较字段值并生成连接记录,重复记录不列入查询结果中。
    4.3.
    查询结果处理
    使用SELECT…FROM…命令完成查询工作,所查询的结果显示在屏幕上,其显示情况可通过NOCONSOLE、PLAIN、NOWAIT子句控制。·NOCONSOLE非控制台选项,如果选择该项,输出结果不在屏幕上显示;·PLAIN标题选项,如果加该关键字,表示输出结果在屏幕上没有标题;·NOWAIT不等待选项,如果加该关键字,表示输出结果时,屏幕满就卷动。一般情况下要用户按一键才卷动。有了INTO或TO关键字,上面3个选项被忽略。如果对这些查询结果进行处理,则需要SELECT的其他子句配合操作。
    4.3.1..
    有序输出
    SELECT的查询结果是按查询过程中的自然顺序给出的,因此查询结果通常无序,如果希望查询结果有序输出,需要下面的子句配合。ORDERBY<排序选项1>[ASC│DESC][,<排序选项2>[ASC│DESC]…]其中:排序选项可以是字段名,也可以是数字。字段名必须是主SELECT子句的选项,当然是FROM<表>中的字段。数字是表的列序号,第一列为1;ASC指定的排序项按增序排列;DESC指定的排序项按降序排列。【例4.36】按专业顺序列出学生的、、专业、课名及期末成绩,同一专业的再先按课程后按期末成绩由高到低排序。
    SELECTa.,a.,a.专业,c.课名,b.期末AS期末成绩FROM学生表a,成绩表b,课程表c;WHEREa.=b.ANDb.课号=c.课号ORDERBYa.专业,c.课名,b.期末DESC
    结果如图4.3所示。
    4.3.2..
    重定向输出
    INTO是可选项,表示查询结果可以重定方向,其格式如下所示。[INTO<目标>]|[TO管理FILE<文件名>[ADDITIVE]|TOPRINTER]其中TOFILE<文件名>[ADDITIVE]将结果输出到指定文本文件,ADDITIVE表示将结果添加到文件后面。在输出的文件中,系统可以自动处理重名的问题。如不同文件同字段名用文件名来区分,表达式用EXP-A,EXP-B等来自动命名,SELECT函数用函数名来辅助命名。
    116
    图4.3例4.36的命令结果示意图
    TOPRINTER将结果送打印机输出。<目标>为如下3部分内容。ARRAY<数组名>将查询结果存到指定数组名的内存变量数组中;CURSOR<临时表>将输出结果存到一个临时表(游标),这个表的操作与其他表一样,不同的是,一旦被关闭就被删除;DBF<表>|TABLE<表>将结果存到一个表,如果该表已经打开,则系统自动关闭它;如果SETSAFETYOFF,则重新打开它不提示。如果没有指定后缀,则默认为DBF在SELECT命令执行完后,该表为打开状态。【例4.37】将例4.36的命令结果保存到一个testl.txt文件中。
    SELECTa.,a.,c.课名,b.期末AS期末成绩FROM学生a,成绩b,课程c;WHEREa.=b.ANDb.课号=c.课号;ORDERBYa.专业,c.课名,b.期末DESCTOFILEtestl
    testl.txt文件中的内容参见图4.3。【例4.38】查询学生所学课程和期末成绩,输出、、课名和期末成绩,并放在游标中。
    SELECTa.,a.,b.课号,b.期末FROM学生表a,成绩表b;WHEREa.=b.INTOCURSORtestSELECTa.,a.,b.课名,a.期末AS期末成绩FROMtesta,课程表b;WHEREa.课号=b.课号INTOTABLEtestORDERBYa.117
    在该例中,第一个SELECT查询的结果在内存中产生一个游标,然后利用该游标中的记录,执行第二个SELECT查询,将结果存储到testTable表中,在计算机当前目录下得到一个testTable。DBF表。该例的CURSOR和INTOTABLE关键字,是查询输出的两个不同方向。
    4.3.3..
    合并输出
    合并输出(UNION)是指对两个查询结果进行集合合并操作,其子句格式如下:[UNION[ALL]<SELECT命令>]其中,ALL表示结果全部合并;若没有ALL,则重复的记录将被自动去掉。合并的规则如下:·不能合并子查询的结果;·两个SELECT命令必须输出同样的列数;·两个表各相应列的数据类型必须相同,数字和字符不能合并;·仅最后一个<SELECT命令>中可以用ORDERBY子句,且排序选项必须用数字说明。【例4.39】合并“学生”表和“成绩”表中的。
    SELECTFROM学生表UNIONSELECTFROM成绩表
    在“成绩”表中,尽管比较多,但大部分与“学生”表重复,合并后,重复的内容就自动去掉了,所以结果输出的最多与“学生”表中的个数一致。
    4.3.4..
    分组统计与筛选
    输出结果可以分组,其格式是:GROUPBY<分组选项1>[,<分组选项2>…]其中:<分组选项>可以是字段名、SQL函数表达式,也可以是列序号(最左边为1)。筛选条件格式是:HAVING<筛选条件表达式>HAVING子句与WHERE功能一样,只不过是与GROUPBY子句连用,不能用于子查询,即HAVING子句是用来指定列表输出的分组结果应满足的条件。【例4.40】统计各专业的学生人数。
    SELECT专业,COUNT(专业)FROM学生表GROUPBY专业
    结果:
    专业Cnt_专业计算机3数学2外贸2英语1中文3“Cnt_专业”字段名是系统自动起的,它记录了统计的结果。【例4.41】统计各专业的女学生数。
    118
    SELECT专业,COUNT(专业)AS女同学人数FROM学生表;WHERE性别="女"GROUPBY专业
    专业女同学人数计算机1数学1外贸2英语1中文1如果把以上命令写成如下形式,统计的结果就是错误的(统计结果中仅有“外贸2,英语1”,用户在使用时应注意。)
    SELECT专业,COUNT(专业)AS女同学人数FROM学生;GROUPBY专业HAVING性别="女"
    结果:
    4.4查询设计器.
    SELECT命令可以在命令窗口直接输入,也可以编写在程序中以完成相应查询任务。但编写SELECT语句不是件容易事。为了可视化设计SELECT命令,系统提供了“查询设计器”“查询设计器”实际上就是SELECT命令的交互式设计操作。在“查询设计器”中,。也可以修改已有的查询。
    4.4.1..
    查询设计器的应用
    1.查询设计器”的启动.查询设计器”“从“项目管理器”或“文件”菜单中,都可以启动“查询设计器”。在“项目管理器”中启动“查询设计器”的操作步骤是:1○在“项目管理器”中选择“数据”选项卡;2○选择“查询”,然后单击“新建”按钮,系统将打开“新建查询”对话框;3○单击“新建查询”按钮,系统启动“查询设计器”。在创建新查询时,VF6将打开“添加表或视图”对话框,提示是否从当前数据库或自由表中选择表或视图(有关视图的内容,详见9.1节),如图4.4所示。例如选择“学生”表,然后单击“添加”按钮。图8.4“添加表或视图”对话框选择了要查询的表或视图后,VF6将把选择的表或视图显示在“查询设计器”窗口的上方,如图4.5所示。
    119
    从图4.5中可以看出,系统一旦启动了“查询设计器”,则将在菜单中增加“查询”下拉式菜单。“查询”菜单实际上是SELECT命令的子句分类。另外,为了方便操作,系统提供了一个“查询设计器”工具栏,可以直接选择常用的功能进行操作。2.查询设计器”中的选项卡.查询设计器”“在查询设计器中,有如下6个选项卡。1)字段在“字段”选项卡设置SELECT命令中要输出的字段,双击“可用字段”列表框中的字段,相应的字段就自动移到右边的“选定字段”列表框中;如果选择全部字段,单击“全部添加”按钮。在“函数和表达式”编辑框中,输入或由“表达式生成器”生成一个计算字段,即在SELECT命令中要输出的计算列,如AVG(入学成绩)。2)连接如果要查询多个表,可以在“连接”选项卡中完成连接表达式。3)筛选在“筛选”选项卡中,操作的是WHERE子句的表达式。4)排序依据
    图4.5
    “查询设计器”窗口及“查询”菜单
    在“排列依据”选项卡中,操作的是ORDERBY子句的表达式。5)分组依据在“分组依据”选项卡中,操作的是GROUPBY子句的表达式。
    120
    6)杂项在“杂项”选项卡中设置其他参数。由此可见,查询设计器实际上是SELECT命令的图形界面。【例4.42】输出各专业中入学成绩在600分以上的男同学的、和专业、并按专业排序。
    1○打开“教学管理”的“项目管理器”窗口。2○选择“数据”→“查询”→“新建”菜单项,在“新建查询”对话框中单击“新建查询”按钮,此时出现“查询设计器”窗口和“添加表或视图”窗口。3○在“添加表或视图”窗口中,选定数据库“教学管理数据库”及其“学生”表后单击“添加”按钮,再单击“关闭”按钮,以关闭窗口,返回“查询设计器”窗口。4、○在窗口的下部分,选定“字段”选项卡后,在“可用字段”栏中选定“学生.”“学生.”和“学生.专业”,单击“添加”按钮,则这3个字段出现在“选定字段”栏中,结果如图4.6所示。5○选定“排序依据”选项卡,双击“学生.专业”字段,表示输出按专业排序,结果如图4.7所示。6○选定“筛选”选项卡,在“字段名”组合框中选择“学生.入学成绩”,在“条件”组合框中选择“>”,在“实例”文本框中输入“600”,结果如图4.8所示。7○保存查询选择“文件”→“另存为”菜单项,或者单击常用工具条上的“保存”按钮,“另存为”打开对话框,然后选定查询文件将要保存的位置“D:\教学管理\Myquery”,
    图4.6
    选择字段
    121
    图4.7
    排序设定
    输入查询文件的文件名“query8-43”,最后单击“保存”按钮,返回“查询设计器”的窗口,这时标题栏的内容已变为“查询设计器-query8-43”保存后查询文件的扩展名默认为QPR。
    图4.8
    筛选条件
    8○在“查询设计器”的空白区右击,然后在打开的查询快捷菜单中选择“运行查询”得到如,图4.9所示“查询”结果浏览窗口。9○关闭“查询”浏览窗口和“查询设计器”窗口。3.结论.从图4.8中可以看出:图4.9例4.43查询结果·在“筛选”选项中,“字段名”组合框中可以是字段名,也可以是变量,还可以是
    122
    表达式,在“字段名”的下拉组合框中可以进行选择,这部分是逻辑表达式的左半部分。“否”复选框是非逻辑,如果条件是“入学成绩”大于600,可以写成“学生.入学成绩<=600”,然后选择“否”复选框,“入学成绩”表示大于600。当然也可以写成“学生.入学成绩>600”。这是同一含义表达式的不同写法。·“逻辑”列表框,在该列表框中有三个选择,即“无”“AND”和“OR”、,这些逻辑操作符是用于书写两个以上的表达式时使用的。如本例中,第二个表达式是“性别=‘男’,与第一个逻辑表达式之间的关系是AND,所以可以选择AND,也可以选择“无””(“无”时,系统采用默认的逻辑关系,即“AND”,表示“入学成绩>600”),且“性别=‘男’。”上述操作的过程实际上是创建了一条SQL的SELECT语句。可以选择“查询”“查→看SQL”菜单项,得到如下结果。
    SELECT学生.,学生.,学生.专业FROM教学管理数据库!学生;WHERE学生.入学成绩>600AND学生.性别=′男′ORDERBY学生
    上述产生的SELECT语句是一个查询程序,可以保存在以qpr为扩展名的文件中。查询程序将保存在磁盘上,下次进行同样的查询时,可直接执行该程序。【例4.43】统计各专业的女学生数(即用“查询设计器”完成例4.41的功能)。①打开“查询设计器”窗口,并将“学生”表添加到该查询中。②在“字段”选项卡中,选定“学生.专业”为“选定字段”栏,并在“函数和表达式”编辑框中输入“COUNT(学生专.业)”后单击“添加”按钮,结果如图4.10所示。③在“筛选”选项卡中,设定筛选条件为“学生.性别=′女′”。④在“分组依据”选项卡中,选择“分组字段”为“学生.专业”,结果如图4.11所示。⑤保存该查询程序为query8-44.qpr,然后运行该查询,结果如图4.12所示。
    图4.10
    输出设置
    图4.11
    设置分组
    图4.12
    例4.44运行结果123
    在使用分组查询子句时应注意,分组查询实际上常用于统计分析。如本例统计各专业女同学人数就可以使用分组查询。输出分组查询时,分组字段只出现一次.在分组界面中,如果有条件分组,可单击“满足条件”按钮,设置Having条件.该查询程序的SQL语句如下所示。
    SELECT学生.专业,COUNT(学生.专业)FROM教学管理数据库!学生WHERE学生.性别=′女′GROUPBY学生.专业
    4.4.2交叉表应用..交叉表是由3个字段组成的表,如“成绩”表可以表示为:
    1234课号1成绩成绩成绩成绩课号2成绩成绩成绩成绩课号3成绩成绩成绩成绩课号4成绩成绩成绩成绩
    在VF6中,生成交叉表是通过内部提供的VFPXFAB.PRG程序自动生成的,命令格式是DO(-GENXTAB)WITH<SELECT命令>即通过SELECT命令查询记录,然后使用VFPXFAB.PRG程序自动生成交叉表。【例4.44】生成“成绩”表的交叉表。
    1○打开“查询设计器”窗口,并将“成绩”表添加到该查询中。2○在“字段”选项卡中,设定输出字段为、课号和(平时+期中+期末)/3。3○在“杂项”选项卡中,选中“交叉数据表”复选框,结果如图4.13所示。4○保存该查询程序为query8-45.qpr,然后运行该查询,结果如图4.14所示。该查询程序的SQL语句如下所示。
    SELECT成绩.,成绩.课号,(平时+期中+期末)/3FROM教学管理数据库!成绩;GROUPBY成绩.,成绩.课号ORDERBY成绩.,成绩.课号;INTOCURSORSYS(2015)DO(_GENXTAB)WITH′查询1′BROWSENOMODIFY
    图4.13124
    设置交叉表
    图4.14
    交叉表结果
    程序中,“SYS(2015)”表示产生一个惟一的游标名。“INTOCURSORSYS(2015)”表示将输出结果存储在惟一的游标中。“DO(_GENXTAB)WITH′查询1′”表示使用当前SELECT命令程序,生成交叉表。
    4.4.3..
    查询结果输出
    使用“查询设计器”可以将输出结果以多种形式表现出来,如浏览窗口、游标、表等。单击“查询设计器”工具中的“查询去向”按钮,得到如图4.15所示的窗口。
    图4.15
    查询结果输出去向
    从图4.15中可以看出,查询结果的去向可以是“浏览”“临时表”“表”“图形”、、、、“屏幕”“报表”和“标签”、,其含义见表4.7。
    125
    表4.7查询去向选项及其含义选项含义
    浏览(Browse)
    将结果输出列一个名为“查询”的内存表,并打开其浏览窗口。下一次的输出将覆盖当前内存表中的内容将结果送到用户命名的数据表中Microsoftgraph系统提供的一个独立的嵌入式OLE应用程序。将结果送到Microsoftgraph中作图将结果送到当前活动窗口,并可同时输出到打印机或文本文件中将结果送到一个报表文件中将结果送到一个标签文件中
    临时表(Cursor)将结果送到用户命名的内存表(CURSOR)中表(Table)图形(Graph)屏幕(Screen)报表(Report)标签(Label)
    系统默认是将查询结果输出到一个名为“查询”的内存表,并打开它的浏览窗口。【例4.45】从学生表查询、、性别和专业,并将查询结果保存到“学生名册.dbf”。
    1○打开“查询设计器”窗口,并将“学生”表添加到该查询中。2○在“字段”选项卡中,设定输出字段为、、性别和专业。3○设置查询输出:选择“查询”→“查询去向”菜单项,在打开的“查询去向”对话框中选择“表”,并在随后增加出现的“表名”编辑框中输入表名“学生名册”。4○保存该查询程序为query8-46.qpr,然后运行该查询即可。该查询命令如下所示。
    SELECT学生.,学生.,学生.性别,学生.专业FROM教学管理数据库!学生;INTOTABLE学生名册.dbf
    4.4.4查询设计器的表单设计如果希望给用户提供一个通用的SQL查询,可以将“查询设计器”设计在表单中,用户可以直接启用“查询设计器”来完成SQL查询操作。【例4.46】在表单中使用“查询设计器”。
    1○创建一个表单,在数据环境类中将所有涉及到查询的表都添加进来,然后设计一个按钮如图4.16所示。2○为该按钮添加Clyck方法如下所示。CREATEQUERY&;&;创建查询,启动查询设计器图4.16设置交叉表3○运行该表单,单击“创建查询程序”按钮,得到如图4.17所示窗口。此时就进入了“查询设计器”,因为当前数据环境中提供了所有可查询的表,所以可以直接将表添加到当前查询环境,以进行查询操作。
    126
    “查询设计器”是完成查询的一种辅助工具,它实质上是SELECT命令的可视化操作,更适合于一般用户进行查询操作在实际使用的过程中,对那些常用的查询,例如统计学生成绩、统计学生专业人数等查询,可以事先通过“查询设计器”生成查询程序(.qpr),然后在表单中设计一些按钮,单击相应按钮,就能直接输出查询结果。而SELECT命令是面向程序员的,一般在程序中使用。
    图4.17
    交叉表结果
    127
    习
    一、思考题思考题1.2.3.4.5.
    题4
    简述SQL语言的组成。简述查询设计器的组成及其功能。查询去向有哪几种?查询的WHERE条件中,BETWEEN…AND与IN有什么区别?试举例说明。试举例说明查询的WHERE条件中,ALL与ANY的区别。
    二、选择题1.不属于数据定义功能的SQL语句是()。(A)CREATETABLE(B)CREATECURSOR(C)UPDATE(D)ALTERTABLE2.从数据库中删除表的命令是()。(A)DROPDAELB(B)ALTERTABLE(C)DELETETABLE(D)USE3.建立表结构的SQL命令是()。(A)CREATECURSOR(B)CREATETABLE(C)CREATEINDEX(D)CREATEVIEW4.DELETEFROMSWHERE年龄>60语句的功能是()。(A)从S表中彻底删除年龄大于60岁的记录(B)S表中年龄大于60岁的记录被加上删除标记(C)删除S表(D)删除S表的年龄列5.UPDATE-SQL语句的功能是()。(A)属于数据定义功能(B)属于数据查询功能(C)可以修改表中某些列的属性(D)可以修改表中某些列的内容6.SELECT-SQL语句是()。(A)选择工作区语句(B)数据查询语句(C)选择标准语句(D)数据修改语句7.关于INSERT-SQL语句描述正确的是()。(A)可以向表中插入若干条记录(B)在表中任何位置插入一条记录(C)在表尾插入一条记录(D)在表头插入一条记录8.在“设计查询器”窗口中建立一个或(OR)条件必须使用的选项卡是((A)字段(B)连接(C)筛选(D)杂项9.只有满足连接条件的记录才包含在查询结果中,这种连接为()。(A)左连接(B)右连接(C)内部连接(D)完全连接
    )。
    128
    三、填空题1._______语言是关系型数据库的标准语言2.在VF6支持的SQL语句中,_______命令可以向表中输入记录,_______命令可以检查和删除查询表中的内容。3.在VF6支持的SQL语句中,_______命令可以修改表中数据,_______命令可以修改表结构。4.ALTER-SQL语句中,在_______子句用于修改列的性质,_______子句用于增加列。5.在VF6支持的SQL语句中,_______命令可以从表中删除行,_______命令可以从数据库中删除表。6.在SELECT语句中,用_______子句消除复出现的记录行。7.在SELECT语句中,表示条件表达式用WHERE子句,分组用_______子句,排序用_______子句。8.ORDERBY子句的选项中,在DESC代表_______输出;省略DESC时,代表_______输出。9.SELECT-SQL语句中,定义一个区间范围的特殊运算符是_______,检查一个属性值是否属于一组值中的特殊运算符是_______。10.在SELECT-SQL语句中,字符串匹配运算符用_______,匹配符_______表示零个或多个字符,_______表示任何一个字符。11.内部连接是指只有_______的记录才包含在查询结果中。12.完全连接是指先按右连接比较字段值,然后按左连接比较字段值,_______不列入查询结果中。四、上机练习题上机练习题用SQL命令语句实现以下功能。1.在“设备管理”项目中,建立设备管理数据库的“备份”库,并用表结构复制命令建立“设备备份”,用CREATE-SQL命令其他两个备份表;且设备备份表中的设备编号字段为主码;人员备份表中的职工号字段为主码;设备状态备份表中设备型号+职工号为主码,设备型号参照设备备份表外码,职工号参照人员备份表外码,收费金额字段允许为空值。2.用APPENDFROM命令,保证设备表和设备备份表、人员表和人员备份表的数据一致;用INSERT-SQL语句向设备状态备份表中插入记录。3.用UPDATE-SQL将设备编号为00004的收费为空值。。4.为人员备份表加一列“保底工资”5.修改人员备份表,使市场部的保底工资为800元。6.列出市场部所有人员的职工号和。7.列出所有产地为美国的设备编号、设备名称和设备型号。8.统计部门个数。9.列出使用00001号设备的平均使用时间。
    129
    10.列出使用00001号失败的平均使用时间、最长使用时间和最短使用时间。11.列出所有姓“王”职工的、性别和部门。12.列出设备状态备份表中收费金额为空值的设备的设备名称、使用人员。13.列出使用时间大于00001号平均使用时间的00004号设备的名称和购入日期。14.删除设备状态备份表中无使用人员的记录(置删除标记)。15.把低于00003号设备平均收费金额的所有设备的所有收费金额减去50元。16.把职工号升序,使用时间降序列出每个设备的使用情况(包括设备名称、使用人员和使用时间)。17.按设备型号和使用时间降序列出每个设备的使用情况,包括设备名称、设备型号、使用人员和使用时间。18.按各设备总的使用时间降序列出每个设备的名称和使用时间总和。19.列出所有使用过全部设备的职工名单。20.列出平均使用时间大于1年的设备的编号和平均使用时间,按平均使用时间降序排列。
    130
    
  • 下一篇资讯: 第3章结构化查询语言
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师