数据查询课件_第1页
数据查询课件_第2页
数据查询课件_第3页
数据查询课件_第4页
数据查询课件_第5页
已阅读5页,还剩87页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章关系数据库标准语言SQL第五章关系数据库标准语言SQL1一、SQL概述结构化查询语言全称:StructuredQueryLanguage内容:数据定义、数据操纵、数据查询和数据控制。特点:简结一体化语言高度非过程化命令交互使用一、SQL概述结构化查询语言全称:StructuredQu2SQL命令动词表SQL功能命令动词数据查询SELECT数据定义CREATE、DROP、ALTER数据操纵INSERT、UPDATE、DELETE数据控制GRANT、REVOKESQL命令动词表SQL功能命令动词数据查询SELECT数3查询技巧首先读题义,从中抽出关键字打开查询的表、先浏览,从中找线索从题目中提取所要信息,作为条件对所得的条件进行有效的组合完善查询查询技巧首先读题义,从中抽出关键字4SQL中的数据查询语句数据库中的数据很多时侯是为了查询的,因此,数据查是数据库的核心操作。而在SQL语言中,查询语言中有一条查询命令,即SELECT语句。4.5.1基本查询语句【格式】SELECT[ALL|DISTINCT]<字段列表>FROM<表>【功能】无条件查询。【说明】ALL:表示显示全部查询记录,包括重复记录。

DISTINCT:表示显示无重复结果的记录。SQL中的数据查询语句数据库中的数据很多时侯是为了查询的,因5简单查询例5.1从职工关系中检索所有工资值分析:关系指二维表,工资是要显示的结果字段,没有条件。方法:把信息插入SQL语句。结果表示:SELE工资FROM职工语句说明:SELECT:字段名(或查询的结果)FROM:来源于哪张表。DISTINCT:是否要去掉等值的字段。简单查询例5.1从职工关系中检索所有工资值6例5.1检索仓库关系中的所有元组

SELE*FROM仓库*:是通配符,表示所仓库表的中字段.此题中可以:SELE仓库号,城市,面积FROM仓库例5.2:检索工资多于1230元的职工号条件:工资多于1230等价于工资>1230

显示字段:职工号

来源表:职工表

SELE职工号FROM职工WHERE工资>1230例5.1检索仓库关系中的所有元组7例:检索哪些仓库有工资多于1210元的职工分析:工资多于1210元等价于工资>1210

仓库:是要显示的字段信息,用仓库号来表示.

SELEDIST仓库号FORM职工WHERE工资>1210

例:5.5给出在仓库“WH1”或“WH2”工作,并且工资少于1250元的职工号条件:(仓库号=“WH1”OR仓库号=“WH2”)AND工资<1250

语句:SELE职工号FROM职工WHERE(仓库号=“WH1”OR仓库号=“WH2”)AND工资<1250

例:检索哪些仓库有工资多于1210元的职工8二、连接查询【说明】在一个数据库中的多个表之间一般都存在着某些联系,在一个查询语句中同时涉及到两个或两个以上的表时,这种查询称之为连接查询(也称为多表查询)。在多表之间查询必须处理表与表之间的连接关系。SELECT[ALL|DISTINCT]<字段列表>FROM<表1>[,表2…..]WHERE<条件表达式>二、连接查询【说明】在一个数据库中的多个表之间一般都存在着某9简单的联接查询针对多张表,一张表的结果要依靠另一张表为条件,才能查出.把两张表联接起来,形成逻辑上的一张表.技巧:找两张表之间的公共字段及联接条件结构:

SELE<字段>FROM表1,表2WHER<一般查条件>AND联接条件(或者两张表的公共字段)联接条件:表名.字段名(或者表的别名.字段名)简单的联接查询针对多张表,一张表的结果要依靠另一张表为条件,10例5.6找出工资多于1230元的职工号和他们所在城市.注意:一张表查出不能完成,结果需要两张表,职工表只有职工号,而仓库表有中只有城市.他们的公共字段为仓库号.

联接条件:职工.仓库号=仓库.仓库号

一般条件:工资>1230

两张表:职工,仓库

显示字段:职工号,城市

语句:SELE职工号,城市FROM职工,仓库

WHERE(工资>1230)AND(职工.仓库号=仓库.仓库号)例5.6找出工资多于1230元的职工号和他们所在城市.11例:找出工作在面积大于400的仓库的职工号以及这些职工工作所在的城市.分析条件:面积>400联接条件:(职工.仓库号=仓库.仓库号)查询涉及表:仓库,职工

查询结果字段:职工号,城市

SELE

职工号,城市

FROM

仓库,职工

WHERE

(面积>400)

AND

(职工.仓库号=仓库.仓库号)例:找出工作在面积大于400的仓库的职工号以及这些职工工作所12嵌套查询外查询的条件来自内查询的结果在SQL语句中,一个SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询或子查询。IN:属于关系,返回多个值NOTIN:不属于关系联接条件:公共字段名IN(SELE公共字段名

相当于联接中条件表1.公共字段名=表2.公共字段名嵌套查询外查询的条件来自内查询的结果13例题:哪些城市至少有一个仓库的职工工资1250元?SELE城市FROM仓库表WHERE仓库号IN(SELE仓库号FROM职工WHERE工资=1250)IN:属于关系,返回多个值注意:仓库号IN(SELE仓库号相当于连接的条件:仓库.仓库号=职工.仓库号例题:哪些城市至少有一个仓库的职工工资1250元?14例:查询所有职工的工资都于1210元的仓库的信息.SELE*FROM仓库WHERE仓库号NOTIN(SELE仓库号FROM工资<=1210)分析没有错,但实际错了。应该为SELE*FROM仓库WHERE仓库号NOTIN(SELE仓库号FROM工资WHERE工资<=1210)AND仓库号IN(SELE仓库号FROM职工)例:查询所有职工的工资都于1210元的仓库的信息.15例:5.10找出和职工E4挣同样工资的所有职工.SELE职工号FROM职工WHERE工资=(SELE工资FROM职工WHERE职工号=“E4”)注意:=与IN之间的关系,等号可以用IN来替换,而IN不能用=替换

=:返回的值是一个具体的值IN:返回的是多个值例:5.10找出和职工E4挣同样工资的所有职工.16四几个特殊运算符BETWEEN…AND…两者之间LIKE:匹配或者含有!=:不等于注意:通配符(%和-)%代表多个字符,-单代表单个字符.而在我们的第三章用*代表多个,?代表单个,不能用(*和?)使用.SQL与VF的区别.四几个特殊运算符BETWEEN…AND…两者之间17例:检索出工资在1220元到1240元范围的职工信息.SELE*FROM职工WHERE工资BETWEEN1220AND1240或者SELE*FROM职工WHERE(工资>=1210)AND(工资<=1240)例:从供应商关系中检索出全部公司的信息,不工厂或其它供应商的信息.SELE*FROM供应商WHERELIKE”%公司”例:检索出工资在1220元到1240元范围的职工信息.18例:找出不在北京的全部供应商信息.SELECT*FROM供应商WHERE地址!=“北京”或者SELE*FROM供应商WHERENOT(地址=“北京”)注:地址!=“北京”与NOT(地址=“北京”)等价只是两种不同的表达方式例:找出不在北京的全部供应商信息.19五、排序ORDERBY<排序的字段名>ASC/DESCASC升序,可以不用.DESC降序例:按职工的工资值升序索出全部职工信息.SELE*FROM职工ORDERBY工资ASC五、排序ORDERBY<排序的字段名>ASC/DES20例、先按仓库号排序,再按工资排序并输出全部职工信息。注:这句话可这样叙述,对职工表的仓库号进行排序,如果仓库号相同再按工资排序。SELE*FROM职工ORDERBY仓库号DESC,工资注:ORDEBY不能用在子查询中例、先按仓库号排序,再按工资排序并输出全部职工信息。21例:按职工的工资值升序检索出全部职工信息。SELE*FROM职工ORDERBY工资

降序:在所面加DESC例:先按仓库号排序,再按工资排序并输出全部职工信息。

对多个字段进行排序:SELE*FROM职工ORDERBY仓库号,工资例:按职工的工资值升序检索出全部职工信息。22简单的计算查询COUNT()---计数SUM()---求和AVG()---求平均值MAX()---求最大值MIN()---求最小值简单的计算查询COUNT()---计数23查询产生新字段查询中新字段:在查询的结果中多一个统计或计算的字段。定义格式:SELESUM(工资)AS

总工资

FROM职工例1:SELECTAVG(工资)AS平均工资例2:SELECTCOUNT(职工号)AS职工个数查询产生新字段查询中新字段:在查询的结果中多一个统计或计算的24例:找出供应商所在地址的数目SELECOUNT(DIST地址)FROM供应商DIST相同的地址例:求支付的工资总数SELESUM(工资)FROM职工例:求北京和上海的仓库职工的工资总和SELE

SUM(工资)FROM职工,仓库WHERE(城市=“北京”OR城市=“上海”)AND(职工.仓库号=仓库.仓库号)SELESUM(工资)

FROM职工WHERE仓库号IN(SELE仓库号FROM仓库WHERE

城市=“北京”OR城市=“上海”)例:找出供应商所在地址的数目25例:求所有职工的工资都多于1210元的仓库的平均面积.SELEAVG(面积)AS平均面积FROM仓库WHERE仓库号notIN(SELE仓库号FROM职工WHERE工资<=1210)and仓库号IN(SELE仓库号FROM职工)例:求在WH2仓库工作的职工的最高工资值.SELEMAX(工资)FROM职工WHERE仓库号=“WH2”例:求所有职工的工资都多于1210元的仓库的平均面积.26分组与计算查询结构:GROUPBY<分组字段>HAVING<限定条件>什么时候使用分组:需要统计、计算每个仓库每个职工,每个学生等含有“每个”提示信息需用。分组字段:如每个职工就是职工号,每个学生就是学生的学号限定条件:至少选修两门以课,至少两个职工分组与计算查询结构:27例:求每个仓库的职工的平均工资GROUPBY一般跟在WHERE后,如果没有就跟在FROM之后SELE仓库号,AVG(工资)FROM职工GROUPBY仓库号例:求至少有两个职工的每个仓库的平均工资。SELE仓库号,COUNT(*),AVG(工资)FROM职工GROUPBY仓库号HAVINGCOUNT(*)>=2例:求每个仓库的职工的平均工资28八、利用空值查询空值:指不确定的值判断为不为空:ISNULL(空)ISNOTNULL例:找出尚未确定供应商的订购单。SELE*FROM订购单WHERE供应商号ISNULL不能用=NULL例:列出已经确定了供应商的订购单信息。SELE*FROM订购单WHERE订购信息ISNOTNULL八、利用空值查询空值:指不确定的值29九、别名和自联接查询别名:别名不是必须的,但是在关系的自联接操作中,别名必不可少作用:一般用在多表查询或多字段查询上公共的字段:作为联接条件:别名1.字段名=别名2.字段名自联接:指同一关系中与其自身联接一张表使用两次时,区分两次的使用情况九、别名和自联接查询别名:别名不是必须的,但是在关系的自联接30例:根据雇员关系列出上一级经理及所领导的职工清单。SELES.雇员名,“领导”,E.雇员姓名FROM雇员S,雇员EWHERES.雇员号=E.经理常量:领导“雇员号雇员姓名经理E3赵涌E4钱潮E3E6孙洁E3E8李渌E6例:根据雇员关系列出上一级经理及所领导的职工清单。雇员号雇员31十、内外层相关嵌套查询十、内外层相关嵌套查询32十、内外层相关嵌套查询这张表查询的结果要依靠这张表的另一个查询条件而取得,采用自我嵌套的方法来实现。方法:嵌套条件为别名1.公共字段=别名2.公共字段员工号相同进行比较。自嵌套和自联接的区别:自联接通过公共的记录来联接,自嵌套通过公共字段来联接十、内外层相关嵌套查询这张表查询的结果要依靠这张表的另一个查33例:列出每个职工经手的具有最高总金额的订购单信息。SELEOUT.职工号,OUT.供应商号,OUT.订购日期,OUT.总金额FROM订购单OUTWHERE总金额=(SELEMAX(总金额)FROM订购单INNER1WHEREOUT.职工号=INNER1.职工号)例:列出每个职工经手的具有最高总金额的订购单信息。34十一、使用量词查询ANY、SOME:查询的结果一行为真则结果为真。ALL:子查询中所有行为为真查询的结果就为真NOTEXISTS:检查子查询中是否有结果返回。NOTEXISTS与NOTIN之间联系:可以相互转换,WHERE

NOTEXISTS(SELECT*WHEREA.仓库号=B.仓库号等价于仓库号NOTIN(SELECT仓库号

区别:NOTEXISTS指是否存在一个返回结果,NOTIN指具体的返回值。十一、使用量词查询ANY、SOME:查询的结果一行为真则结果35检索那些仓库中还没有职工的仓库的信息。这里的查询是没有职工或不存在职工,所以可以使用谓词NOTEXISTS:SELECT*FROM仓库WHERENOTEXISTS;(SELECT*FROM职工WHERE仓库号=仓库.仓库号)注意:这里的内层查询引用了外层查询的表,只有这样使用谓词EXISTS或NOTEXISTS才有意义。所以这类查询也都是内、外层互相关嵌套查询。以上的查询等价于:

SELECT*FROM仓库WHERE仓库号NOTIN;(SELECT仓库号FROM职工)检索那些仓库中还没有职工的仓库的信息。36检索那些仓库中至少已经有一个职工的仓库的信息。SELECT*FROM仓库WHEREEXISTS;

(SELECT*FROM职工WHERE仓库号=仓库.仓库号)它等价于:SELECT*FROM仓库WHERE仓库号IN(SELECT仓库号FROM职工)

注意:[NOT]EXISTS只是判断子查询中是否有或没有结果返回,它本身并没有任何运算或比较。检索那些仓库中至少已经有一个职工的仓库的信息。37检索有职工的工资大于等于WH1仓库中任何一名职工工资的仓库号。

这个查询可以使用ANY或SOME量词。SELECTDISTINCT仓库号FROM职工WHERE工资>=ANY;

(SELECT工资FROM职工WHERE仓库号=“WH1”)

它等价于:SELECTDISTINCT仓库号FROM职工WHERE工资>=

(SELECTMIN(工资)FROM职工WHERE仓库号=“WH1”)

检索有职工的工资大于等于WH1仓库中任何一名职工工资的仓库号38检索有职工的工资大于或等于WH1仓库中所有职工工资的仓库号。

这个查询使用ALL量词。SELECTDISTINCT仓库号FROM职工WHERE工资>=ALL

(SELECT工资FROM职工WHERE仓库号=“WH1”)它等价于:SELECTDISTINCT仓库号FROM职工WHERE工资>=;

(SELECTMAX(工资)FROM职工WHERE仓库号=“WH1”)

检索有职工的工资大于或等于WH1仓库中所有职工工资的仓库号。39十二、超联接查询内联接格式:表1INNERJOIN表2on联接条件满足条件:两张表都有的联接记录。左联接格式:表1LEFTJOIN表2ON联接条件满足条件:两张表都有的联接记录,且满足左表中(表1)的记录十二、超联接查询内联接40右联接格式:表1RIGHTJOIN表2ON联接条件满足条件:两张表都有的联接记录,且满足右表中(表2)的记录全联接格式:表1FULLJOIN表2ON联接条件满足条件:两张表都有的联接记录,且满足右表中(表1)和表2所有的记录第四章数据查询课件41内部联接,即只有满足联接条件的记录才出现在查询结果中。SELECT仓库.仓库号,城市,面积,职工号,工资;FROM仓库(INNER)JOIN职工;ON仓库.仓库号=职工.仓库号

等价:SELECT仓库.仓库号,城市,面积,职工号,工资;FROM仓库,职工

WHERE仓库.仓库号=职工.仓库号内部联接,即只有满足联接条件的记录才出现在查询结果中。42左联接:即除满足联接条件的记录出现在查询结果中外,第一个表中不满足联接条件的记录也出现在查询结果中。SELECT仓库.仓库号,城市,面积,职工号,工资;FROM仓库LEFTJOIN职工ON仓库.仓库号=职工.仓库号右联接:即除满足联接条件的记录出现在查询结果中外,第二个表中不满足联接条件的记录也出现在查询结果中。SELECT仓库.仓库号,城市,面积,职工号,工资;FROM仓库LEFTJOIN职工ON仓库.仓库号=职工.仓库号左联接:即除满足联接条件的记录出现在查询结果中外,第一个表中43全联接:即除满足联接条件的记录出现在查询结果中外,两个表中不满足联接条件的记录也出现在查询结果中。SELECT仓库.仓库号,城市,面积,职工号,工资;FROM仓库LEFTJOIN职工ON仓库.仓库号=职工.仓库号注:JION的位置和ON联接条件相反

SELECT仓库.仓库号,城市,面积,职工号,工资FROM供应商JION订购单JION职工JION仓库ON仓库.仓库号=职工.仓库号ON订购单.职工号=职工.职工号ON供应商号.供应商号=订购单.供应商号.全联接:即除满足联接条件的记录出现在查询结果中外,两个表中不44十三、集合的并运算将两个SELE的查询结果合并成一个查询结果,要求:相同的字段,值域,数据类型,取值范围.例:显示结果为北京和上的仓库信息:SELE*FROM仓库WHERE城市=“北京”;UNIONSELE*FROM仓库WHERE城市=“上海”等价于:SELE*FROM仓库WHERE城市=“北京”OR城市=“上海”十三、集合的并运算将两个SELE的查询结果合并成一个查询结45十四查询去向浏览方式显示记录(一般就是浏览)将查询结果存放到数组中(INTOARRA数组名)将查询结果存放在临时文件中(INTOCURSORTMP)将查询结果存放在永久的表中(INTOTABLE/DBF表名)将查询结果存放在文本文件中(TOFILE文本.TXT)将查询结果直接输出打印机中(TOPRINTER)十四查询去向浏览方式显示记录(一般就是浏览)46第五章关系数据库标准语言SQL第五章关系数据库标准语言SQL47一、SQL概述结构化查询语言全称:StructuredQueryLanguage内容:数据定义、数据操纵、数据查询和数据控制。特点:简结一体化语言高度非过程化命令交互使用一、SQL概述结构化查询语言全称:StructuredQu48SQL命令动词表SQL功能命令动词数据查询SELECT数据定义CREATE、DROP、ALTER数据操纵INSERT、UPDATE、DELETE数据控制GRANT、REVOKESQL命令动词表SQL功能命令动词数据查询SELECT数49查询技巧首先读题义,从中抽出关键字打开查询的表、先浏览,从中找线索从题目中提取所要信息,作为条件对所得的条件进行有效的组合完善查询查询技巧首先读题义,从中抽出关键字50SQL中的数据查询语句数据库中的数据很多时侯是为了查询的,因此,数据查是数据库的核心操作。而在SQL语言中,查询语言中有一条查询命令,即SELECT语句。4.5.1基本查询语句【格式】SELECT[ALL|DISTINCT]<字段列表>FROM<表>【功能】无条件查询。【说明】ALL:表示显示全部查询记录,包括重复记录。

DISTINCT:表示显示无重复结果的记录。SQL中的数据查询语句数据库中的数据很多时侯是为了查询的,因51简单查询例5.1从职工关系中检索所有工资值分析:关系指二维表,工资是要显示的结果字段,没有条件。方法:把信息插入SQL语句。结果表示:SELE工资FROM职工语句说明:SELECT:字段名(或查询的结果)FROM:来源于哪张表。DISTINCT:是否要去掉等值的字段。简单查询例5.1从职工关系中检索所有工资值52例5.1检索仓库关系中的所有元组

SELE*FROM仓库*:是通配符,表示所仓库表的中字段.此题中可以:SELE仓库号,城市,面积FROM仓库例5.2:检索工资多于1230元的职工号条件:工资多于1230等价于工资>1230

显示字段:职工号

来源表:职工表

SELE职工号FROM职工WHERE工资>1230例5.1检索仓库关系中的所有元组53例:检索哪些仓库有工资多于1210元的职工分析:工资多于1210元等价于工资>1210

仓库:是要显示的字段信息,用仓库号来表示.

SELEDIST仓库号FORM职工WHERE工资>1210

例:5.5给出在仓库“WH1”或“WH2”工作,并且工资少于1250元的职工号条件:(仓库号=“WH1”OR仓库号=“WH2”)AND工资<1250

语句:SELE职工号FROM职工WHERE(仓库号=“WH1”OR仓库号=“WH2”)AND工资<1250

例:检索哪些仓库有工资多于1210元的职工54二、连接查询【说明】在一个数据库中的多个表之间一般都存在着某些联系,在一个查询语句中同时涉及到两个或两个以上的表时,这种查询称之为连接查询(也称为多表查询)。在多表之间查询必须处理表与表之间的连接关系。SELECT[ALL|DISTINCT]<字段列表>FROM<表1>[,表2…..]WHERE<条件表达式>二、连接查询【说明】在一个数据库中的多个表之间一般都存在着某55简单的联接查询针对多张表,一张表的结果要依靠另一张表为条件,才能查出.把两张表联接起来,形成逻辑上的一张表.技巧:找两张表之间的公共字段及联接条件结构:

SELE<字段>FROM表1,表2WHER<一般查条件>AND联接条件(或者两张表的公共字段)联接条件:表名.字段名(或者表的别名.字段名)简单的联接查询针对多张表,一张表的结果要依靠另一张表为条件,56例5.6找出工资多于1230元的职工号和他们所在城市.注意:一张表查出不能完成,结果需要两张表,职工表只有职工号,而仓库表有中只有城市.他们的公共字段为仓库号.

联接条件:职工.仓库号=仓库.仓库号

一般条件:工资>1230

两张表:职工,仓库

显示字段:职工号,城市

语句:SELE职工号,城市FROM职工,仓库

WHERE(工资>1230)AND(职工.仓库号=仓库.仓库号)例5.6找出工资多于1230元的职工号和他们所在城市.57例:找出工作在面积大于400的仓库的职工号以及这些职工工作所在的城市.分析条件:面积>400联接条件:(职工.仓库号=仓库.仓库号)查询涉及表:仓库,职工

查询结果字段:职工号,城市

SELE

职工号,城市

FROM

仓库,职工

WHERE

(面积>400)

AND

(职工.仓库号=仓库.仓库号)例:找出工作在面积大于400的仓库的职工号以及这些职工工作所58嵌套查询外查询的条件来自内查询的结果在SQL语句中,一个SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询或子查询。IN:属于关系,返回多个值NOTIN:不属于关系联接条件:公共字段名IN(SELE公共字段名

相当于联接中条件表1.公共字段名=表2.公共字段名嵌套查询外查询的条件来自内查询的结果59例题:哪些城市至少有一个仓库的职工工资1250元?SELE城市FROM仓库表WHERE仓库号IN(SELE仓库号FROM职工WHERE工资=1250)IN:属于关系,返回多个值注意:仓库号IN(SELE仓库号相当于连接的条件:仓库.仓库号=职工.仓库号例题:哪些城市至少有一个仓库的职工工资1250元?60例:查询所有职工的工资都于1210元的仓库的信息.SELE*FROM仓库WHERE仓库号NOTIN(SELE仓库号FROM工资<=1210)分析没有错,但实际错了。应该为SELE*FROM仓库WHERE仓库号NOTIN(SELE仓库号FROM工资WHERE工资<=1210)AND仓库号IN(SELE仓库号FROM职工)例:查询所有职工的工资都于1210元的仓库的信息.61例:5.10找出和职工E4挣同样工资的所有职工.SELE职工号FROM职工WHERE工资=(SELE工资FROM职工WHERE职工号=“E4”)注意:=与IN之间的关系,等号可以用IN来替换,而IN不能用=替换

=:返回的值是一个具体的值IN:返回的是多个值例:5.10找出和职工E4挣同样工资的所有职工.62四几个特殊运算符BETWEEN…AND…两者之间LIKE:匹配或者含有!=:不等于注意:通配符(%和-)%代表多个字符,-单代表单个字符.而在我们的第三章用*代表多个,?代表单个,不能用(*和?)使用.SQL与VF的区别.四几个特殊运算符BETWEEN…AND…两者之间63例:检索出工资在1220元到1240元范围的职工信息.SELE*FROM职工WHERE工资BETWEEN1220AND1240或者SELE*FROM职工WHERE(工资>=1210)AND(工资<=1240)例:从供应商关系中检索出全部公司的信息,不工厂或其它供应商的信息.SELE*FROM供应商WHERELIKE”%公司”例:检索出工资在1220元到1240元范围的职工信息.64例:找出不在北京的全部供应商信息.SELECT*FROM供应商WHERE地址!=“北京”或者SELE*FROM供应商WHERENOT(地址=“北京”)注:地址!=“北京”与NOT(地址=“北京”)等价只是两种不同的表达方式例:找出不在北京的全部供应商信息.65五、排序ORDERBY<排序的字段名>ASC/DESCASC升序,可以不用.DESC降序例:按职工的工资值升序索出全部职工信息.SELE*FROM职工ORDERBY工资ASC五、排序ORDERBY<排序的字段名>ASC/DES66例、先按仓库号排序,再按工资排序并输出全部职工信息。注:这句话可这样叙述,对职工表的仓库号进行排序,如果仓库号相同再按工资排序。SELE*FROM职工ORDERBY仓库号DESC,工资注:ORDEBY不能用在子查询中例、先按仓库号排序,再按工资排序并输出全部职工信息。67例:按职工的工资值升序检索出全部职工信息。SELE*FROM职工ORDERBY工资

降序:在所面加DESC例:先按仓库号排序,再按工资排序并输出全部职工信息。

对多个字段进行排序:SELE*FROM职工ORDERBY仓库号,工资例:按职工的工资值升序检索出全部职工信息。68简单的计算查询COUNT()---计数SUM()---求和AVG()---求平均值MAX()---求最大值MIN()---求最小值简单的计算查询COUNT()---计数69查询产生新字段查询中新字段:在查询的结果中多一个统计或计算的字段。定义格式:SELESUM(工资)AS

总工资

FROM职工例1:SELECTAVG(工资)AS平均工资例2:SELECTCOUNT(职工号)AS职工个数查询产生新字段查询中新字段:在查询的结果中多一个统计或计算的70例:找出供应商所在地址的数目SELECOUNT(DIST地址)FROM供应商DIST相同的地址例:求支付的工资总数SELESUM(工资)FROM职工例:求北京和上海的仓库职工的工资总和SELE

SUM(工资)FROM职工,仓库WHERE(城市=“北京”OR城市=“上海”)AND(职工.仓库号=仓库.仓库号)SELESUM(工资)

FROM职工WHERE仓库号IN(SELE仓库号FROM仓库WHERE

城市=“北京”OR城市=“上海”)例:找出供应商所在地址的数目71例:求所有职工的工资都多于1210元的仓库的平均面积.SELEAVG(面积)AS平均面积FROM仓库WHERE仓库号notIN(SELE仓库号FROM职工WHERE工资<=1210)and仓库号IN(SELE仓库号FROM职工)例:求在WH2仓库工作的职工的最高工资值.SELEMAX(工资)FROM职工WHERE仓库号=“WH2”例:求所有职工的工资都多于1210元的仓库的平均面积.72分组与计算查询结构:GROUPBY<分组字段>HAVING<限定条件>什么时候使用分组:需要统计、计算每个仓库每个职工,每个学生等含有“每个”提示信息需用。分组字段:如每个职工就是职工号,每个学生就是学生的学号限定条件:至少选修两门以课,至少两个职工分组与计算查询结构:73例:求每个仓库的职工的平均工资GROUPBY一般跟在WHERE后,如果没有就跟在FROM之后SELE仓库号,AVG(工资)FROM职工GROUPBY仓库号例:求至少有两个职工的每个仓库的平均工资。SELE仓库号,COUNT(*),AVG(工资)FROM职工GROUPBY仓库号HAVINGCOUNT(*)>=2例:求每个仓库的职工的平均工资74八、利用空值查询空值:指不确定的值判断为不为空:ISNULL(空)ISNOTNULL例:找出尚未确定供应商的订购单。SELE*FROM订购单WHERE供应商号ISNULL不能用=NULL例:列出已经确定了供应商的订购单信息。SELE*FROM订购单WHERE订购信息ISNOTNULL八、利用空值查询空值:指不确定的值75九、别名和自联接查询别名:别名不是必须的,但是在关系的自联接操作中,别名必不可少作用:一般用在多表查询或多字段查询上公共的字段:作为联接条件:别名1.字段名=别名2.字段名自联接:指同一关系中与其自身联接一张表使用两次时,区分两次的使用情况九、别名和自联接查询别名:别名不是必须的,但是在关系的自联接76例:根据雇员关系列出上一级经理及所领导的职工清单。SELES.雇员名,“领导”,E.雇员姓名FROM雇员S,雇员EWHERES.雇员号=E.经理常量:领导“雇员号雇员姓名经理E3赵涌E4钱潮E3E6孙洁E3E8李渌E6例:根据雇员关系列出上一级经理及所领导的职工清单。雇员号雇员77十、内外层相关嵌套查询十、内外层相关嵌套查询78十、内外层相关嵌套查询这张表查询的结果要依靠这张表的另一个查询条件而取得,采用自我嵌套的方法来实现。方法:嵌套条件为别名1.公共字段=别名2.公共字段员工号相同进行比较。自嵌套和自联接的区别:自联接通过公共的记录来联接,自嵌套通过公共字段来联接十、内外层相关嵌套查询这张表查询的结果要依靠这张表的另一个查79例:列出每个职工经手的具有最高总金额的订购单信息。SELEOUT.职工号,OUT.供应商号,OUT.订购日期,OUT.总金额FROM订购单OUTWHERE总金额=(SELEMAX(总金额)FROM订购单INNER1WHEREOUT.职工号=INNER1.职工号)例:列出每个职工经手的具有最高总金额的订购单信息。80十一、使用量词查询ANY、SOME:查询的结果一行为真则结果为真。ALL:子查询中所有行为为真查询的结果就为真NOTEXISTS:检查子查询中是否有结果返回。NOTEXISTS与NOTIN之间联系:可以相互转换,WHERE

NOTEXISTS(SELECT*WHEREA.仓库号=B.仓库号等价于仓库号NOTIN(SELECT仓库号

区别:NOTEXISTS指是否存在一个返回结果,NOTIN指具体的返回值。十一、使用量词查询ANY、SOME:查询的结果一行为真则结果81检索那些仓库中还没有职工的仓库的信息。这里的查询是没有职工或不存在职工,所以可以使用谓词NOTEXISTS:SELECT*FROM仓库WHERENOTEXISTS;(SELECT*FROM职工WHERE仓库号=仓库.仓库号)注意:这里的内层查询引用了外层查询的表,只有这样使用谓词EXISTS或NOTEXISTS才有意义。所以这类查询也都是内、外层互相关嵌套查询。以上的查询等价于:

SELECT*FROM仓库WHERE仓库号NOTIN;(SELECT仓库号FROM职工)检索那些仓库中还没有职工的仓库的信息。82检索那些仓库中至少已经有一个职工的仓库的信息。SELECT*FROM仓库WHEREEXISTS;

(SELECT*FROM职工WHERE仓库号=仓库.仓库号)它等价于:SELECT*FROM仓库WHERE仓库号IN(SELECT仓库号FROM职工)

注意:[NOT]EXISTS只是判断子查询中是否有或没有结果返回,它本身并没有任何运算或比较。检索那些仓库中至少已经有一个职工的仓库的信息。83检索有职工的工资大于等于WH1仓库中任何一名职工工资的仓库号。

这个查询可以使用ANY或SOME量词。SELECTDISTINCT仓库号FROM职工WHERE工资>=ANY;

(SELECT工资FROM职工WHERE仓库号=“WH1”)

它等价于:SELECTDISTINCT仓库号FROM职工WHERE工资>=

(SELECTMIN(工资)FROM职工WHERE仓库号=“

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论