第四章 数据查询课件.ppt

上传人:小飞机 文档编号:1548504 上传时间:2022-12-04 格式:PPT 页数:46 大小:264KB
返回 下载 相关 举报
第四章 数据查询课件.ppt_第1页
第1页 / 共46页
第四章 数据查询课件.ppt_第2页
第2页 / 共46页
第四章 数据查询课件.ppt_第3页
第3页 / 共46页
第四章 数据查询课件.ppt_第4页
第4页 / 共46页
第四章 数据查询课件.ppt_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《第四章 数据查询课件.ppt》由会员分享,可在线阅读,更多相关《第四章 数据查询课件.ppt(46页珍藏版)》请在三一办公上搜索。

1、第五章 关系数据库标准语言SQL,一、SQL概述,结构化查询语言全称:Structured Query Language内容:数据定义、数据操纵、数据查询和数据控制。特点:简结 一体化语言高度非过程化 命令交互使用,SQL 命令动词表,查询技巧,首先读题义,从中抽出关键字打开查询的表、先浏览,从中找线索从题目中提取所要信息,作为条件对所得的条件进行有效的组合完善查询,SQL中的数据查询语句,数据库中的数据很多时侯是为了查询的,因此,数据查是数据库的核心操作。而在SQL语言中,查询语言中有一条查询命令,即SELECT语句。4.5.1 基本查询语句【格式】SELECT ALL | DISTINCT

2、 FROM 【功能】无条件查询。【说明】ALL: 表示显示全部查询记录,包括重复记录。 DISTINCT: 表示显示无重复结果的记录。,简单查询,例5.1 从职工关系中检索所有工资值分析:关系指二维表,工资是要显示的结果字 段,没有条件。方法:把信息插入SQL语句。结果表示: SELE 工资 FROM 职工语句说明: SELECT: 字段名(或查询的结果) FROM :来源于哪张表。 DISTINCT:是否要去掉等值的字段。,例5.1 检索仓库关系中的所有元组 SELE * FROM 仓库*:是通配符,表示所仓库表的中字段.此题中可以:SELE 仓库号,城市,面积 FROM 仓库例5.2 :检

3、索工资多于1230元的职工号 条件:工资多于1230 等价于工资1230 显示字段:职工号 来源表:职工表 SELE 职工号 FROM 职工 WHERE 工资1230,例:检索哪些仓库有工资多于1210元的职工分析:工资多于1210元等价于工资1210 仓库:是要显示的字段信息,用仓库号 来表示. SELE DIST 仓库号 FORM 职工 WHERE 工资1210 例:5.5给出在仓库“WH1”或“WH2”工作,并且工资少于1250元的职工号条件:(仓库号=“WH1” OR 仓库号=“WH2”)AND 工资1250 语句:SELE 职工号 FROM 职工 WHERE (仓库号=“WH1” O

4、R 仓库号=“WH2”)AND 工资1250,二、连接查询,【说明】在一个数据库中的多个表之间一般都存在着某些联系,在一个查询语句中同时涉及到两个或两个以上的表时,这种查询称之为连接查询(也称为多表查询)。在多表之间查询必须处理表与表之间的连接关系。 SELECT ALL | DISTINCT FROM ,表2. WHERE ,简单的联接查询,针对多张表,一张表的结果要依靠另一张表为条件,才能查出.把两张表联接起来,形成逻辑上的一张表.技巧:找两张表之间的公共字段及联接条件结构: SELE FROM 表1,表2 WHER AND 联接条件(或者两张表的公共字段) 联接条件:表名.字段名(或者表

5、的别名.字段名),例5.6 找出工资多于1230元的职工号和他们所在城市.注意:一张表查出不能完成,结果需要两张表,职工表只有职工号,而仓库表有中只有城市.他们的公共字段为仓库号. 联接条件:职工.仓库号=仓库.仓库号 一般条件:工资1230 两张表:职工,仓库 显示字段:职工号,城市 语句:SELE 职工号,城市 FROM 职工,仓库 WHERE (工资1230) AND (职工.仓库号=仓库.仓库号),例:找出工作在面积大于400的仓库的职工号以及这些职工工作所在的城市.分析条件:面积400 联接条件:(职工.仓库号=仓库.仓库号)查询涉及表:仓库,职工 查询结果字段:职工号,城市 SEL

6、E 职工号,城市 FROM 仓库,职工 WHERE (面积400) AND (职工.仓库号=仓库.仓库号),嵌套查询,外查询的条件来自内查询的结果在SQL语句中,一个SELECTFROMWHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询或子查询。IN:属于关系,返回多个值NOT IN :不属于关系联接条件:公共字段名 IN (SELE 公共字段名 相当于联接中条件 表1.公共字段名=表2.公共字段名,例题:,哪些城市至少有一个仓库的职工工资1250元?SELE 城市 FROM 仓库表 WHERE 仓库号 IN (SELE 仓

7、库号 FROM 职工 WHERE 工资=1250)IN:属于关系,返回多个值注意: 仓库号 IN (SELE 仓库号相当于连接的条件:仓库.仓库号=职工.仓库号,例:查询所有职工的工资都于1210元的仓库 的信息.SELE * FROM 仓库 WHERE 仓库号 NOTIN(SELE 仓库号 FROM 工资=1210)分析没有错,但实际错了。应该为SELE * FROM 仓库 WHERE 仓库号NOT IN(SELE 仓库号 FROM 工资WHERE 工资=1210)AND 仓库号 IN(SELE 仓库号 FROM 职工),例:5.10 找出和职工E4挣同样工资的所有职工.SELE 职工号 F

8、ROM 职工 WHERE 工资=(SELE 工资 FROM 职工 WHERE 职工号=“E4”)注意:= 与 IN 之间的关系,等号可以用IN 来替换,而IN不能用=替换 =:返回的值是一个具体的值 IN:返回的是多个值,四 几个特殊运算符,BETWEEN AND 两者之间LIKE:匹配或者含有!=:不等于注意:通配符( %和-)%代表多个字符,-单代表单个字符.而在我们的第三章用*代表多个,?代表单个,不能用(*和?)使用.SQL与VF的区别.,例:检索出工资在1220元到1240元范围的 职工信息. SELE * FROM 职工 WHERE 工资 BETWEEN 1220 AND 1240

9、 或者 SELE * FROM 职工 WHERE (工资=1210) AND (工资=1240) 例:从供应商关系中检索出全部公司的信息,不工厂或其它供应商的信息.SELE * FROM 供应商 WHERE LIKE”%公司”,例:找出不在北京的全部供应商信息.SELECT * FROM 供应商 WHERE 地址!=“北京” 或者SELE * FROM 供应商 WHERE NOT(地址=“北京”)注:地址!=“北京” 与NOT(地址=“北京”)等价只是两种不同的表达方式,五、排序,ORDER BY ASC/DESCASC升序,可以不用.DESC 降序例:按职工的工资值升序索出全部职工信息. S

10、ELE * FROM 职工 ORDER BY 工资 ASC,例、先按仓库号排序,再按工资排序并输 出全部职工信息。注:这句话可这样叙述,对职工表的仓库号进行排序,如果仓库号相同再按工资排序。SELE * FROM 职工 ORDER BY 仓库号 DESC,工资注:ORDE BY 不能用在子查询中,例:按职工的工资值升序检索出全部职工 信息。 SELE * FROM 职工 ORDER BY 工资 降序:在所面加 DESC 例:先按仓库号排序,再按工资排序并输 出全部职工信息。 对多个字段进行排序: SELE * FROM 职工ORDER BY 仓库号,工资,简单的计算查询,COUNT()- 计数

11、SUM()-求和AVG()-求平均值MAX()-求最大值MIN()-求最小值,查询产生新字段,查询中新字段:在查询的结果中多一个统计或计算的字段。定义格式:SELE SUM(工资) AS 总工资 FROM 职工例1:SELECT AVG(工资) AS 平均工资例2:SELECT COUNT(职工号)AS 职工个数,例:找出供应商所在地址的数目SELE COUNT(DIST 地址) FROM 供应商DIST 相同的地址例:求支付的工资总数SELE SUM(工资)FROM 职工例:求北京和上海的仓库职工的工资总和SELE SUM(工资)FROM 职工,仓库 WHERE (城市=“北京”OR城市=“

12、上海”)AND (职工.仓库号=仓库.仓库号)SELE SUM(工资) FROM 职工 WHERE 仓库号 IN (SELE 仓库号 FROM 仓库 WHERE 城市=“北京”OR城市=“上海”),例:求所有职工的工资都多于1210元的仓库的平均面积. SELE AVG(面积) AS 平均面积 FROM 仓 库 WHERE 仓库号 not IN (SELE 仓库号 FROM 职工 WHERE 工资=1210) and 仓库号 IN (SELE 仓库号 FROM 职工)例:求在WH2仓库工作的职工的最高工资值.SELE MAX(工资) FROM 职工 WHERE 仓库号=“WH2”,分组与计算查

13、询,结构:GROUP BY HAVING 什么时候使用分组:需要统计、计算每个仓库每个职工,每个学生等含有“每个” 提示信息需用。分组字段:如每个职工就是职工号,每个学生就是学生的学号限定条件:至少选修两门以课,至少两个职工,例:求每个仓库的职工的平均工资 GROUP BY 一般跟在WHERE后,如果没有就跟在FROM 之后SELE 仓库号,AVG(工资) FROM 职工 GROUP BY 仓库号例:求至少有两个职工的每个仓库的平均 工资。 SELE 仓库号,COUNT(*),AVG(工资)FROM 职工 GROUP BY 仓库号 HAVING COUNT(*)=2,八、利用空值查询,空值:指

14、不确定的值判断为不为空:IS NULL(空)IS NOT NULL例:找出尚未确定供应商的订购单。 SELE * FROM 订购单 WHERE 供应商号 IS NULL不能用 =NULL例:列出已经确定了供应商的订购单信息。 SELE * FROM 订购单 WHERE 订购信息 IS NOT NULL,九、别名和自联接查询,别名:别名不是必须的,但是在关系的自联接操作中,别名必不可少作用:一般用在多表查询或多字段查询上公共的字段:作为联接条件:别名1.字段名=别名2.字段名自联接:指同一关系中与其自身联接一张表使用两次时,区分两次的使用情况,例:根据雇员关系列出上一级经理及所领导的职工清单。S

15、ELE S.雇员名,“领导”,E.雇员姓名 FROM 雇员 S,雇员 E WHERE S.雇员号=E.经理常量:领导“,十、内外层相关嵌套查询,十、内外层相关嵌套查询,这张表查询的结果要依靠这张表的另一个查询条件而取得,采用自我嵌套的方法来实现。方法:嵌套条件为 别名1.公共字段=别名2.公共字段员工号相同进行比较。自嵌套和自联接的区别:自联接通过公共的记录来联接,自嵌套通过公共字段来联接,例:列出每个职工经手的具有最高总金额的订购单信息。SELE OUT.职工号,OUT.供应商号,OUT.订购日期,OUT.总金额 FROM 订购单 OUTWHERE 总金额=(SELE MAX(总金额) FR

16、OM 订购单 INNER1 WHERE OUT.职工号=INNER1.职工号),十一、使用量词查询,ANY、SOME:查询的结果一行为真则结果为真。ALL:子查询中所有行为为真查询的结果就为真NOT EXISTS:检查子查询中是否有结果返回。NOT EXISTS与NOT IN之间联系:可以相互转换,WHERE NOT EXISTS(SELECT * WHERE A.仓库号=B.仓库号等价于仓库号 NOT IN(SELECT 仓库号 区别:NOT EXISTS指是否存在一个返回结果,NOT IN 指具体的返回值。,检索那些仓库中还没有职工的仓库的信息。这里的查询是没有职工或不存在职工,所以可以使

17、用谓词NOT EXISTS:SELECT*FROM 仓库 WHERE NOT EXISTS; (SELECT*FROM 职工 WHERE 仓库号 = 仓库仓库号)注意:这里的内层查询引用了外层查询的表,只有这样使用谓词EXISTS或NOT EXISTS才有意义。所以这类查询也都是内、外层互相关嵌套查询。以上的查询等价于: SELECT*FROM 仓库 WHERE 仓库号 NOT IN; (SELECT 仓库号 FROM 职工),检索那些仓库中至少已经有一个职工的仓库的信息。SELECT * FROM 仓库 WHERE EXISTS; (SELECT * FROM 职工 WHERE 仓库号 =

18、仓库仓库号)它等价于:SELECT*FROM 仓库 WHERE 仓库号 IN(SELECT 仓库号 FROM 职工) 注意:NOT EXISTS 只是判断子查询中是否有或没有结果返回,它本身并没有任何运算或比较。,检索有职工的工资大于等于WH1仓库中任何一名职工工资的仓库号。 这个查询可以使用ANY或SOME量词。SELECT DISTINCT仓库号 FROM 职工 WHERE 工资 = ANY; (SELECT 工资 FROM 职工 WHERE 仓库号=“WH1”) 它等价于:SELECT DISTINCT仓库号 FROM 职工 WHERE 工资 = ; (SELECT MIN(工资)FRO

19、M 职工WHERE 仓库号=“WH1”),检索有职工的工资大于或等于WH1仓库中所有职工工资的仓库号。 这个查询使用ALL量词。SELECT DISTINCT仓库号 FROM 职工 WHERE 工资 =ALL (SELECT 工资 FROM 职工 WHERE 仓库号=“WH1”)它等价于:SELECT DISTINCT仓库号 FROM 职工 WHERE 工资 = ; (SELECT MAX(工资)FROM 职工WHERE 仓库号=“WH1”),十二、超联接查询,内联接格式:表1 INNER JOIN表2 on 联接条件满足条件:两张表都有的联接记录。左联接格式:表1 LEFT JOIN表2 O

20、N 联接条件满足条件:两张表都有的联接记录,且满足左表中(表1)的记录,右联接格式:表1 RIGHT JOIN 表2 ON 联接条件满足条件:两张表都有的联接记录,且满足右表中(表2)的记录全联接格式:表1 FULL JOIN 表2 ON 联接条件 满足条件:两张表都有的联接记录,且满足右表中(表1)和表2所有的记录,内部联接,即只有满足联接条件的记录才 出现在查询结果中。SELECT 仓库仓库号,城市,面积,职工号,工资;FROM 仓库(INNER) JOIN 职工; ON 仓库仓库号=职工仓库号 等价:SELECT 仓库仓库号,城市,面积,职工号,工资;FROM 仓库,职工 WHERE 仓

21、库仓库号=职工仓库号,左联接:即除满足联接条件的记录出现在查询结果中外,第一个表中不满足联接条件的记录也出现在查询结果中。SELECT 仓库仓库号,城市,面积,职工号,工资;FROM 仓库 LEFT JOIN 职工 ON 仓库.仓库号=职工.仓库号右联接:即除满足联接条件的记录出现在查询结果中外,第二个表中不满足联接条件的记录也出现在查询结果中。SELECT 仓库仓库号,城市,面积,职工号,工资;FROM 仓库 LEFT JOIN 职工 ON 仓库.仓库号=职工.仓库号,全联接:即除满足联接条件的记录出现在查询结果中外,两个表中不满足联接条件的记录也出现在查询结果中。SELECT 仓库仓库号,

22、城市,面积,职工号,工资;FROM 仓库 LEFT JOIN 职工 ON 仓库.仓库号=职工.仓库号注:JION 的位置和ON联接条件相反 SELECT 仓库仓库号,城市,面积,职工号,工资 FROM 供应商 JION 订购单 JION 职工 JION 仓库 ON 仓库.仓库号=职工.仓库号 ON 订购单.职工号=职工.职工号 ON 供应商号.供应商号=订购单.供应商号.,十三、集合的并运算,将两个SELE 的查询结果合并成一个查询结果,要求:相同的字段,值域,数据类型,取值范围.例:显示结果为北京和上的仓库信息:SELE * FROM 仓库 WHERE 城市=“北京”;UNION SELE * FROM 仓库 WHERE 城市=“上海”等价于: SELE * FROM 仓库 WHERE 城市=“北京” OR 城市=“上海”,十四 查询去向,浏览方式显示记录(一般就是浏览)将查询结果存放到数组中(INTO ARRA 数组名)将查询结果存放在临时文件中(INTO CURSOR TMP)将查询结果存放在永久的表中(INTO TABLE /DBF 表名)将查询结果存放在文本文件中(TO FILE 文本.TXT)将查询结果直接输出打印机中(TO PRINTER),

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号