关系数据库标准语言SQLSQL是结构化查询语言(StructuredQueryLanguage)的缩写,其功能包括:9.1SQL语言的基本概念数据定义1数据操纵2数据查询3数据控制4数据定义语言DDL用于执行数据定义的操作,如创建或删除表、索引和视图之类的对象。由CREATE、DROP、ALTER命令组成,完成数据库对象的建立(CREATE)、删除(DROP)和修改(ALTER)。9.2.1定义(创建)表【格式】CREATETABLE表名(字段名1数据类型[(宽度[,小数位数])【功能】定义(也称创建)一个表。9.2数据定义【例9-1】创建一个表STD(学生信息表),它由以下字段组成:学号(C,10);姓名(C,8);性别(L);入学时间(D);年龄(N,3);备注(M);照片(G)。CREATETABLESTD(学号C(10),姓名C(10),性别L,入学时间D,年龄N(3),备注M,照片G)【格式】ALTERTABLE表名[ADD新字段名数据类型[(宽度[,小数位数])【功能】向一个已有的表中增加表字段。【说明】ADD子句用于增加指定表的字段变量名、数据类型。【例9-2】在学生信息表STD中,增加一个家庭住址字段变量字段类型为字符型28位。9.2.2增加表字段结构altertablestdadd家庭住址C(28)【格式】ALTERTABLE表名[ALTER新字段名数据类型[(宽度[,小数位数])[SETDEFAULT表达式][SETCHECK表达式ERROR文本信息]【功能】修改表字段结构。【说明】ALTER子句修改指定表的字段变量名、数据类型。【例9-3】在学生信息表STD中,修改“备注”字段的字段类型为字符型50位。9.2.3修改表字段altertablestdalter备注C(50)【格式】ALTERTABLE表名DROP字段名【功能】删除表中的字段。【说明】用于删除表中多余的字段。9.2.4删除表中的字段【格式】DROPTALBE表名【功能】删除指定表的结构和内容(包括在此表上建立的索引)。【说明】如果只是想删除一个表中的所有记录,则应使用DELETE语句。9.2.5删除表数据操纵语言是完成数据操作的命令,一般分为两种类型的数据操纵,它们统称为DML:●数据检索(常称为查询):寻找所需的具体数据。●数据修改:添加、删除和改变数据。数据操纵语言一般由INSERT(插入)、DELETE(删除)、UPDATE(更新),SELECT(检索,又称查询)等组成,由于SELECT比较特殊,所以一般又将它以查询(检索)语言单独出现。9.3数据操纵【格式】INSERTINTO表名[字段名表]VALUES(表达式)【功能】在指定的表文件末尾追加一条记录。用表达式表中的各表达式值赋值给字段名表中的相应的各字段。9.3.1插入记录【例9-4】:为STUD表添加一条记录信息,内容分别是学号:071011,姓名:陈雪,性别:女,出生年月:1989-3-24,入校成绩:630,是否团员为.T.)。INSERTINTOSTUDVALUES(“071011”,”陈雪”,”男”,{^1989-03-24},630,.T.)【格式】UPDATE表文件名SET字段名1=表达式[WHERE条件]【功能】更新指定表文件中满足WHERE条件子句的数据。其中SET子句用于指定列和修改的值,WHERE用于指定更新的行,如果省略WHERE子句,则表示表中所有行。【说明】更新操作又称为修改操作。9.3.2更新记录命令【例9-5】修改STUD表中学号071009的入校成绩为572UPDATEstudSET入校成绩=572where学号=“0710099.3.3删除记录【格式】DELETEFROM表名WHERE表达式【功能】从指定的表中删除满足WHERE子句条件的所有记录。如果在DELETE语句中没有WHERE子句,则该表中的所有记录都将被删除。【说明】这里的删除是逻辑删除,即在删除的记录前加上一个删除标记。【例9-6】删除STUD表中姓名为“杨果”的记录。deletefromstudwhere姓名=“杨果”9.4SQL中的数据查询语句数据库中的数据很多时侯是为了查询的,因此,数据查询是数据库的核心操作。而在SQL语言中,查询语言中有一条查询命令,即SELECT语句。9.4.1基本查询语句【格式】SELECT[*|DISTINCT]字段列表FROM表【功能】无条件查询。【说明】*:表示显示全部查询记录,包括重复记录。DISTINCT:表示显示无重复结果的记录。【例9-7】显示STUD表中的所有记录。命令中的*表示输出显示所有的字段,数据来源是STUD表,表中的内容以浏览方式显示。【例9-8】显示XK中的学号字段,同时能去除重复字段。SELECT*FROMSTUDselect学号,姓名fromstudselectdistinct学号fromxk9.4.2带条件(WHERE)的查询语句【格式】SELECT[*|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]LIKE字符表达式SQL支持的关系运算符如下:=、<>、!=、#、==、>、>=、<、<=【例9-11】显示STUD表中入校成绩大于600分(含)并且性别为男生的记录。select*fromstudwhere入校成绩=600and性别=男【例9-9】显示stud表中入校成绩在600到620之间的所有记录。【例9-10】显示stud表中姓“李”的同学记录。select*fromstudwhere入校成绩between600and630select*fromstudwhere姓名like“李%9.4.3SQL的复杂查询1.连接查询【说明】在一个数据库中的多个表之间一般都存在着某些联系,在一个查询语句中同时涉及到两个或两个以上的表时,这种查询称之为连接查询(也称为多表查询)。在多表之间查询必须处理表与表之间的连接关系。【格式】SELECT[*|DISTINCT]字段列表FROM表1[,表2]WHERE条件表达式【例9-11】按学号字段查询stud表中的学号、姓名,XK表中的成绩记录。selectstud.学号,stud.姓名,xk.成绩fromstud,xkwherestud.学号=xk.学号2.连接问题在SQL语句中,在FROM子句中提供了一种称之为连接的子句,连接分为内连接和外连接,外连接又可分为左外连接、右外连接和全外连接。命令格式如下:SELECT[*|DISTINCT]FROM[表名][INNER|LEFT|RIGHT|FULL]JOIN数据库名!]表名ON联结条件…](1)内连接内连接是指包括符合条件的每个表的记录,也称之为全记录操作。而上面两个例子就是内连接。【例9-12】将stud表与xk表按学号内部关联进行查询。select*fromstudinnerjoinxkonstud.学号=xk.学号(2)外连接外连接是指把两个表分为左右两个表。右外连接是指连接满足条件右侧表的全部记录。左外连接是指连接满足条件左侧表的全部记录。全外连接是指连接满足条件表的全部记录。【例9-13】将stud表与xk表按学号左关联并按条件查询入校成绩大于等于600的记录。select*fromstudleftjoinxkonstud.学号=xk.学号where入校成绩=6003.嵌套查询在SQL语句中,一个SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询或子查询。【例9-14】根据xk表中的成绩查询stud表中成绩大于等于90分的信息。select*fromstudwhere学号in(select学号fromxkwhere成绩=90)4.分组与计算查询【格式】SELECT[*|DISTINCT]字段列表FROM表[WHERE条件[GROUPBY分类字段列表…][HAVING过滤条件][ORDERBY排序项[ASC|DESC]【功能】包括有排序、函数运算和谓词演算【例9-15】对STUD表按入校成绩由高到低的顺序查询。【例9-16】查询STUD表中入校成绩最高的两条学生信息.select*fromstudorderby入校成绩descselecttop2*fromstudorderby入校成绩desc【例9-17】在XK表中按学号分组查询每个同学的平均成绩。【例9-18】在XK表中查询平均成绩在90分以上的学生信息。select学号,avg(成绩)平均成绩fromxkgroupby学号select学号,avg(成绩)as平均成绩fromxkgroupby学号having平均成绩90【例9-19】统计XK表中各门课程的选课人数。select课程号,count(课程号)as人数fromxkgroupby课程号9.4.5SQL的查询去向默认情况下,查询内容是输出到一个浏览窗口,用户在SELECT语句中可使用子句设置查询去向:INTOTABLE或INTODBF表名:将查询结果保存到一个永久表中。INTOCURSOR临时表名:将查询结果保存到一个临时表中。INTOARRAY数组名:将查询结果保存到一个数组中。TOFILE:将查询结果保存到TXT文本文件。TOPRINTER:将查询结果送打印机打印。【例9-20】把XK表中成绩大于等于90分的记录保存到表XK1中。select学号fromxkwhere成绩=90INTOTABLEXK1