您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > Visual FoxPro_6
第6章SQL关系数据库查询一、SQL概述SQL是结构化查询语言(StructuredQueryLanguage)的缩写,SQL语言是美国国家标准局ANSI确认的关系数据库语言的标准,一条SQL语言就可替代许多条FoxPro命令。SQL语言按照功能可以分为4大类:•数据查询语言DQL:查询数据。•数据定义语言DDL:建立、删除和修改数据对象。•数据操纵语言DML:完成数据操作的命令,包括查询。•数据控制语言DCL:控制对数据库的访问,服务器的关闭、启动等。SQL的主要特点:(1)SQL是一种一体化的语言——它集数据定义、数据控制和数据查询等功能于一身。(2)SQL是一种高度非过程化的语言——用户只需要告诉计算机要“做什么”,而具体过程怎么实现则由计算机来自动完成。(3)SQL语言非常简洁——语法非常简单,利用简单的几个英语单词的组合就可以完成所有的功能。(4)SQL可以直接以命令方式交互使用——可以直接使用命令来实现数据的定义、数据的控制和数据的查询。一、SQL概述SQL功能命令动词数据查询SELECT数据定义CREATE、DROP、ALTER数据操作INSERT、UPDATE、DELETE数据控制GRANT、REVOKESQL命令数据定义语言DDL用于执行数据定义的操作,如创建或删除表、索引和视图之类的对象。由CREATE、DROP、ALTER命令组成,完成数据库对象的建立(CREATE)、删除(DROP)和修改(ALTER)。(一)数据库的创建、打开与删除1.创建【格式】CREATEDATABASE库文件名【功能】创建一个指定文件名的数据库,并打开数据库。【例1】在“D:\”下创建一个“练习”数据库二、数据定义2.打开【格式】OPENDATABASE库文件名[EXCLUSIVE][SHARED][NOUPDATE][VALIDATE]【功能】打开指定的数据库文件。(1)EXCLUSIVE——独占方式打开(2)SHARED——共享方式打开(3)NOUPDATE——只能浏览,不能更新(4)VALIDATE——进行有效性检查3.删除【格式】DELETEDATABASE数据库名【功能】删除指定数据库的结构和数据。【说明】谨慎使用。(二)数据表的创建与操作1.创建【格式】CREATETABLE表名(字段名1数据类型[(宽度[,小数位数])][完整性约束][NULL|NOTNULL][,字段名2…])【功能】定义(创建)一个表。【说明】见P139【例2】在“D:\”下创建一个名为“教师表”的数据表文件,有职工号(字符型,6位)、姓名(字符型,8位)、出生日期(日期型)字段。【练习】创建一个表STUD(学生信息表),它由以下字段组成:学号(C,10);姓名(C,8);性别(C,2);班级名(C,10);系别代号(C,2);地址(C,50);出生日期(D);是否团员(L);备注(M);照片(G)。【例3】在“D:\”下创建一个名为xsqk的数据表文件,有xh,xm,xb字段,其中xh为主关键字,xb的默认值为“男”。【例4】创建一个名为xscj的表文件,有xh,yy,yw三个字段,其中xh是主关键字,且以xsqk表为父表,以父表中主关键字xh关联;yy字段为数值型,其值不大于100,如果输入出错,提示“成绩输入出错!”;yw为数值型,默认值是80。2.表结构的修改【格式】ALTERTABLE表名[ADD新字段名数据类型[(宽度[,小数位数])]【功能】修改表结构(添加、删除或修改指定字段)。【说明】ADD子句用于增加指定表的字段变量名、数据类型、宽度和完整性约束条件;ALTER子句用于修改已有的字段;DROP子句用于删除指定字段。【例5】修改xscj.dbf表的结构:添加新字段gs,数值型;修改字段yw的宽度为3;删除字段yy的有效性规则。【练习】删除刚添加的新字段gs,添加字段yy的有效性规则。3.移去数据表【格式】REMOVETABLE数据表名[DELETE][RECYCLE]【功能】从当前数据库中移走指定表。【说明】移去只是从数据库中移走,并非删除数据表文件;选择DELETE,表示移去表的同时,从磁盘上删除表文件;选择DELETE的同时选择了RECYCLE,表示删除时,在回收站保留副本。【例6】将练习库中的数据表文件“教师表”移去。4.删除表【格式】DROPTALBE表名[RECYCLE]【功能】从磁盘上删除指定的表。三、数据操纵数据操纵语言是完成数据操作的命令,一般分为两种类型的数据操纵,它们统称为DML:●数据检索(常称为查询):寻找所需的具体数据。●数据修改:添加、删除和改变数据。数据操纵语言一般由INSERT(插入)、DELETE(删除)、UPDATE(更新),SELETE(检索,又称查询)等组成,由于SELETE比较特殊,所以一般又将它以查询(检索)语言单独出现。(一)插入记录【格式1】INSERTINTO表名[字段名表]VALUES(表达式表)【格式2】INSERTINTO表名FROMARRAY数组名|FROMMEMVAR【功能】在指定的表文件末尾追加一条记录。格式1用表达式表中的各表达式值赋值给字段名表中的相应的各字段。格式2用数组或内存变量的值赋值给表文件中各字段。【说明】如果某些字段名在INTO子句中没有出现,则新记录在这些字段名上将取空值(或默认值)。但必须注意的是,在表定义说明了NOTNULL的字段名不能取空值。字段名表:指定表文件中的字段,缺省时,按表文件字段的顺序依次赋值。表达式表:指定要追加的记录各个字段的值。数组名:必须先定义,且字段按数组顺序取值。【例7】在表文件STUD的末尾追加三条记录。***用表达式方式追加第一条记录***INSERTINTOSTUD(学号,姓名,性别,班级名,系别代号,地址,出生日期,是否团员);VALUES(011110,李建国,男,计0121,01,湖北武汉,{^2002/09/28},.T.)***用数组方式追加第二条记录***DIMENSIONDATA[8]DATA(1)=011103DATA(2)=李宁DATA(3)=女DATA(4)=电0134DATA(5)=02DATA(6)=江西九江DATA(7)={^1985/05/06}DATA(8)=.F.INSERTINTOSTUDFROMARRAYDATA***用内存变量方式追加第三条记录***学号=011202姓名=赵娜性别=女班级名=英0112系别代号=03地址=广西南宁出生日期={^1984/02/21}是否团员=.F.INSERTINTOSTUDFROMMEMVARLIST(二)更新记录命令【格式】UPDATE表文件名SET字段名1=表达式[,字段名2=表达式…][WHERE条件]【功能】更新指定表文件中满足WHERE条件子句的数据。其中SET子句用于指定列和修改的值,WHERE用于指定更新的行,如果省略WHERE子句,则表示表中所有行。【说明】更新操作又称为修改操作。【例8】修改xsqk表中xh=“200401”的记录数据,xb改为“女”,显示修改结果。【练习】将xscj表中,xh为200304的成绩各加5分。(三)删除记录命令【格式】DELETEFROM表名WHERE表达式【功能】从指定的表中删除满足WHERE子句条件的所有记录。如果在DELETE语句中没有WHERE子句,则该表中的所有记录都将被删除。【说明】这里的删除是逻辑删除,即在删除的记录前加上一个删除标记“*”。【例9】逻辑删除xsqk表中xh=“200401”的记录。【练习】删除STUD表中所有性别为女且为英语系的学生记录。四、数据查询数据库中的数据很多时侯是为了查询的,因此,数据查询是数据库的核心操作。而在SQL语言中,查询语言中有一条查询命令,即SELECT语句。(一)基本查询语句【格式】SELECT[ALL|DISTINCT]字段列表FROM表【功能】无条件查询。【说明】ALL:表示显示全部查询记录,包括重复记录。DISTINCT:表示显示无重复结果的记录。【例10】显示STUD(学生信息表)中的所有记录。SELECT*FROMSTUD命令中的*表示输出显示所有的字段,数据来源是STUD表,表中的内容以浏览方式显示。【例11】显示STUD(学生信息表)中的所有的学号及与之对应的姓名,同时能去除重名。SELECTDISTINCT学号,姓名FROMSTUD【例12】显示xscj表中的所有记录,并将yw(语文成绩)一项乘以0.7。SELECTxh,yw*0.7ASywFROMxscj(二)带条件(WHERE)的查询语句【格式】SELECT[ALL|DISTINCT]字段列表FROM表[WHERE条件表达式]【功能】从一个表中查询满足条件的数据。【说明】条件表达式由一系列用AND或OR连接的条件表达式组成,条件表达式的格式可以是以下几种:(1)字段名1关系运算符字段名2。(2)字段名关系运算符表达式。(3)字段名关系运算符ALL(子查询)(4)字段名关系运算符ANY|SOME(子查询)(5)字段名[NOT]BETWEEN起始值AND终止值(6)[NOT]EXISTS(子查询)(7)字段名[NOT]IN值表(8)字段名[NOT]IN(子查询)(9)字段名[NOT]LINK字符表达式SQL支持的关系运算符如下:=、<>、!=、#、==、>、>=、<、<=。【例13】显示STUD表中所有男生记录的学号,姓名和性别字段值。SELECT学号,姓名,性别;FROMSTUDWHERE性别=男【例14】显示STUD表中出生日期在85年之间的学生的学号,姓名,出生日期。SELECT学号,姓名,出生日期FROMSTUD;WHERE出生日期BETWEEN{^1985/01/01}AND{^1985/12/31}【练习】显示STUD表中姓李的学生的学号,姓名,出生日期。SELECT学号,姓名,出生日期FROMSTUD;WHERE姓名LIKE“李%”(三)SQL的复杂查询1.连接查询【说明】在一个数据库中的多个表之间一般都存在着某些联系,在一个查询语句中同时涉及到两个或两个以上的表时,这种查询称之为连接查询(也称为多表查询)。在多表之间查询必须处理表与表之间的连接关系。SELECT[ALL|DISTINCT]字段列表FROM表1[,表2…..]WHERE条件表达式【例15】查询并显示各个学生的学号,姓名,各科成绩及课程名。SELECTa.学号,a.姓名,b.课程名,c.成绩;FROMSTUDa,COURSEb,SCc;WHEREa.学号=c.学号ANDb.课程号=c.课程号【例16】查询并显示各个学生所学课程的情况。SELECTSTUD.学号,STUD.姓名,COURSE.课程名;FROMSTUD,SC,COURSE;WHERESTUD.学号=SC.学号ANDSC.课程号=COURSE.课程号2.连接问题在SQL语句中,在FROM子句中提供了一种称之为连接的子句,连接分为内连接和外连接,外连接又可分为左外连接、右外连接和全外连接。(1)内连接内连接是指包括符合条件的每个表的记录,也称之为全记录操作。【例17】查询并显示各个学生的学号,所学课程及课程成绩。SELECTSC.学号,COURSE.课程名,SC.成绩;FROMSC,COURSE;WHERESC.课程号=COURSE.课程号如果采用内连接方式,则命令如下:SELECTa.学号,b.课程名,成绩;FROMSCaINNERJOINCOURSEbONa.课程号=b.课程号将会得到完全相同的结果。(2)外连接外连接是指把两个表分为左右两个表。右外连接是指连接满足条件右侧表的全部记录。左外连接是指连接满足条件左侧表的全部记录。全外连接是指连接满足条件表的全部记
本文标题:Visual FoxPro_6
链接地址:https://www.777doc.com/doc-3404309 .html