第05章销售管理数据库的数据查询_第1页
第05章销售管理数据库的数据查询_第2页
第05章销售管理数据库的数据查询_第3页
第05章销售管理数据库的数据查询_第4页
第05章销售管理数据库的数据查询_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

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

文档简介

1、 SQL Server 2005数据库应用技术数据库应用技术 清华大学出版社清华大学出版社第五章第五章 销售管理数据库的数销售管理数据库的数据查询据查询.技能目标技能目标 在销售管理系统数据库中能根据按照指定的要求在销售管理系统数据库中能根据按照指定的要求灵活、快速地查询相关信息。灵活、快速地查询相关信息。 .数据查询数据查询u在数据库应用中,最常用的操作是查询,它是在数据库应用中,最常用的操作是查询,它是其他操作的基础,是数据库最基本也是最重要其他操作的基础,是数据库最基本也是最重要的功能。的功能。u查询:在查询:在SQL ServerSQL Server中找出满足特定条件的记中找出满足特定

2、条件的记录,以及对这些记录作汇总、统计和排序,这录,以及对这些记录作汇总、统计和排序,这些操作统称为些操作统称为“查询查询”,由,由SELECTSELECT语句实现。语句实现。.SELECT SELECT 语句的执行方式语句的执行方式: :u1)1)在查询设计器执行查询在查询设计器执行查询u2)2)在新建查询窗口执行查询在新建查询窗口执行查询.在在查询设计器查询设计器中执行中执行SELECTSELECT语句语句u在在SQL Server 2005SQL Server 2005中,可以使用查询设计器来编写、中,可以使用查询设计器来编写、修改和执行一个修改和执行一个SELECTSELECT语句。语

3、句。u通过打开表,然后单击工具栏上的有关按钮,可以在通过打开表,然后单击工具栏上的有关按钮,可以在查询设计窗口打开四个窗格,分别是:查询设计窗口打开四个窗格,分别是:u1 1)关系图窗格:用于向查询中添加表或视图对象以)关系图窗格:用于向查询中添加表或视图对象以及选择输出字段,并允许将相关的表连接起来。及选择输出字段,并允许将相关的表连接起来。u2 2)条件窗格:用于设置显示字段、排序结果、搜索)条件窗格:用于设置显示字段、排序结果、搜索和分组结果的选项。和分组结果的选项。u3 3)SQLSQL窗格:用于输入和编辑所有的窗格:用于输入和编辑所有的SELECTSELECT语句。语句。u4 4)结

4、果窗格:用于显示)结果窗格:用于显示SELECTSELECT语句执行的结果,并语句执行的结果,并允许添加、修改和删除记录。允许添加、修改和删除记录。.SELECTSELECT语句的语法格式语句的语法格式 SELECT SELECT INTO INTO FROM FROM 数据源列表数据源列表 WHERE WHERE GROUP BY GROUP BY HAVING HAVING ORDER BY ORDER BY ASC | DESC ASC | DESC .用于指定将要查询输出的列名称或统计函用于指定将要查询输出的列名称或统计函数或有关计算表达式数或有关计算表达式uINTO子句用于将查询结果

5、存储到一个新的数据表中;用于将查询结果存储到一个新的数据表中;指定查询要用到的对象(包括查询条件和查指定查询要用到的对象(包括查询条件和查询结果中涉及的表或视图)询结果中涉及的表或视图), ,以及各表之间的逻辑关以及各表之间的逻辑关系;系;指定查询应该满足的条件指定查询应该满足的条件u一般情况下,一般情况下,SELECTSELECT子句和子句和FROMFROM子句是必不可少的,子句是必不可少的,WHEREWHERE子句是可选的。如果没有使用子句是可选的。如果没有使用WHEREWHERE子句,那么子句,那么表示无条件地查询所有的数据。表示无条件地查询所有的数据。.u如果如果SELECTSELEC

6、T语句中有语句中有,则将查询结,则将查询结果按照果按照 的值进行分组的值进行分组, ,将该属性列将该属性列值相等的记录作为一个组值相等的记录作为一个组, ,每一组产生结果集每一组产生结果集中的一条记录,通常会在每组中使用聚合函中的一条记录,通常会在每组中使用聚合函数。数。u如果如果GROUPGROUP子句带有子句带有, HAVINGHAVING子子句用于指定分组统计条件,则只有满足指定句用于指定分组统计条件,则只有满足指定条件的组才会输出。要与条件的组才会输出。要与GROUP BYGROUP BY子句一起子句一起使用。使用。uORDER BYORDER BY子句用于对查询到的记录进行排序子句用

7、于对查询到的记录进行排序处理。处理。.5.2 SELECT5.2 SELECT子句查询子句查询u在很多情况下,用户可能只对表中在很多情况下,用户可能只对表中的值的值感兴趣,这时可以在感兴趣,这时可以在中中指定要查询的属性列。指定要查询的属性列。u SELECT子句的格式为: SELECT ALL | DISTINCT SELECT ALL | DISTINCT TOP n PERCENT WITH TIES TOP n PERCENT WITH TIES select_list FROM FROM , , 图5.2 查询指定数据列示例.简单查询简单查询-SELECT -SELECT 子句子句

8、1 1、查询所有的列(使用、查询所有的列(使用* *)【例】从商品表中查询所有商品的信息【例】从商品表中查询所有商品的信息 。 select select * * from from 商品商品.2 2、查询指定的列、查询指定的列 u【例】从客户表中检索所有客户的公司名称、联系人【例】从客户表中检索所有客户的公司名称、联系人姓名和地址。姓名和地址。 select select 公司名称公司名称, ,联系人姓名联系人姓名, ,地址地址 from from 客户客户.3.3.简单查询简单查询- ORDER BY- ORDER BY子句子句 语法格式:语法格式: ORDER BY ORDER BY 排

9、序项排序项 ASC | DESC ASC | DESC , ,排序项排序项 ASC | DESC,n ASC | DESC,n Asc指定字段的值按照升序排列,指定字段的值按照升序排列,DESC指定字段按照降序排指定字段按照降序排列,默认排序为升序。列,默认排序为升序。NULL值将被处理为最小值。如果排序值将被处理为最小值。如果排序字段值有中文又有英文,英文看作比中文小,各类别再分别字段值有中文又有英文,英文看作比中文小,各类别再分别按英文字母顺序排列。按英文字母顺序排列。 当基于多个属性对数据进行排序时,因为系统是按照排序列当基于多个属性对数据进行排序时,因为系统是按照排序列的先后进行排序的

10、。先按第一个属性进行排序,如果第一个的先后进行排序的。先按第一个属性进行排序,如果第一个属性相同,则依据第二个属性排序,如果第二个属性相同,属性相同,则依据第二个属性排序,如果第二个属性相同,则依据第三个属性排序,依此类推。另外,在执行多列排序则依据第三个属性排序,依此类推。另外,在执行多列排序时,每一个列都可以指定是升序还是降序时,每一个列都可以指定是升序还是降序.【例】按工资降序显示员工的姓名和工资,工【例】按工资降序显示员工的姓名和工资,工资相同时按姓名升序排序资相同时按姓名升序排序 Select 姓名姓名,工资工资From 员工员工Order by 工资工资 desc,姓名姓名.4 4

11、、使用、使用TOP TOP 关键字关键字u如果在使用如果在使用TOPTOP关键字的关键字的SELECTSELECT语句中没有使用排序子语句中没有使用排序子句,则只是显示表中的前句,则只是显示表中的前n n条记录。当在查询语句中使条记录。当在查询语句中使用了用了ORDER BYORDER BY子句时,子句时,TOPTOP关键字表示排序后显示从大关键字表示排序后显示从大到小或从小到大的前到小或从小到大的前n n条记录。条记录。u如果有多条记录排序字段值与输出的最后一条记录相同,如果有多条记录排序字段值与输出的最后一条记录相同,则只显示位置在前面的一条记录;如果需要将排序字段则只显示位置在前面的一条

12、记录;如果需要将排序字段值相等的那些记录一并显示出来,则在值相等的那些记录一并显示出来,则在SELECTSELECT语句中语句中TOPTOP后面添加后面添加WITH TIESWITH TIES即可。即可。uWITH TIESWITH TIES必须与必须与TOPTOP一起使用,而且只能与一起使用,而且只能与ORDER BYORDER BY语语句一起使用。句一起使用。.4 4、使用、使用TOP TOP 关键字关键字 【例】检索客户表中前【例】检索客户表中前5 5位客户的公司名称、联系人姓名和地址。位客户的公司名称、联系人姓名和地址。 select top 5 select top 5 公司名称公司

13、名称, ,联系人姓名联系人姓名, ,地址地址 from from 客户客户 【例】检索员工工资最高的【例】检索员工工资最高的3 3名员工信息。名员工信息。 select top 3 select top 3 * * from from 员工员工 order by order by 工资工资descdesc 如果想将跟输出的最后一条记录值相同的记录也一并输出,就加如果想将跟输出的最后一条记录值相同的记录也一并输出,就加上上with tieswith ties语句。语句。 select top 3 with ties select top 3 with ties * * from from 员工员

14、工 order by order by 工资工资descdesc.5 5、使用、使用DISTINCT DISTINCT 关键字关键字【例】从员工表中查询所有员工的部门信息,并消去重复记录。【例】从员工表中查询所有员工的部门信息,并消去重复记录。 select distinct 部门编号部门编号From 员工员工【例】从销售订单表查询所有员工销售的商品信息。【例】从销售订单表查询所有员工销售的商品信息。Select distinct 员工编号员工编号,商品编号商品编号From 员工员工.简单查询简单查询-SELECT -SELECT 子句(续)子句(续)6 6、更改列标题、更改列标题方法:方法:

15、u采用采用“列标题列标题=列名列名”的格式的格式u采用采用“列名列名 列标题列标题”的格式的格式u采用采用“列名列名 as 列标题列标题”的格式的格式【例】查询每个员工的姓名和性别,并在每人的姓名标题上显示【例】查询每个员工的姓名和性别,并在每人的姓名标题上显示“员工姓名员工姓名”。 select select 姓名姓名 as as 员工姓名员工姓名, ,性别性别 from from 员工员工 u【练习】使用其他两种方法:【练习】使用其他两种方法: select select 员工姓名员工姓名= =姓名姓名, ,性别性别 select select 姓名姓名 员工姓名员工姓名, ,性别性别 f

16、rom from 员工员工 from from 员工员工 .简单查询简单查询-SELECT -SELECT 子句(续)子句(续)7 7、使用计算列、使用计算列【例】查询所有员工的工资在提高【例】查询所有员工的工资在提高10%后信息,将提高后的工资列后信息,将提高后的工资列标题为标题为“提高后工资提高后工资”。 select 姓名姓名,工资工资,工资工资*1.1 as 提高后工资提高后工资 from 员工员工8 8、使用系统函数、使用系统函数【例】统计公司员工的入职年数。【例】统计公司员工的入职年数。Select 姓名姓名, year(getdate() -year(聘任日期聘任日期) as 入

17、职年数入职年数 from 员工员工.9. INTO 9. INTO 子句子句 INTO INTO 子句用于将查询的结果插入新表中,其语法子句用于将查询的结果插入新表中,其语法格式如下。格式如下。 INTO INTO 新表名新表名【例】使用【例】使用INTO子句创建一个包含员工姓名和工资,并命名为子句创建一个包含员工姓名和工资,并命名为new_employee的新表。的新表。Select 姓名姓名,工资工资Into new_employeeFrom 员工员工.条件查询条件查询- WHERE- WHERE子句子句 u实际工作中往往不需要得到表中所有记录,只实际工作中往往不需要得到表中所有记录,只需

18、要得到满足给定条件的部分记录,这就需要需要得到满足给定条件的部分记录,这就需要对表中的记录进行过滤。对表中的记录进行过滤。u通过在通过在SELECTSELECT语句中使用语句中使用WHEREWHERE子句,可以设子句,可以设置对记录的检索条件。置对记录的检索条件。其语法格式如下。其语法格式如下。SELECT FROM WHERE .u在在WHERE WHERE 子句中经常使用比较运算符和逻辑运算符,子句中经常使用比较运算符和逻辑运算符,比较运算符如下表:比较运算符如下表:u比较运算符用于测试两个表达式的值之间的关系,其比较运算符用于测试两个表达式的值之间的关系,其运算结果为逻辑值,通常为运算结

19、果为逻辑值,通常为TRUETRUE或或FALSEFALSE。运算符运算符含义含义运算符运算符含义含义运算符运算符含义含义 大于大于=小于或等于小于或等于不等于不等于=大于或等于大于或等于= =等于等于!不大于不大于 小于小于!=!=不等于不等于!不小于不小于.逻辑运算符运算符含义 AND AND若两个操作数都为若两个操作数都为TRUE,TRUE,运算结果为运算结果为TRUETRUE ALL ALL若每个操作数都为若每个操作数都为TRUE,TRUE,运算结果为运算结果为TRUETRUE ANY ANY在一系列操作数中只要有一个为在一系列操作数中只要有一个为TRUE, TRUE, 运算结果为运算结

20、果为TRUETRUE BETWEEN BETWEEN若操作数在指定的范围内若操作数在指定的范围内, ,运算结果为运算结果为TRUETRUE EXISTS EXISTS若子查询包含一些行,运算结果为若子查询包含一些行,运算结果为TRUETRUE IN IN若操作数与一种模式相匹配若操作数与一种模式相匹配, ,运算结果为运算结果为TRUETRUE LIKE LIKE若操作数与一种模式相匹配若操作数与一种模式相匹配, ,运算结果为运算结果为TRUETRUE NOT NOT若操作数为若操作数为TRUE,TRUE,运算结果为运算结果为FALSE,FALSE,否则为否则为TRUETRUE OR OR若两个

21、操作数中有一个为若两个操作数中有一个为TRUE,TRUE,运算结果为运算结果为TRUETRUE SOME SOME在一系列操作数中只要有一个为在一系列操作数中只要有一个为TRUE, TRUE, 运算结果为运算结果为TRUETRUE.条件查询条件查询- WHERE- WHERE子句(续)子句(续)1 1、使用算术表达式、使用算术表达式【例】查询员工【例】查询员工“蔡慧敏蔡慧敏”的工资。的工资。【例】【例】 在销售管理数据库的员工表中,查询工资大于在销售管理数据库的员工表中,查询工资大于3000元的员元的员工信息工信息 2 2、使用逻辑表达式、使用逻辑表达式【例】在销售管理数据库的员工表中,查询工

22、资在【例】在销售管理数据库的员工表中,查询工资在3400元以下的女元以下的女性员工姓名和工资信息。性员工姓名和工资信息。 3 3、使用搜索范围、使用搜索范围使用关键字使用关键字Betweenand,即查询介于两个值之间的记录信息。,即查询介于两个值之间的记录信息。语法格式如下。语法格式如下。 NOT BETWEEN AND .上例查询语句上例查询语句u1. select 1. select 工资工资 select select * *from from 员工员工 from from 员工员工 where where 姓名姓名=蔡慧敏蔡慧敏 where where 工资工资30003000u2.

23、 select 2. select 姓名姓名, ,工资工资 from from 员工员工 where where 工资工资3400 and 3400 and 性别性别=女女u3. select 3. select * *from from 员工员工where where 工资工资 between 5000 and 7000between 5000 and 7000.条件查询条件查询- WHERE- WHERE子句(续)子句(续)4 4、使用、使用ININ关键字关键字 IN关键字给出表达式的取值范围。语法:关键字给出表达式的取值范围。语法: 表达式表达式 NOT IN (值值1 , 值值2 ,值

24、值n)【例】在销售管理数据库的销售订单表中,查【例】在销售管理数据库的销售订单表中,查询员工编号为询员工编号为1、5和和7的员工接受订单信息。的员工接受订单信息。 .上例查询语句上例查询语句u.select .select * *from from 销售订单销售订单where where 员工编号员工编号in(1,5,7)in(1,5,7).5 5、使用模糊匹配、使用模糊匹配LIKE子句格式如下。子句格式如下。 NOT LIKE u有效有效SQL ServerSQL Server通配符:通配符:u% %:可匹配任意类型和长度的字符串。:可匹配任意类型和长度的字符串。u_ _(下划线):可匹配任

25、何单个字符(下划线):可匹配任何单个字符( (一个汉字一个汉字或一个全角字符也算一个字符或一个全角字符也算一个字符) )。u :指定范围或集合中的任何单个字符。:指定范围或集合中的任何单个字符。u:不属于指定范围或集合的任何单个字符:不属于指定范围或集合的任何单个字符.5 5、使用模糊匹配、使用模糊匹配【例】找出所有姓【例】找出所有姓“章章”的员工信息。的员工信息。【例】找出所有姓【例】找出所有姓“章章”和姓和姓“李李”的员工的员工信息。信息。【例】找出所有姓【例】找出所有姓“李李”的名为一个汉字的的名为一个汉字的员工信息。员工信息。【例】找出所有姓名里包含【例】找出所有姓名里包含“李李”的员

26、工信的员工信息。息。【例】找出所有不姓【例】找出所有不姓“李李”的员工信息。的员工信息。.上例查询语句上例查询语句例例1:select 1:select * * from from 员工员工 where where 姓名姓名 like like 章章%例例2:select 2:select * * from from 员工员工 where where 姓名姓名 like like 章李章李%例例3:select 3:select * * from from 员工员工 where where 姓名姓名 like like 李李_ _.上例查询语句上例查询语句例例4:select 4:select

27、 * * from from 员工员工 where where 姓名姓名 like %like %李李% %例例5:select 5:select * * from from 员工员工 where where 姓名姓名 like like 李李%或或select select * * from from 员工员工 where where 姓名姓名 not not like like 李李% %.模糊匹配模糊匹配u例例6 6:查询员工编号第一位字符为:查询员工编号第一位字符为2 2到到4 4的员工信息的员工信息 select select * * from from 员工员工 where whe

28、re 员工编号员工编号like 2-4%like 2-4%.u当要查询的字段值正好包含当要查询的字段值正好包含_ _、% %、 和和时,可以使用时,可以使用escapeescape子句来告诉系统子句来告诉系统_ _、 % %、 和和只是一个普通字符,而不是一个通只是一个普通字符,而不是一个通配符。配符。u具体做法是在具体做法是在“模式模式”串中要作为普通字符串中要作为普通字符出现的通配符之前加上一个字符(用!、出现的通配符之前加上一个字符(用!、 或或其它任何不包含在要匹配字符串中的字符),其它任何不包含在要匹配字符串中的字符),然后在然后在ESCAPEESCAPE的后面指明。的后面指明。.例

29、例7 7:查询:查询DB_DesignDB_Design课程的课程号和学分。课程的课程号和学分。 ESCAPE ESCAPE 表示表示“”为转义字符,这样为转义字符,这样匹配字符串中紧跟在匹配字符串中紧跟在“”后面的字符后面的字符“_”_”就不再具有通配符的含义,而是转义为普通就不再具有通配符的含义,而是转义为普通的的“_”_”字符处理。字符处理。.条件查询条件查询- WHERE- WHERE子句(续)子句(续)6 6、空或非空性、空或非空性 空和非空的判断准则是空和非空的判断准则是IS NULLIS NULL和和IS NOT NULLIS NOT NULL。【例】在销售管理数据库中,查找目前

30、有哪些主管【例】在销售管理数据库中,查找目前有哪些主管位置是为不空。位置是为不空。 select *from 部门部门where 部门主管部门主管is not null.统计查询统计查询u统计函数也称为字段函数或集合函数或聚合函数。统计函数也称为字段函数或集合函数或聚合函数。u在在Microsoft SQL SERVER 2005Microsoft SQL SERVER 2005中主要包括中主要包括5 5类统计函类统计函数:数:u计算总和计算总和uSUM ( DISTINCT | ALL expression)SUM ( DISTINCT | ALL expression)u计算平均值计算平均

31、值uAVG ( DISTINCT | ALL expression)AVG ( DISTINCT | ALL expression)u求最大值求最大值uMAX ( DISTINCT | ALL expression )MAX ( DISTINCT | ALL expression ).统计查询统计查询u求最小值求最小值uMIN ( DISTINCT | ALL expression)MIN ( DISTINCT | ALL expression)u计数计数uCOUNT ( DISTINCT | ALL COUNT ( DISTINCT | ALL * * ) ) uCOUNT ( DISTIN

32、CT | ALL expression)COUNT ( DISTINCT | ALL expression)u其中,其中,DISTINCTDISTINCT短语指明在计算时取消指定列中的短语指明在计算时取消指定列中的重复值,只处理惟一值;而重复值,只处理惟一值;而ALLALL短语则指明不取消短语则指明不取消重复值。缺省情况下为重复值。缺省情况下为ALLALL。另外统计运算都是忽。另外统计运算都是忽略空值字段,不统计略空值字段,不统计nullnull在内的。在内的。.统计查询例题统计查询例题u例例1 1:统计员工的人数:统计员工的人数u例例2 2:统计所有员工的平均工资、最高工资、最低工资:统计所

33、有员工的平均工资、最高工资、最低工资和工资总和和工资总和u例例3 3:统计部门编号为:统计部门编号为1 1的员工人数的员工人数u例例4 4:在员工表里统计员工的部门数:在员工表里统计员工的部门数.上例查询语句上例查询语句u例例1 1:select count(select count(* *) as ) as 员工人数员工人数 from from 员工员工u例例2 2:select avg(select avg(工资工资),max(),max(工资工资),min(),min(工资工资),sum(),sum(工资工资) ) from from 员工员工u例例3 3:select count(se

34、lect count(* *) as ) as 员工人数员工人数 from from 员工员工 where where 部门编号部门编号=1=1u例例4 4:select count(distinct select count(distinct 部门编号部门编号) as ) as 部门数部门数 from from 员工员工.分组统计查询分组统计查询u如果需要按某一字段数据的值进行分类,在如果需要按某一字段数据的值进行分类,在分类的基础上再进行统计计算,就需要使用分类的基础上再进行统计计算,就需要使用GROUP BYGROUP BY子句了。子句了。u数据分组是指通过数据分组是指通过GROUP B

35、YGROUP BY子句按一定的条子句按一定的条件对查询到的结果进行分组,再对每一组数件对查询到的结果进行分组,再对每一组数据统计计算。据统计计算。u当完成数据结果的查询和统计后,可以使用当完成数据结果的查询和统计后,可以使用HAVINGHAVING子句来对查询和统计的结果进行进一子句来对查询和统计的结果进行进一步的筛选。步的筛选。.GROUP BYGROUP BY子句子句 【例】查询男女员工的平均工资。【例】查询男女员工的平均工资。 select select 性别性别,avg(,avg(工资工资) as ) as 平均工资平均工资 from from 员工员工 group by group

36、by 性别性别【例】在销售订单表中,统计目前各种商品的订购【例】在销售订单表中,统计目前各种商品的订购总数。总数。 select 商品编号商品编号,sum(订购数量订购数量) as 订购总数订购总数 from 销售订单销售订单 group by 商品编号商品编号. HAVING HAVING子句子句 HAVING HAVING子句指定组或聚合函数统计结果的筛选条子句指定组或聚合函数统计结果的筛选条件。件。HAVING HAVING 只能与只能与GROUP BYGROUP BY语句一起使用。如果不语句一起使用。如果不使用使用GROUP BY GROUP BY 子句,则子句,则 HAVINGHAV

37、ING的行为与的行为与WHERE WHERE 子句子句一样,它的语法格式如下。一样,它的语法格式如下。 HAVING 筛选条件筛选条件 【例】在销售订单表中,查询目前订单总数超过【例】在销售订单表中,查询目前订单总数超过1000的商品订单的商品订单信息。信息。 select 商品编号商品编号,sum(订购数量订购数量) as 订购总数订购总数 from 销售订单销售订单 group by 商品编号商品编号 having sum(订购数量订购数量)1000. HAVING HAVING子句子句 u例:查询销售过三次以上商品的员工编号和销售次数例:查询销售过三次以上商品的员工编号和销售次数sele

38、ct select 员工编号员工编号,count(,count(* *) as ) as 销售次数销售次数from from 销售订单销售订单 group by group by 员工编号员工编号 having count(having count(* *)3)3例:在销售订单表中,查询订购两种以上商品的客户编号例:在销售订单表中,查询订购两种以上商品的客户编号select select 客户编号客户编号,count(distinct ,count(distinct 商品编号商品编号) as ) as 订购商品种类订购商品种类 from from 销售订单销售订单 group by group

39、 by 客户编号客户编号 having count(distinct having count(distinct 商品编号商品编号)2)2.COMPUTE COMPUTE 子句子句 COMPUTE COMPUTE子句可以用于子句可以用于SELECT SELECT 语句既查看明细语句既查看明细行,又查看汇总行。可以计算分组的汇总值,也可以行,又查看汇总行。可以计算分组的汇总值,也可以计算整个结果集的汇总值。语法格式如下。计算整个结果集的汇总值。语法格式如下。 COMPUTE 聚合函数名聚合函数名 (列名列名) , N BY 表达表达式式, N 在在SELECT语句中使用语句中使用COMPUTE

40、BY子句时,必须与子句时,必须与ORDER BY子句联合使用。子句联合使用。COMPUTE BY子句中的统计字段名列表必须与子句中的统计字段名列表必须与ORDER BY子句子句中的相同或为其子集,而且二者从左到右的顺序必须一致。中的相同或为其子集,而且二者从左到右的顺序必须一致。使用使用COMPUTE BY子句会将整个结果集分成组,并针对每个组子句会将整个结果集分成组,并针对每个组产生两个结果集产生两个结果集.COMPUTE COMPUTE 子句子句【例【例 】查询员工表中部门编号为】查询员工表中部门编号为1的各员工工资信息,并计算平均的各员工工资信息,并计算平均工资。工资。 select 姓

41、名姓名, 工资工资 from 员工员工 where 部门编号部门编号=1 compute avg(工资工资)【例】【例】 对员工表中部门编号为对员工表中部门编号为1或或2的员工工资,按照其部门编的员工工资,按照其部门编号生成平均工资和明细行号生成平均工资和明细行 select 姓名姓名, 工资工资,部门编号部门编号 from 员工员工 where 部门编号部门编号in(1,2) order by 部门编号部门编号 compute avg(工资工资) by 部门编号部门编号.【例】【例】 在员工表中查询部门编号为在员工表中查询部门编号为1或或2的员工工的员工工资,并统计各部门男女员工的平均工资资

42、,并统计各部门男女员工的平均工资 select 姓名姓名,性别性别,工资工资,部门编号部门编号 from 员工员工 where 部门编号部门编号in(1,2) order by 部门编号部门编号,性别性别,员工编号员工编号 compute avg(工资工资) by 部门编号部门编号,性别性别.5.3 5.3 连接查询连接查询 . . 连接的类型分为内连接、外连接和交叉连接。连接的连接的类型分为内连接、外连接和交叉连接。连接的格式有两种如下。格式有两种如下。格式一:适用于所有连接格式一:适用于所有连接SELECT FROM ON ( )格式二:只适用于内连接格式二:只适用于内连接 SELECT

43、FROM , WHERE . . .5.3.2 5.3.2 交叉连接查询交叉连接查询 u交叉连接也称为笛卡儿乘积,它返回两个表中所有数交叉连接也称为笛卡儿乘积,它返回两个表中所有数据行的全部组合,即交叉连接结果集中的数据行数等据行的全部组合,即交叉连接结果集中的数据行数等于第一个表中的数据行数乘以第二个表中的数据行数。于第一个表中的数据行数乘以第二个表中的数据行数。u交叉连接使用关键字交叉连接使用关键字CROSS JOINCROSS JOIN来创建,并且不带连来创建,并且不带连接条件。接条件。 u在实际的应用中,交叉连接的使用是比较少的,但是在实际的应用中,交叉连接的使用是比较少的,但是它是理

44、解外连接和内连接的基础。它是理解外连接和内连接的基础。.u例:查询员工表与部门表的所有组合例:查询员工表与部门表的所有组合 select select 员工员工. .* *, ,部门部门. .* * from from 员工员工 cross join cross join 部门部门.内连接内连接 内连接把两个表中的数据,通过连接条件,连接内连接把两个表中的数据,通过连接条件,连接生成第生成第3 3个表,仅包含那些满足连接条件的数据行。个表,仅包含那些满足连接条件的数据行。内连接分为等值连接、非等值连接和自然连接。内连接分为等值连接、非等值连接和自然连接。【例【例1】查询已订购了商品客户的公司名

45、称,联系人】查询已订购了商品客户的公司名称,联系人姓名和所订商品编号和订购数量。姓名和所订商品编号和订购数量。【例【例2】查询】查询“国皓科技有限公司国皓科技有限公司”的订单信息的订单信息 .上例查询语句上例查询语句u【例【例1 1】查询已订购了商品客户的公司名称,】查询已订购了商品客户的公司名称,联系人姓名和所订商品编号和订购数量。联系人姓名和所订商品编号和订购数量。 select select 公司名称公司名称, ,联系人姓名联系人姓名, ,商品编号商品编号, ,订购数量订购数量 from from 客户客户 inner join inner join 销售订单销售订单 on on 客户客

46、户. .客户编号客户编号= =销售订单销售订单. .客户编号客户编号或或 select select 公司名称公司名称, ,联系人姓名联系人姓名, ,商品编号商品编号, ,订购数量订购数量 from from 客户客户, ,销售订单销售订单 where where 客户客户. .客户编号客户编号= =销售订单销售订单. .客户编号客户编号.上例查询语句上例查询语句【例【例2】查询】查询“国皓科技有限公司国皓科技有限公司”的订单信息的订单信息select 客户客户.公司名称公司名称,销售订单销售订单.*from 客户客户 join 销售订单销售订单on 客户客户.客户编号客户编号=销售订单销售订

47、单.客户编号客户编号where 公司名称公司名称=国皓科技有限公司国皓科技有限公司或或:select 客户客户.公司名称公司名称,销售订单销售订单.*from 客户客户,销售订单销售订单where 客户客户.客户编号客户编号=销售订单销售订单.客户编号客户编号and 公司名称公司名称=国皓科技有限公司国皓科技有限公司.u【例【例3 3】查询】查询“国皓科技有限公司国皓科技有限公司”订购的商品信息,包括客户订购的商品信息,包括客户编号,公司名称,商品编号,商品名称,商品价格,订购数量。编号,公司名称,商品编号,商品名称,商品价格,订购数量。 select a. select a.客户编号客户编号

48、, ,公司名称公司名称,c.,c.商品编号商品编号, ,商品名称商品名称, ,单价单价, ,订购订购数量数量 from from 客户客户 a join a join 销售订单销售订单 as b on a.as b on a.客户编号客户编号=b.=b.客户编号客户编号 join join 商品商品 as c on c.as c on c.商品编号商品编号=b.=b.商品编号商品编号 where where 公司名称公司名称=国皓科技有限公司国皓科技有限公司或或 select a.select a.客户编号客户编号, ,公司名称公司名称,c.,c.商品编号商品编号, ,商品名称商品名称, ,单

49、价单价, , 订购数量订购数量from from 客户客户a,a,销售订单销售订单as b,as b,商品商品as cas cwhere a.where a.客户编号客户编号=b.=b.客户编号客户编号 and c.and c.商品编号商品编号=b.=b.商品编号商品编号and and 公司名称公司名称=国皓科技有限公司国皓科技有限公司 .自连接查询自连接查询u连接不仅可以在表之间进行,也可以使连接不仅可以在表之间进行,也可以使,这种连接称为,这种连接称为),相应的查询称为),相应的查询称为。.u 例例 查询订购过查询订购过1 1号和号和3 3号两种商品的客户编号号两种商品的客户编号selec

50、t distinct a.select distinct a.客户编号客户编号from from 销售订单销售订单as a join as a join 销售订单销售订单as bas bon a.on a.客户编号客户编号=b.=b.客户编号客户编号where a.where a.商品编号商品编号=1 and b.=1 and b.商品编号商品编号=3=3或或select distinct a.select distinct a.客户编号客户编号from from 销售订单销售订单as a ,as a ,销售订单销售订单as bas bwhere a.where a.客户编号客户编号=b.=b

51、.客户编号客户编号and a.and a.商品编号商品编号=1 and b.=1 and b.商品编号商品编号=3=3.外连接外连接 u分类:左外连接、右外连接和全外连接。分类:左外连接、右外连接和全外连接。u左向外连接:结果集中将包含两个表中满足连接条件的左向外连接:结果集中将包含两个表中满足连接条件的连接行和第一个连接表中不满足条件的数据行(对应第连接行和第一个连接表中不满足条件的数据行(对应第二个表中的数据为二个表中的数据为NULLNULL)。)。u右向外连接:结果集中将包含满足连接条件的连接行和右向外连接:结果集中将包含满足连接条件的连接行和第二个连接表中不满足条件的数据行(对应第一个

52、表中第二个连接表中不满足条件的数据行(对应第一个表中的数据为的数据为NULLNULL)。)。u完整外部连接:返回左外连接和右外连接结果的集合。完整外部连接:返回左外连接和右外连接结果的集合。.左外连接左外连接 语法如下:语法如下:SELECT FROM 左表名左表名 LEFT OUTER JOIN 右表名右表名ON 连接条件连接条件 【例】查询是否所有的员工均接受了销售订单,包括员工的【例】查询是否所有的员工均接受了销售订单,包括员工的姓名和订单信息。姓名和订单信息。 select 姓名,销售订单.* from 员工left join 销售订单on 员工.员工编号=销售订单.员工编号order

53、 by 销售订单号 desc.右外连接右外连接右外连接的语法如下。右外连接的语法如下。SELECT FROM 左表名左表名 RIGHT OUTER JOIN 右表名右表名ON 连接条件连接条件 包括右表(出现在包括右表(出现在 JOIN JOIN 子句的最右边)中的子句的最右边)中的所有行。不包括左表中的不匹配行。所有行。不包括左表中的不匹配行。【例】查询所有供应商提供的商品情况。【例】查询所有供应商提供的商品情况。select 采购订单采购订单.* ,供应商名称供应商名称from 采购订单采购订单 right join 供应商供应商on 采购订单采购订单.供应商编号供应商编号=供应商供应商.

54、供应商编号供应商编号.全外连接全外连接全外连接的语法如下。全外连接的语法如下。SELECT FROM 左表名左表名 FULL OUTER JOIN 右表名右表名ON 连接条件连接条件 包括所有连接表中的所有记录,不论它们是否匹配。包括所有连接表中的所有记录,不论它们是否匹配。【例】使用全外连接查询客户和商品的订购信息,包括客户名称、【例】使用全外连接查询客户和商品的订购信息,包括客户名称、联系人姓名、订购的商品名称、订购的数量和订购日期。联系人姓名、订购的商品名称、订购的数量和订购日期。 select 公司名称公司名称,联系人姓名联系人姓名,商品名称商品名称,订购数量订购数量,订购日期订购日期

55、 from 客户客户full join 销售订单销售订单 on 客户客户.客户编号客户编号=销售订单销售订单.客户编号客户编号 full join 商品商品 on 商品商品.商品编号商品编号=销售订单销售订单.商品编号商品编号.5.4 5.4 嵌套查询嵌套查询u嵌套查询嵌套查询 u在在Where或或select子句的表达式中出现另一个查询的子句的表达式中出现另一个查询的情况情况u子查询子查询 是指嵌套在其他是指嵌套在其他SQLSQL语句中的语句中的SELECTSELECT语句,如嵌套在语句,如嵌套在SELECTSELECT、INSERTINSERT、UPDATEUPDATE、DELETEDEL

56、ETE语句或其他子查询中。语句或其他子查询中。任何允许使用表达式的地方都可以使用子查询。任何允许使用表达式的地方都可以使用子查询。 子查询也称为内部查询或内部选择,而包含子查询子查询也称为内部查询或内部选择,而包含子查询的语句称为外部查询或外部选择。通常,子查询作为外的语句称为外部查询或外部选择。通常,子查询作为外部选择的选取条件或数据来源。部选择的选取条件或数据来源。 .嵌套查询的嵌套查询的用法用法u当当wherewhere或者或者selectselect子句中需使用集合函数时子句中需使用集合函数时可使用子查询可使用子查询u可用于解决多表查询可用于解决多表查询 ,主查询和子查询输出,主查询和

57、子查询输出的字段可以来自于一个表或多个表的字段可以来自于一个表或多个表.嵌套查询的类型嵌套查询的类型u1. 1. 非相关子查询:不依赖于外部查询的子查询。这类非相关子查询:不依赖于外部查询的子查询。这类子查询的执行过程是:首先执行子查询,子查询的结果子查询的执行过程是:首先执行子查询,子查询的结果不被显示出来,而是传递给外部查询,作为外部查询的不被显示出来,而是传递给外部查询,作为外部查询的条件来使用。然后执行外部查询,并显示整个查询结果条件来使用。然后执行外部查询,并显示整个查询结果u2.2.相关子查询:在相关子查询中,子查询的执行依赖于相关子查询:在相关子查询中,子查询的执行依赖于外部查询

58、,多数情况下是在外部查询,多数情况下是在WHEREWHERE子句中引用了外部查子句中引用了外部查询的表。询的表。u相关子查询的执行过程是:子查询为外部查询的每一行执行一次,相关子查询的执行过程是:子查询为外部查询的每一行执行一次,外部查询将引用的外部字段的值传给子查询,进行子查询操作;外部查询将引用的外部字段的值传给子查询,进行子查询操作;外部查询根据子查询得到的结果集返回满足条件的结果行;外部外部查询根据子查询得到的结果集返回满足条件的结果行;外部表的每一行都将作相同的处理。表的每一行都将作相同的处理。. 子查询与子查询与SELECTSELECT语句的使用语法完全相同,但在使用语句的使用语法

59、完全相同,但在使用时必须遵守以下原则。时必须遵守以下原则。u整个子查询语句使用小括号()括起来。u在比较运算中使用的子查询的选择列表只能包括一个表达式或列名称。u如果外部查询的WHERE子句包括某个列名,则该子句中使用的子查询选择列表中该列的数据类型必须兼容(在不同时可相互转换)。u子查询的选择列表中不能使用ntext、text和image数据类型的列。 .u如果比较运算符之后未接ANY(SOME)或ALL关键字,则子查询不能使用GROUP BY和HAVING子句。u使用了GROUP BY的子查询不能使用DISTINCT关键字。u子查询中不能使用COMPUTE和INTO子句。u只有在子查询中使

60、用了TOP关键字时,才可以使用ORDER BY子句。u按约定,通过EXISTS表达式中使用的子查询的选择列表由星号(*)组成,而不使用单个列名。 . 子查询的返回结果可分为3种:单一值、单列的多行数单一值、单列的多行数据(多值)、多列的多行数据(记录行)。这三种不据(多值)、多列的多行数据(记录行)。这三种不同类型的返回结果对应了不同的使用方法。同类型的返回结果对应了不同的使用方法。u直接使用单一的返回结果。例如,使用在=、 , ,= =,=,!=!=或或等比较运算符参加相关表达式的运算。等比较运算符参加相关表达式的运算。【例【例 1】查找员工】查找员工“姚安娜姚安娜”所在的部门名称。所在的部

温馨提示

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

评论

0/150

提交评论