VFP课件(5-关系数据库标准语言SQL)

上传人:飞*** 文档编号:51723285 上传时间:2018-08-16 格式:PPT 页数:95 大小:334.50KB
返回 下载 相关 举报
VFP课件(5-关系数据库标准语言SQL)_第1页
第1页 / 共95页
VFP课件(5-关系数据库标准语言SQL)_第2页
第2页 / 共95页
VFP课件(5-关系数据库标准语言SQL)_第3页
第3页 / 共95页
VFP课件(5-关系数据库标准语言SQL)_第4页
第4页 / 共95页
VFP课件(5-关系数据库标准语言SQL)_第5页
第5页 / 共95页
点击查看更多>>
资源描述

《VFP课件(5-关系数据库标准语言SQL)》由会员分享,可在线阅读,更多相关《VFP课件(5-关系数据库标准语言SQL)(95页珍藏版)》请在金锄头文库上搜索。

1、第5章 关系数据库标准语言SQL5.1 SQL概述lSQL(Structured Query Language)是结 构化查询语言的缩写,是关系数据库的标准 语言。首先由美国ANSI(美国国家标准协会) 提出,后被ISO采纳为国际标准。现在所有 的关系数据库管理系统都支持SQL。SQL包 含数据查询、数据定义、数据操纵和数据控 制四大功能部分。SQL语言的特点lSQL是一种一体化的语言。它包括了数据定义、数 据查询、数据操纵和数据控制等方面的功能,它可 以完成数据库活动中的全部工作。lSQL是一种高度非过程化的语言。用户不必告诉计 算机怎么去做,只需要告诉计算机做什么即可。lSQL语言非常简洁

2、,易学易用。lSQL可以直接以命令方式交互使用,也可以嵌入到 程序设计语言中以程序方式使用。SQL命令动词l数据查询:SELECT(选择)l数据定义:CREATE(创建)、DROP(放弃)、ALTER(更 改)l数据操纵:INSERT(插入)、UPDATE(更新)、DELETE (删除)l 数据控制:GRANT(同意)、REVOKE(取消)注:大多数数据库都支持 SQL 语言。VFP也支持。但是具 有自己的特点。如:由于VFP在数据安全性方面的欠缺, 不支持SQL的数据控制功能。5.2 查询功能lSQL的核心是查询, SQL的查询命令也称 SELECT命令,它提供了简单而又丰富的SELECT

3、数据查询语句。l它的基本形式由SELECT-FROM-WHERE 查 询块组成,可以进行多个查询的嵌套。SQL SELECT命令的语法格式l详见SQL SELECT命令的语法格式.docl从SELECT命令格式来看似乎非常复杂,实 际上只要理解了命令中各个短语的含义, SQL SELECT还是很容易掌握的。l在Visual Foxpro中一条语句结束时按回车键 ,在整个语句 结束前或要连续写,不能回车 。lSELECT查询命令的使用非常灵活,用它可 以构造各种各样的查询。5.2.1简单查询l简单查询是基于一个表的查询,也称为单表查询 。l由SELECT和FROM短语构成无条件查询,或由 SEL

4、ECT、 FROM和WHERE短语构成条件查询。例1:从学生表(xsb)中检索所有学生的学号(xh), 姓名(xm)和高考分数(gkfs)值。 解:SELECT xh, xm, gkfs FROM xsb 例2:查询课程表(kcb)中的所有记录。SELECT * FROM kcb 例3:从xsb表中检索高考分数大于630分的学生姓名SELE xm FROM xsb WHERE gkfs630例4:从xsb表中检索高考分数大于630分的学生所在的专业sele dist zy from xsb where gkfs630例5:从xsb表中检索专业为“信息管理”或“市场营销”且高考分数大于630分的

5、学生学号sele xh from xsb where gkfs630 and (zy=市场营销 or zy=信 息管理)5.2.2 简单的连接查询l连接查询是一类基于多个表的查询。一个数 据库中的多个表之间一般都存在某种内在联 系,它们共同提供有用的信息。l如果一个查询同时涉及两个以上的表,则称 为连接查询。例6找出成绩大于85分的学号(cjb表)和课程名( kcb表)。sele xh,kcm from cjb,kcb where cj85 and kcb.kch=cjb.kch注:如果在检索命令的FROM 之后有两个关系,那么这两个关系 之间肯定有一种联系,否则无法构成检索表达式;在连接中如

6、 果需要查询不同表中的相同字段名时,必须用关系前缀指明字 段所属的表,即.;WHERE 短语后面也用表 名做前缀,但通常是在FROM短语后为表名定义别名,这样可 以方便输入。5.2.3嵌套查询l嵌套查询是基于多个关系的查询,这类查询 所要求的结果出自一个关系,但相关的条件 却涉及多个关系。lVisual FoxPro只支持两层查询,即内层查 询块和外层查询块,不支持SQL的多层嵌套 查询。例7哪些城市至少有一个仓库的职工工资为1250元? 解:sele 城市 from ck where 仓库号 in;(sele 仓库号 from zg where 工资=1250)注:可以看出上述查询中有两个S

7、ELECT查询块,即内层查询和外层 查询。在嵌套查询中,只能对外层查询结果排序,不能对内层查 询结果排序。例8l查询所有职工工资都多于1200元的仓库信息。 解:sele * from ck where 仓库号 not in;(sele 仓库号 from zg where 工资=1230 and 工资ASCDESC, ASCDESC注:如果不使用ORDER BY指定查询结果的排列顺序,则查询结 果不排序。例13l按zg表中的工资值升序查找出所有职工信息 解:sele * from zg order by 工资若按降序排列,应为: sele * from zg order by 工资 desc例

8、14l将zg表中的值排序,先按仓库号排序,再按 工资排序并查询zg表中信息 解:sele * from zg order by 仓库号,工资注:ORDER BY是对最终结果进行排序,不能 在子查询中使用。5.2.6简单的计算查询lSQL不仅可以查询表中数据,而且还可以计算表中的数 据。下列字段函数可以与选定项一起使用。选定项可以 是一个字段或包含字段的表达式。lCOUNT计数lSUM求和lAVG计算平均值lMAX求最大值lMIN求最小值例15l查询gys表中所在地的数目 解:sele count(dist 地址) from gys 试一下: sele count(dist 地址) as 数目

9、from gys若查询gys表中的记录数,应使用命令 sele count(*) from gys例16l求zg表中支付的工资总数 sele sum(工资) from zg例17l求北京和西安的职工的所有工资总和 解:sele sum(工资) from zg where 仓库号 in(sele 仓库号 from ck where 城市 in(“北京“,“西安“)或:sele sum(工资) from zg where 仓库号 in(sele 仓库号 from ck where 城市=“北京“ or 城市=“西安“)例18l求zg表中的工资都大于1200元的职工所在仓 库的平均面积 解:sele

10、 avg(面积) from ck where 仓库号 not in(sele 仓库号 from zg where 工资 , HAVING l可以按一列或多列分组,还可以用HAVING进一步 限定分组的条件。例20l求每个仓库职工的平均工资 解:Sele 仓库号,avg(工资) from zg group by 仓库号求每门课的平均成绩 解:sele kcm,avg(cj) from cjb,kcb where cjb.kch=kcb.kch group by kcm 或:sele kcm,avg(cj) from cjb,kcb where cjb.kch=kcb.kch group by c

11、jb.kch例21l求至少有3个职工的每个仓库的平均工资。 解:sele 仓库号,avg(工资) from zg group by 仓库号 having count(仓库号)=3sele 仓库号,avg(工资),count(*) from zg group by 仓库号 having count(*)=3例22l求至少有3个学生的每门课的平均成绩 解:sele kcm,avg(cj) as 平均成绩 from kcb,cjb where kcb.kch=cjb.kch group by kcm having count(xh)=3HAVING子句总是跟在GROUP BY 子句后面,不可以 单独

12、使用。HAVING与WHERE短语一起使用时,首 先由WHERE限定满足筛选条件的记录,然后再 由HAVING子句来限定分组。5.2.8利用空值查询lSQL支持NULL,所以也可以利用空值进行查询。 NULL值具有以下特点:l等价于没有任何值l与0、空格和空字符串不同l排序时具有最大的优先权l可以用于计算和大多数的函数中lNULL值不改变变量或字段的数据类型lNULL值会影响命令、函数、表达式的执行例23l查询已经确定供应商号的dgd信息 解:sele * from dgd where 供货商号 is not null查询空值时使用IS NULL, =NULL是无效的。因为 空值不是一个确定的

13、值,所以不能用“=”进行比 较。5.2.9别名与自连接查询l在连接操作中,经常使用关系名做前缀,有 时显得很麻烦。因此,SQL允许在FROM短 语中为关系名定义别名。l格式:或 as 例24SELECT 供应商名 FROM gys,dgd,zg,ck; WHERE 地址=北京 AND 城市=北京; AND gys.供应商号=dgd.供货商号; AND dgd.职工号=zg.职工号; AND zg.仓库号=ck.仓库号l使用别名后: SELECT 供应商名 FROM gys A,dgd B,zg C,ck D; WHERE 地址=北京 AND 城市=北京; AND A.供应商号=B.供货商号;

14、AND B.职工号=C.职工号; AND C.仓库号=D.仓库号l别名并不是必需的,但在关系的自连接操作 中,别名是必不可少的。SQL不仅可以对多 个表进行连接操作,还可以将同一关系与其 自身进行连接,这种连接就称为自连接。可 以进行自连接的关系,实际上它们之间存在 着一种特殊的递归关系。例25l有一个雇员关系表,其结构和数据如下:雇员号雇员姓名领导E3赵王 E4张三E3E6李四E3E8王五E6lSELECT S.雇员姓名,领导,E.雇员姓名 FROM 雇员 S, 雇员 E WHERE S.雇员号=E.领导结果是:雇员姓名_aexp_2雇员姓名_b赵王领导张三赵王领导李四李四领导王五5.2.1

15、0内外层相互关联的嵌套查询l前面介绍的嵌套查询主要是外层依赖于内层 查询,而内层查询与外层查询无关。l实际上也需要内外层相关的查询,这时内层 查询的条件需要外层查询提供值,而外层查 询需要内层查询的结果。例26l列出每个职工办理的具有最高总金额的订购单信息 解:sele * from dgd out where 总金额=(sele max(总金额) from dgd inner1 where out.职工号=inner1.职工号) 或: sele out.* from dgd out where 总金额=(sele max(总金额) from dgd inner1 where out.职工号=

16、inner1.职工号) 或:sele out.职工号,out.供应商号,out.订购单号,out.订购日期,out.总 金额 from dgd out where 总金额=(sele max(总金额) from dgd inner1 where out.职工号=inner1.职工号) 或:sele max(总金额),职工号,订购单号,总金额,订购日期,供货商号 from dgd group by 职工号l在上述查询中,内层和外层查询使用的是同 一个关系,分别命名为inner1和out。外层查 询每个元组的职工号给内层查询使用,内层 查询利用职工号值确定该职工办理的最高总 金额的订购单的总金额,最后外层查询根据 同一元组的总金额与该总金额比较,若相等 则满足条件;若不相等,则不满足条件。5.2.11使用量词和谓词的查询l前面已经使用过和嵌套查询或子查询有关的IN 和NOT IN运算符,除此之外还有两类和子查询 有关的运算符,它们有以下两种

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 其它文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号