《vfpSQL基础》PPT课件.ppt

上传人:牧羊曲112 文档编号:5626080 上传时间:2023-08-03 格式:PPT 页数:138 大小:1.32MB
返回 下载 相关 举报
《vfpSQL基础》PPT课件.ppt_第1页
第1页 / 共138页
《vfpSQL基础》PPT课件.ppt_第2页
第2页 / 共138页
《vfpSQL基础》PPT课件.ppt_第3页
第3页 / 共138页
《vfpSQL基础》PPT课件.ppt_第4页
第4页 / 共138页
《vfpSQL基础》PPT课件.ppt_第5页
第5页 / 共138页
点击查看更多>>
资源描述

《《vfpSQL基础》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《vfpSQL基础》PPT课件.ppt(138页珍藏版)》请在三一办公上搜索。

1、结构化查询语言SQL基础,一个各种数据库广泛使用的语言,SQL的发展,原型名为“系统 R”,IBM 圣荷西实验室完成(1970年代),经过IBM内部及其他的许多实用性及效率测试,其结果相当令人满意,1986年10月SQL标准于美国公布,1987年6月ISO组织定为SQL国际标准,SQL语言普遍使用于关系数据库的关联操作中,1990年,我国颁布了信息处理系统数据库语言SQL,将其定为中国国家标准,SQL 简介,SQL语言功能强,能进行数据定义、数据查询、数据操纵和数据控制等功能,是一种一体化语言SQL是一种高度非过程化语言,用户只需告诉系统“做什么”,无须描述“怎么做”可以用直接采用交互方式使用

2、,也可以嵌入程序设计语言在程序方式下使用SQL的语法简单,非常口语化、既易学又易懂(警惕!),SQL的组成,SQL功能强大,但概括起来,可以分成以下几组:数据定义语言DDL(Data Definition Language):用于定义数据的结构,比如定义表结构、修改表结构、删除表;数据操作语言DML(Data Manipulation Language):用于数据的增、删、改和查询;数据控制语言DCL(Data Control Language):用于定义数据库用户的权限。,VFP中SQL的功能和特点,支持数据定义和数据操作功能,但是不支持数据控制功能只支持单层嵌套查询(不支持多层嵌套查询)S

3、QL命令既可以在命令窗口直接执行,也在程序中执行,学习的目标熟练掌握SQL的语法和使用技巧,特别是查询功能,实现用SQL语言来操作数据库;学习方法熟练记忆各种命令及其选项的功能多做练习,锻炼用SQL语言的思维来表达问题,目 录,5.2 数据定义功能,5.4 查询功能,5.3 数据操作功能,习 题 课,5.2 数据定义功能,create(定义表结构),drop(删除表),alter(修改表结构),本节的难点:定义表结构、修改表结构(命令繁多,模样相似),回目录,【语法格式】Create table|dbf free(,)null|not nullcheck errordefault primar

4、y key|unique,(,)null|not nullcheck errordefault,),create(定义表结构)语法格式,定义字段名,类型、宽度、小数位数,是否允许为null,定义字段1的域完整性,将字段1定义为主索引或候选索引,eg,与表设计器完成的功能几乎一致,【功能】创建自由表或数据库表数据库没有打开不带FREE短语,创建的是自由表在数据表名字前面加数据库名,也可以创建数据库表 数据库打开如果是自由表,则必须带短语FREE不带FREE,创建的是数据库表如果是数据库表,则表中还可以建立主索引、定义域完整性、建立与其他表的连接,create(定义表结构)功能,思考:SQL中的数

5、据定义语句与表设计器的区别表设计器:以窗口界面显示定义数据表的过程,交互式,直观,使用方便,但是不能在程序中使用;SQL语句:是命令方式,可以在程序中直接定义表的结构;还可以建立永久关系;与数据库的标准定义接轨,例.建立自由表“教师信息”其结构如下,create table 教师信息 free(职工号 C(6)unique,;姓名 C(8),性别 C(2),出生日期 D,职称 C(6),create(定义表结构)举例,例.建立学生成绩管理数据库,然后利用SQL命令在该数据库中建立学生信息表、课程信息表和成绩信息表,学生信息表,create(定义表结构)eg,步骤1:建立学生成绩管理数据库 cr

6、eat database 学生成绩管理步骤2:建立学生信息表create table 学生信息(;学号 C(8)primary key,;姓名 C(8),;性别 C(2)check 性别=男“or 性别=女;error 只能输入“男”或“女”default 男,;出生日期 D,;入学成绩 N(5,1),;四级通过否 L,;计算机等级考试 C(4)null default null,;简历 M),返回5.2,课程信息,成绩信息,两者的组合为主关键字,create(定义表结构)eg,步骤3:建立课程信息表 create table 课程信息(课程号 C(2)primary key,;课程名 C(1

7、0),;学时 N(3,0)check 学时0 and 学时=108;error“学时”在0108之间)步骤4:建立成绩信息表create table 成绩信息(;学号 C(8),课程号 C(2),成绩 N(5,1),;primary key 学号+课程号 tag xhkch,;foreign key 学号 tag 学号 references 学生信息,;foreign key 课程号 tag 课程号 references 课程信息;),create(定义表结构)eg,建立学号+课程号的主索引,建立学号的普通索引,并且和学生信息表建立永久关系,修改表结构,【语法格式1】,alter table

8、add|alter(,)null|not nullcheck error default,【友情提示】1.只能一个一个字段地修改 2.命令中不可缺少被修改或增加的字段名及类型,alter(修改表结构)语法格式,该命令不能修改字段名,不能删除字段,不能删除已经定义好的有效性规则,例1.向表 customer 中添加字段 fax,且允许字段为null。alter table customer add fax c(20)null例2.为课程信息表添加一个字段:学时(N,2),范围在06之间,并将课程号的长度修改为3位;alter table 课程信息 add 学时 N(2)check 学时0;and

9、 学时=6 error“学时”必须在06之间(注意:表中的学分最好为空)alter table 课程信息 alter 课程号 C(3)例3.将学生信息表中的四级通过否设置默认值.F.alter table 学生信息 alter 四级通过否 L default.F.,alter(修改表结构)eg,修改表结构,【语法格式2】,ALTER TABLE ALTER COLUMN NULL|NOT NULLSET DEFAULT SET CHECK ERROR DROP DEFAULTDROP CHECK【功能2】能删除默认值和有效规则,但不能删字段名;修改功能同格式1,但不写类型与宽度,由set短语代

10、替。,举例,例1:给zc.dbf的性别字段补加有效规则:alter table zc alter 性别 c(2)check 性别$(男女)alter table zc alter 性别 set check 性别$(男女)注:第1条命令是ALTER的格式1,类型与宽度必写;第2条命令是ALTER的格式2;类型与宽度不写,要加SET短语。例2:给zc.dbf的职工号字段补加主索引:alter table zc alter 职工号 c(2)primary key例3:删除zc.dbf的性别字段 的有效规则:alter table zc alter 性别 drop check,ALTER命令格式1与格

11、式2示意图,ALTER table 表名,ADD 字段名的各属性,ALTER 字段名 类型(宽度),ALTER 字段名 set,ALTER 字段名 drop default|check,格式1,格式2,格式1与格式2不能给字段名更名和删除字段名、索引,【语法格式】drop table【功能】删除表文件【说明】若是自由表直接删除相应的.dbf文件。若是当前数据库中的表,则移去表的同时,从磁盘中删除表,同时删除数据库中登记的与该表相关的信息(再打开数据库时没有问题)若没有打开数据库而删除了其中的表,则删除仅仅只是删除表但是数据库中与该表相关的信息没有被删除,再打开数据库时会出现错误提示,最好对当前

12、数据库中的表执行本命令。举例:删除学生信息表 drop table 学生信息,其他修改结构的命令,删除表中的字段修改字段名添加或删除主索引、候选索引删除外部关键字(普通索引)添加外部关键字(普通索引)并建立与其他表的连接设置记录级有效性规则,1.删除表中的字段,【语法格式】alter table drop,alter(修改表结构)语法 eg,例.删除学生信息表中的“简历”字段,alter table 学生信息 drop 简历,2.修改字段名,【语法格式】alter table rename to,alter(修改表结构)语法 eg,alter table 学生信息 rename 出生日期 to

13、 出生年月,例.将学生信息表中的“出生日期”字段名改为“出生年月”,【友情提示】字段名不用带定界符,alter table 学生信息 rename“出生日期”to“出生年月”(),3.添加或删除主索引、候选索引,【添加】alter table add primary key|unique tag,alter(修改表结构)语法 eg,【删除】alter table drop primary key|unique tag,例1.将课程信息表中的课程名定义为候选索引,索引标识是kcmalter table 课程信息 add unique 课程名 tag kcm例2.将课程信息表中的课程名定义为候选索

14、引,索引标识是课程名alter table 课程信息 add unique 课程名例3.删除课程信息表中的候选索引课程名alter table 课程信息 drop unique tag 课程名,alter(修改表结构)eg,【格式】alter table drop foreign key tag,alter table 成绩信息 drop foreign key tag 课程号,例.将成绩信息表中的课程号外部关键字删除,【功能】删除外部关键字的同时也删除了表之间的连接,alter(修改表结构)语法 eg,4.删除外部关键字(普通索引),alter(修改表结构)语法 eg,alter table

15、 add foreign key tag references tag,alter table 成绩信息 add foreign key 课程号 tag 课程号 reference 课程信息 tag 课程号,例.将成绩信息表中的课程号设置为外部关键字并与课程信息表建立连接,5.添加外部关键字(普通索引)并建立与其他表的连接,alter table set check error 错误信息,alter table 课程信息 set check 学时=学分*18 error“学时应该为学分18”,例.对课程信息表中的记录,要求检验学时字段的值,规定是每学分18个学时,alter(修改表结构)语法

16、eg,【友情提示】设置该规则时,会先检查已经存在的记录是否违反了规则,若违反了记录级有效性规则,则设置不成功。,6.设置记录级有效性规则,其他修改结构的命令总结,删除表中的字段alter table drop 修改字段名alter table rename to 添加或删除主索引、候选索引alter table add primary key|unique tag alter table drop primary key|unique tag 删除外部关键字(普通索引)alter table drop foreign key tag 添加外部关键字(普通索引)并建立与其他表的连接alter t

17、able add foreign key tag references tag 设置记录级有效性规则alter table set check error 错误信息,SQL语言的定义即精致又精细!,返回5.2,【语法格式】drop table【功能】删除表文件【说明】若是自由表直接删除相应的.dbf文件。若是当前数据库中的表,则移去表的同时,从磁盘中删除表,同时删除数据库中登记的与该表相关的信息(再打开数据库时没有问题)若没有打开数据库而删除了其中的表,则删除仅仅只是删除表但是数据库中与该表相关的信息没有被删除,再打开数据库时会出现错误提示,最好对当前数据库中的表执行本命令。举例:删除学生信息

18、表 drop table 学生信息,返回5.2,本次课主要内容,5.3 SQL数据操作功能(记录级)(插入、更新、删除记录)5.4.1 简单查询,作 业:实验书:73页【实验内容】1.简单查询 76页习题 一、13上机实验:网络学习平台上第五章 用SQL修改和删除记录、进行简单查询,5.3 数据操作功能,5.3.1 增加(insert),5.3.2 删除(delete),5.3.3 修改(update),回目录,BROWSE也可以完成这些功能,重点 INSERT语句 UPDATE语句 DELETE语句难点 数组的理解 INSERT语句的第二种格式的应用,重点、难点,5.3.1 插入记录,【格式

19、1】insert into(,)values(,)【功能】向into短语指定的表尾插入一条新记录,其值为values后面表达式的值。,5.3.1 插入记录 语法格式1 功能,例1.向学生信息表中插入一条记录记录值完整insert into 学生信息 values(00000001,张三,;男,1982-08-09,580,.T.,二级)省略字段名时,所有字段值都不能缺少,且和表中字段的顺序一一对应例2.向学生信息表中插入一条记录记录值不完整insert into 学生信息(学号,姓名,入学成绩);values(00000002,李四,560)只插入记录的部分值,必须给出相应的字段名,5.3.1

20、 插入记录 语法格式1 eg,【语法格式2】insert into from array【功能】向into短语指定的表尾插入一条新记录或多条新记录,记录的值来源于数组。,5.3.1 插入记录 语法格式2,当数组为一维:表示插入一条记录当数组为二维:表示插入多条记录,例1.定义数组,并给数组赋值,然后向学生信息表中插入记录,记录的值来源于数组。DIMENSION X(5)X(1)=00000004X(2)=刘柳X(3)=女X(4)=1980-6-7 X(5)=560INSERT INTO 学生信息 FROM ARRAY X,5.3.1 插入记录 语法格式2 eg,插入一条记录,记录的前5个字段的

21、值是数组的5个元素的值,其他字段值为空(无论是否设置了默认值),利用数组插入多条记录,为了演示,我们手上只有学生信息.dbf表,为了不破坏原始表,将其复制为xs0.dbfSele*from 学生信息 into table xs0 再复制一份为xs1.dbf,并将xs1中的学号所有”0”开头的学号,变成”1”Sele*from 学生信息 into table xs1Update xs1 set 学号=“1”+subs(学号,2)Browse我们的目的是将XS1.dbf追加到xs0.dbf中,操作如下:第1步:将xs1.dbf 送入数组aa中Select*from xs1 into array a

22、a第2步:将aa 数组内容追加到xs0.dbf中Insert into xs0 FROM ARRAY aa第3步:检查效果:Close allUse xs0Browse,回5.3,5.3.2 删除记录,【语法格式】delete from where【功能】逻辑删除指定表中的记录【友情提示】where子句缺省,删除所有记录;否则只删除满足条件的记录,且条件中可以嵌套一层子查询;本命令是逻辑删除,物理删除需要使用pack命令;恢复需要使用recall命令。一条命令只能删除一个表的数据。,5.3.2 删除记录 语法格式,例1.逻辑删除学生信息表中的所有男生记录delete from 学生信息 whe

23、re 性别=男例2.逻辑删除学生信息表中的所有记录delete from 学生信息例3.逻辑删除没有通过计算机等级考试和四级的学生delete from 学生信息;where isnull(计算机等级);and!四级通过否,5.3.2 删除记录 eg,例4.逻辑删除成绩在530分以上的学生,delete from 学生信息;where 入学成绩530,5.3.2 删除记录 eg,例5.逻辑删除名字以“一”结尾的学生信息,delete from 学生信息;where right(alltrim(姓名),2)=一,例6.逻辑删除“张晓”所修课程的成绩,例7.逻辑删除“程序设计”课程的所有成绩,5.

24、3.2 删除记录 eg,delete from 成绩信息;where 学号 in(;select 学号 from 学生信息;where 姓名=张晓),delete from 成绩信息;where 课程号 in(;select 课程号 from 课程信息;where 课程名=程序设计),暂略,回5.3,5.3.3 更新记录,【语法格式】update set=,=where【功能】修改指定表中指定字段的记录值【注意】如果where子句缺省,更新所有记录指定字段的值;否则只更新满足条件的记录的值,条件中可以嵌套一层子查询。一条命令只能修改一个表的记录,5.3.3 更新记录 语法格式,例1.将所有课程

25、的成绩10分update 成绩信息 set 成绩=成绩+10例2.将“体育”课程的学分改为3分update 课程信息 set 学分=3,;学时=学分*18 where 课程名=“体育”,思考:能否将更新语句中的学时和学分调换位置?,5.3.3 更新记录 eg,例3.将陶红莉的计算机等级考试设置为不确定update 学生信息 set 计算机等级=null;where 姓名=陶红莉,1.计算每个学生的总分与平均分2.性别字段为字符类型,宽度为2,将性别值为”1”,更换为”男”,性别值为”0”,更换为”女”.请问需要几条命令来完成?VFP本身也有一条更新字段值命令,格式如下:,5.3.3 更新记录

26、eg,例4.分别将通过四级考试学生的“02”号课程和通过计算机等级考试的学生的“01”号成绩添加10分 update 成绩信息 set 成绩=成绩+10;where 学号 in(;select 学号 from 学生信息;where 四级通过否)and 课程号=02,update 成绩信息 set 成绩=成绩+10;where 学号 in(;select 学号 from 学生信息;where!isnull(计算机等级)and 课程号=01,【语法格式】REPLACE ALL FieldNmea1 WITH Expression1,FieldNmea2 WITH Expression2FOR Ex

27、pression【功能】对当前表用表达式i的值替换字段i的值,【说明】省略ALL同时省略FOR短语,仅对当前记录字段的值进行更新,否则对所有记录对应的字段进行更新.使用FOR短语,对满足条件的记录进行更新.使用此命令前,必须打开对应表文件.Use stuReplace all 总分 with 0,平均分 with 0Replace 性别 with“1”for 性别=“男”Replace 性别 with“0”for 性别=“女”,一条命令可以吗,Replace 与update区别,回5.3,数组的概念、定义与赋值,1.数组概念的引入在程序开发过程中,经常要对大量相关联的数据进行处理。例如:100

28、个数据需要保存在内存变量之中,则要100个变量名,还需要100个赋值语句。若像数学中对向量和矩阵的表示方法:用一个名字表示一组相关联的数据,用括起来的顺序号表示该数组中某个元素,来提供一批相关联的内存变量。,数组的概念的引入,数组的概念的引入,例如:100个学生的数学成绩需要保存在内存变量之中,可将这100个数据看成一个一维数组并把math作为一维数组的数组名,使用math 1,math2,math100来“形成”100个变量,并分别保存100人的数学成绩。,数组的概念的引入,mathi,数组元素是通过数组名及相应的下标来访问一维数组的表示方法:,必须加中括号,必须加圆括号,数组名,下标,数组

29、名,下标,下标表示数组中第i个元素,math(i),下标下限默认从1开始,一维数组的一个下标,二维数组的表示方法:,Ai,j,数组名,第i行,第j列,二维数组的两个下标,2.数组的定义DIMENSION|DECLARE(,),(,)【功能】定义一个或多个一维或二维数组,且给数组的各元素初值设为.F.,数组的定义,举例定义A与B两个数组,其中A为一维数组,有3个元素,B为二维数组,有23个元素:dimension A3,B2,3 1.一维数组A含3个元素:A1、A2、A3 2.二维数组B含6个元素:B1,1、B1,2、B1,3、B2,1、B2,2、B2,3 3.两个数组中所有元素的初值都为.F.

30、,3.数组的赋值,数组的赋值,数组整体赋值(赋值给数组的所有元素),各个数组元素单独赋值,(1)数组整体赋值【语法格式1】store表达式to数组名【语法格式2】数组名=表达式【功能】计算表达式的值,将其值赋给数组中每个元素,数组整体赋值,例:建立A、B两个一维数组,它们各由4个元素组成,并对该数组所有元素赋值为1DIMENSION A4,B4STORE 1 TO AB=A*将A数组第一个元素值赋值给B数组各元素*而不是将A的各个元素分别赋值给B数组?A1,A2,A3,A4?B1,B2,B3,B4 B=1?B1,B2,B3,B4,数组整体赋值 eg,(2)对数组中各元素单独赋值由于数组元素可通

31、过下标引用,可用各种赋值语句对其赋值。例:设S是一个含有4个元素的数组,分别对各个数组元素赋值DIMENSION S4S1=“王平”S2=“男”S3=24S4=.F.,对数组中各元素单独赋值,【语法格式2】insert into from array【功能】向into短语指定的表尾插入一条新记录,记录的值来源于数组。,5.3.1 插入记录 语法格式2,例1.定义数组,并给数组赋值,然后向学生信息表中插入记录,记录的值来源于数组。DIMENSION X(5)X(1)=00000004X(2)=刘柳X(3)=女X(4)=1980-6-7 X(5)=560INSERT INTO 学生信息 FROM

32、ARRAY X,5.3.1 插入记录 语法格式2 eg,插入一条记录,记录的前5个字段的值是数组的5个元素的值,其他字段值为空(无论是否设置了默认值),5.4 查询功能,重点、难点,重点带特殊运算符的条件查询分组与计算查询连接查询排序难点对特殊运算符的理解和应用分组的含义和分组计算查询使用谓词的嵌套查询连接查询,完整语法简介,SQL查询语句的完整语法格式:select all|distinct.as,.as from!as inner|leftouter|right outer|fullouterjoin!as on into|to file additive|to printerprompt

33、|to screenwhere and and|or and|or group by,having union all order by asc|desc,asc|desctop percent,从指定的表中选取需要查询输出的字段,与其他表进行连接,输出重定向,设置查询条件,设置分组和分组条件,集合并运算,排序,SELECT语句的基本结构,SELECT FROM 字段名表指定查询输出的内容表名为查询的数据表举例:SELE 学号,姓名 FROM 学生信息,5.4 查询功能 select的基本结构,1 简单查询,2带特殊运算符的条件查询,3 简单的计算查询,4 分组与计算查询,5 简单的嵌套查询,

34、6 使用谓词的嵌套查询(自学),7 连接查询,8 排序,9 集合的并运算,10 查询结果的重定向输出,主 要 内 容,1 简单查询,【语法格式】SELECT ALL|DISTINCT AS,AS FROM WHERE 从指定的一个或多个数据表中查询满足条件的记录,并显示这些记录的全部或部分字段,5.4 查询功能简单查询 语法格式,指定查询结果输出的字段,所有该字段的值,保证查询结果的唯一性,用指定的内容显示字段名,说明要查询的数据来源,可以是多个表,说明查询条件,例2.显示所有学生信息的学号和姓名SELECT 学号,姓名 FROM 学生信息,例1.查询学生信息表中所有记录SELECT*FROM

35、 学生信息,例3.显示至少选修了一门课程的学生学号SELECT 学号 FROM 成绩信息 SELECT ALL 学号 FROM 成绩信息,在查询结果中由于有些学生选修了多门课,学号有重复值,去掉重复行,SELECT DISTINCT 学号 FROM 成绩信息,5.4 查询功能简单查询 eg,例4.输出学生信息中所有学生的姓名和截至统计时的年龄分析:学生表中只有出生年月,没有年龄,因此输出的年龄要进行计算SELECT 姓名,INT(DATE()-出生日期)/365);AS 年龄 FROM 学生信息思考与以下语句的区别?SELECT 姓名,YEAR(DATE()-YEAR(出生日期);AS 年龄

36、FROM 学生信息,显示输出的字段名,对学生信息表没有任何影响,5.4 查询功能简单查询 eg,例5.显示入学成绩在560分以上的学生姓名及入学成绩SELECT 姓名,入学成绩 FROM 学生信息;WHERE 入学成绩=560,5.4 查询功能简单查询 eg,【语法小结】(1)select查询的结果生成一个只读的临时表,默认输出到屏幕,以浏览方式显示;(2)指定需要输出的列,该项可以是字段名,也可以是函数或表达式。当需要输出所有列时,可以用一个“*”表示,否则用逗号分隔需要输出的字段名。,返回5.4,5.4 查询功能简单查询 语法小结,补充函数:INLIST(),INLIST(E1,E2,E3

37、.)功能:测试E1是否在E2,E3.列表中,是,函数值为真,否则为假举例:Inlist(12,34,12,56,72,12,10)函数值为.T.Inlist(12,34,56,72,10)函数值为.F.,2 带特殊运算符的条件查询,1.BETWEENAND运算符 NOT BETWEEN AND【功能】用于检测字段的值是否介于指定的范围内,等价于:字段名=初值 AND 字段名=终值或函数BETWEEN(字段名,初值,终值)【函数】字段名还可以是表达式,5.4 查询功能带特殊运算符的条件查询 betweenand运算符,例1.检索入学成绩在510540分范围内所有学生的信息,5.4 查询功能带特殊

38、运算符的条件查询 betweenand运算符 eg,SELECT*FROM 学生信息;WHERE 入学成绩 BETWEEN 510 AND 540,SELECT*FROM 学生信息;WHERE 入学成绩=510 AND 入学成绩=540,SELECT*FROM 学生信息;WHERE BETWEEN(入学成绩,510,540),例2.检索年龄在1725之间的学生姓名,性别,出生年月,5.4 查询功能带特殊运算符的条件查询 betweenand运算符 eg,SELECT 姓名,性别,出生日期 FROM 学生信息;WHERE YEAR(DATE()-YEAR(出生日期);BETWEEN 17 AND

39、 25SELECT 姓名,性别,出生日期 FROM 学生信息;WHERE YEAR(DATE()-YEAR(出生日期)=17;AND YEAR(DATE()-YEAR(出生年月)=25SELECT 姓名,性别,出生日期 FROM 学生信息;WHERE BETWEEN(YEAR(DATE()-YEAR(出生日期),17,25),2.in 运算符NOT IN(,|)【功能】检测字段的值是否属于表达式集合或子查询字段名处可以是字段名或表达式in表示的取值范围,是用逗号分隔的若干个值,它表示的取值范围是离散的,与函数inlist(,)有类似的功能若是子查询,子查询必须返回一个确定的字段值,5.4 查询

40、功能带特殊运算符的条件查询 in运算符,例1.检索入学成绩是520和540分的所有学生的信息SELECT*FROM 学生信息;WHERE 入学成绩 IN(520,540)SELECT*FROM 学生信息;WHERE INLIST(入学成绩,520,540),5.4 查询功能带特殊运算符的条件查询 in运算符 eg,例2.检索至少选修了一门课程的所有学生信息SELECT*FROM 学生信息 WHERE 学号 IN;(SELECT DISTINCT 学号 FROM 成绩信息),3.LIKE运算符 LIKE 检测字段的值是否与字符表达式匹配字段名是字符型字段或表达式字符表达式中可以使用通配符%:匹配

41、零个或多个字符_(下划线):匹配一个字符,一个汉字或一个ASCII码,5.4 查询功能带特殊运算符的条件查询 like运算符,5.4 查询功能带特殊运算符的条件查询 like运算符 eg,例1.检索所有张姓同学的信息,SELECT*FROM 学生信息 WHERE 姓名 LIKE 张%,SELECT*FROM 学生信息 WHERE 姓名=张,SELECT*FROM 学生信息 WHERE LEFT(姓名,2)=张,SELECT*FROM 学生信息;WHERE SUBSTR(姓名,1,2)=张,SELECT*FROM 学生信息 WHERE AT(张,姓名)=1,select*from 学生 wher

42、e 姓名=张;and len(alltrim(姓名)=4,例2.检索所有姓名中包含张的信息,select*from 学生信息 where 姓名 like%张%,select*from 学生信息 where at(张,姓名)0,例3.检索所有张姓且姓名长度为两个字的信息,select*from 学生信息 where 姓名 like 张_,5.4 查询功能带特殊运算符的条件查询 like运算符 eg,姓名字段定义是8个宽度,不足8个宽度,后面补空格,4.IS NULL运算符 IS NOT NULL检测指定字段的值是否NULL,如果字段值为NULL,返回.T.,否则返回.F.等价于!ISNULL(字

43、段名)在检测空值时不能写成:字段名=NULL或字段名!=NULL,5.4 查询功能带特殊运算符的条件查询 isnull运算符,例1.检索所有已经通过计算机等级考试的学生的学号、姓名和计算机等级考试信息select 学号,姓名,计算机等级 from 学生信息;where 计算机等级 is not null,不可写成:计算机等级!=null,select 学号,姓名,计算机等级 from 学生信息;where!isnull(计算机等级),5.4 查询功能带特殊运算符的条件查询 isnull运算符 eg,【小结】BETWEEN AND:在初值与终值界定的一个闭区间内,可用BETWEEN函数代替IN运

44、算对象是离散的数据,可用INLIST函数代替;若包含的表达式只有一项时,可以用关系运算符“=”代替;表达式有多项时,可以用逻辑运算符OR连接多个关系运算符”=”LIKE运算符只适合于比较字符串IS NULL对允许为NULL的字段用才有实际意义,返回,5.4 查询功能带特殊运算符的条件查询 小结,3.简单的计算查询SQL select命令支持以下计算函数:,函 数 功 能count()对指定字段的值计算个数count(*)计算记录个数sum()计算指定的数值列的和avg()计算指定的数值列的平均值max()计算指定的字符、日期或数 值列中的最大值min()计算指定的字符、日期或数 值列中的最小值

45、,计算函数常用的场合1.查询输出结果中;2.having子句中构造分组筛选条件,死记:不能用在WHERE的后面,例1.在学生信息表中统计学生人数SELE COUNT(*)AS 人数 FROM 学生信息 例2.统计已开出的课程门数SELE COUNT(DIST 课程号)FROM 成绩信息 例3.求入学成绩总和SELE SUM(入学成绩)AS 入学成绩总和;FROM 学生信息 例4.求“02”号课程的平均成绩SELE AVG(成绩)FROM 成绩信息;WHERE 课程号=02,5.4 查询功能简单的计算查询 eg,例5.求“02”号课程的最高分SELECT MAX(成绩)FROM 成绩信息;WHE

46、RE 课程号=02,5.4 查询功能简单的计算查询 eg,一般情况下:简单计算查询的输出项只包含计算函数,其他的数据项没有意义。若包含其他数据项,其他数据项的值是最后一条记录的值,eg1:查询入学成绩最低的学生学号、姓名和入学成绩SELECT 学号,姓名,MIN(入学成绩)FROM 学生信息问题:查询到的结果是最低分以及最后一条记录的学号和姓名,不一定是这个同学的成绩,5.4 查询功能简单的计算查询 思考题,返回,SELE 学号,姓名,入学成绩 FROM 学生信息;WHERE 入学成绩=;(SELE MIN(入学成绩)FROM 学生信息),子查询:查最低成绩,例2.查询女生的入学成绩最低的学生

47、学号、姓名和入学成绩,SELE 学号,姓名,入学成绩 FROM 学生信息;WHERE 性别=女 AND 入学成绩=;(SELECT MIN(入学成绩)FROM 学生信息;WHERE 性别=女),5.4 查询功能简单的计算查询 思考题,SELECT 学号,姓名,MIN(入学成绩)FROM 学生信息 WHERE 性别=女,分析,第3题,子查询:查女生的最低成绩,其他数据项,3.查询每个学生三门课的平均分,5.4 查询功能简单的计算查询,select*,(英语+语文+数学)/3;as 平均成绩 from 成绩,*使得每条记录都可以参加查询和计算,返回5.4,4.分组与计算查询,【语法格式】GROUP

48、 BY,HAVING【说明】:分组的依据。可以是字段名,也可以是SQL函数表达式。HAVING:对分组后的结果进行筛选。总是跟在GROUP BY的后面,不能单独使用计算查询是对整个表的查询,一次查询只能得出一个计算结果。然而,利用分组计算查询则可以通过一次查询获得一组结果,实现分组计算。,5.4 查询功能分组与计算查询 语法格式,【注意】group by子句允许按一个或多个字段分组。若选择了group by子句,则select语句的输出只有分组关键字和计算函数有意义。(3)having对分组后的数据进行筛选,where对所有记录进行筛选。(4)在分组查询中若既有where,又用了having,

49、执行的顺序是先用where对所有记录进行筛选,然后对筛选后的记录按group by指定的分组关键字分组,最后用having筛选分组后的数据。(5)通常having中以计算函数作为条件。,5.4 查询功能分组与计算查询 语法格式 注意,例1.统计男、女生入学成绩的最高分SELECT 性别,MAX(入学成绩)FROM 学生信息;GROUP BY 性别,5.4 查询功能分组与计算查询 语法格式 注意,SELECT 姓名,性别,MAX(入学成绩);FROM 学生信息 GROUP BY 性别,命令执行结果如图,一般情况下:分组计算查询的输出项应只包含分组关键字和计算函数,其他的数据没有意义。若包含其他数

50、据项,其他数据项的值是满足查询条件的每一个分组的最后一条记录的值。,分析以下语句的结果:,满足条件的每个分组的最后一条记录的值,5.4 查询功能分组与计算查询 语法格式 注意,例2.统计各门课程的平均成绩、最高分、最低分和选课人数 SELECT 课程号,;AVG(成绩)AS 平均成绩,;MAX(成绩)AS 最高分,;MIN(成绩)AS 最低分,;COUNT(学号)AS 人数;FROM 成绩信息 GROUP BY 课程号,5.4 查询功能分组与计算查询 eg,例3.对选修课程多于两门的学生分别统计选修课程的门数SELECT 学号,COUNT(*)AS 选课门数;FROM 成绩信息;GROUP B

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号