第6章 数据查询.ppt_第1页
第6章 数据查询.ppt_第2页
第6章 数据查询.ppt_第3页
第6章 数据查询.ppt_第4页
第6章 数据查询.ppt_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

1、2020/7/28,主讲人:李翠琳,第6章 数据查询,本章任务:销售管理数据的查询操作,2020/7/28,2,技能目标,在销售管理系统数据库中能根据按照指定的要求灵活、快速地查询相关信息。,2020/7/28,3,知识目标,掌握SELECT语句语法格式; 掌握最基本的查询技术; 掌握条件查询技术;掌握多重条件查询技术; 掌握连接查询技术;掌握嵌套查询。,2020/7/28,4,SELECT语句的语法格式,SELECT INTO FROM 数据源列表 WHERE GROUP BY HAVING ORDER BY ASC | DESC ,2020/7/28,5,SELECT语句各子句的功能,(1

2、)SELECT子句:指定查询返回的列。 (2)INTO子句:将检索结果存储到新表或视图中。 (3)FROM子句:用于指定查询列所在的表和视图。 (4)WHERE子句:指定用于限制返回的行的搜索条件。 (4)GROUP BY子句:指定用来放置输出行的组。并且如果 SELECT 子句 中包含聚合函数,则计算每组的汇总值。 (5)HAVING子句:指定组或聚合的搜索条件。HAVING 通常与 GROUP BY 子句一起使用。 (6)ORDER BY子句:指定结果集的排序。,2020/7/28,6,SELECT 语句的执行方式,SQL Server2005 提供了查询编辑器,用于编辑和运行查询代码。

3、【例】查询所有员工的信息。 操作的具体步骤如下。 (1)启动SQL Server Management Studio。 (2)在【对象资源管理器】中,单击工具栏的【新建查询】按钮,打开查询编辑器。 (3)在查询编辑器中,输入如下代码。 SELECT * FROM employee (4)单击【工具栏】的按钮,进行语法分析。在【结果】窗体中出现“命令已成功完成”的消息,表示当前的查询语句没有语法错误。 (5)单击按钮,在当前数据库中执行查询语句。,2020/7/28,7,简单查询-SELECT 子句,1、查询所有的列(使用*) 【例】从商品表中查询所有商品的信息 。 Select * from

4、Product 2、查询指定的列 【例】从客户表中检索所有客户的公司名称、联系人姓名和地址。 3、使用TOP 关键字 【例】检索客户表中前5位客户的公司名称、联系人姓名和地址。 Select TOP 5 CompanyName,ContactName,Address From Customer,Select TOP N| TOP N PERCENT 列名 FROM 表名,2020/7/28,8,4、使用DISTINCT 关键字 【例】从员工表中查询所有员工的部门信息,并消去重复记录。 Select DISTINCT DepartmentID FROM Employee,Select DISTI

5、NCT|ALL 列名 表 FROM 表名 DISTINCT:消去结果中的重复行 ALL:允许重复行出现,这是默认的关键字,2020/7/28,9,简单查询-SELECT 子句(续),5、更改列标题 方法: 采用“列标题=列名”的格式 采用“列名 列标题”的格式 采用“列名 as 列标题”的格式 【例】查询每个员工的姓名和性别,并在每人的姓名标题上显示“员工姓名”。 select 员工姓名=EmployeeName,sex AS 性别 From Employee,2020/7/28,10,简单查询-SELECT 子句(续),6、使用计算列 【例】查询所有员工的工资在提高10%后信息,将提高后的工

6、资列标题为“提高后工资”。 Select 员工姓名= EmployeeName,Salary 原工资, Salary*1.1 提高后工资 From Employee 7、使用聚合函数 【例】统计公司有多少名员工。 Select count(*) from Employee,2020/7/28,11,简单查询- INTO 子句,INTO 子句用于将查询的结果插入新表中,其语法格式如下。 INTO 新表名 【例】使用INTO子句创建一个包含员工姓名和工资,并命名为new_employee的新表。 USE CompanySales GO SELECT EmployeeName,Salary INTO

7、 new_employee FROM employee GO,2020/7/28,12,简单查询- WHERE子句,使用WHERE子句的目的是为了从表格的数据集中过滤出符合条件的行。 其语法格式如下: SELECT INTO FROM WHERE ,2020/7/28,13,简单查询- WHERE子句(续),1、使用算术表达式 【例】查询员工“蔡慧敏”的工资。 【例】 在CompanySales数据库的员工表(employee)中,查询工资大于3000元的员工信息 2、使用逻辑表达式 【例】在CompanySales数据库的员工表(employee)中,查询工资在3400元以下的女性员工姓名和

8、工资信息。,USE CompanySales GO SELECT EmployeeName 姓名,salary 工资 FROM employee WHERE sex=女and salary 3400 GO,2020/7/28,14,3、使用搜索范围 使用关键字Betweenand,即查询介于两个值之间的记录信息。语法格式如下。 NOT BETWEEN AND 【例5.17】查询CompanySales数据库的员工表(employee)中,工资在5000元到7000元的员工信息。,USE CompanySales GO SELECT * FROM employee WHERE salary be

9、tween 5000 and 7000 GO,2020/7/28,15,简单查询- WHERE子句(续),4、使用IN关键字 IN关键字给出表达式的取值范围。语法: 表达式 NOT IN (值1 , 值2 ,值n) 【例】在CompanySales数据库的销售订单表(Sell_order)中,查询员工编号为1、5和7的员工接受订单信息。,USE CompanySales GO SELECT * FROM Sell_Order WHERE employeeID IN (1,5,7) GO,思考: 在CompanySales数据库的销售订单表(Sell_order)中,查询不是员工编号为1、5和7

10、的员工接受订单信息。,2020/7/28,16,5、使用模糊匹配 LIKE子句格式如下。 NOT LIKE ,2020/7/28,17,【例】找出所有姓“章”的员工信息。 SELECT * FROM employee WHERE employeeName LIKE 章% 思考:找出所有姓“李”和姓“张”的员工信息。 【例】找出所有姓“李”的,名为一个汉字的员工信息。 SELECT * FROM employee WHERE employeeName LIKE 李_ 思考:找出所有不姓“张”的员工信息。,2020/7/28,18,简单查询- WHERE子句(续),6、空或非空性 空和非空的判断准

11、则是IS NULL和IS NOT NULL。 【例】在销售管理数据库中,查找目前有哪些主管位置是为不空。,USE CompanySales GO SELECT DepartmentName,Manager FROM department WHERE manager IS NOT NULL GO,2020/7/28,19,简单查询- ORDER BY子句,语法格式: ORDER BY 排序项 ASC | DESC ,排序项 ASC | DESC,n 【例】按工资降序显示员工的姓名和工资,工资相同时按姓名升序排序 。 USE CompanySales GO SELECT * FROM employ

12、ee ORDER BY salary DESC , employeeName ASC GO,2020/7/28,20,简单查询- GROUP BY子句,如果需要按某一列数据的值进行分类,在分类的基础上再进行查询,就要使用GROUP BY子句,它的语法格式如下。 GROUP BY 【例】查询男女员工的平均工资。 SELECT sex 性别, AVG(salary) 平均工资 FROM employee GROUP BY sex 【例】在销售表Sell_Order表中,统计目前各种商品的订单总数。 SELECT productID 商品编号, SUM(SellOrderNumber) 订单总数 F

13、ROM Sell_Order GROUP BY productID,2020/7/28,21,简单查询- HAVING子句,HAVING子句指定组或聚合的搜索条件。HAVING 只能与 SELECT 语句一起使用。HAVING通常在GROUP BY 子句中使用。如果不使用GROUP BY 子句,则 HAVING的行为与WHERE 子句一样,它的语法格式如下。 HAVING 搜索条件 【例】在销售表Sell_Order表中,查询目前订单总数超过1000的商品订单信息。 SELECT productID 商品编号, SUM(SellOrderNumber) 订单总数 FROM Sell_Order

14、 GROUP BY productID HAVING SUM(SellOrderNumber)1000,Where用于对表中的原始数据进行过滤,而having用于对查询结果按照聚合条件进行过滤,2020/7/28,22,简单查询- COMPUTE 子句,COMPUTE子句可以用于SELECT 语句既查看明细行,又查看汇总行。可以计算分组的汇总值,也可以计算整个结果集的汇总值。语法格式如下。 COMPUTE 聚合函数名 (列名) , N BY 表达式, N 【例 】查询员工表employee中部门编号为1的各员工工资信息,并计算平均工资。 SELECT * FROM employee WHERE

15、 departmentID=1 COMPUTE AVG(salary),2020/7/28,23,【例】 对employee表中部门编号为1或2的员工工资,按照其部门编号生成分组汇总行和明细行,SELECT * FROM employee WHERE departmentID in(1,2) COMPUTE AVG(salary) BY departmentID,SELECT * FROM employee WHERE departmentID in(1,2) ORDER BY departmentID COMPUTE AVG(salary) BY departmentID,错误!,Compu

16、te by 子句必须与order by 子句一起使用,2020/7/28,24,连接查询,连接的类型分为内连接、外连接和交叉连接。连接的格式有两种如下。 格式一: SELECT FROM ON ( ) 格式二: SELECT FROM , WHERE . . ,2020/7/28,25,交叉连接,交叉连接又称笛卡儿积,返回两个表的乘积。 例: 表A有10行数据,表B有20行数据,那么表A和表B交叉连接的结果记录集有400行(1020)数据。 交叉连接使用CROSS JOIN关键字来创建。 说明: 交叉连接只是用于测试一个数据库的执行效率,在实际应用中是无意义的 交叉连接的使用是比较少的,交叉连

17、接不需要连接条件。,2020/7/28,26,交叉连接(续),【例】查询员工表与部门表的所有组合。 USE CompanySales GO SELECT employee.* , department.* FROM employee CROSS JOIN department GO,2020/7/28,27,内连接,内连接把两个表中的数据,通过相同的列,连接生成第3个表,仅包含那些满足连接条件的数据行。内连接分为等值连接、非等值连接和自然连接。 【例】查询已订购了商品客户的公司名称,联系人姓名和所订商品编号和订购数量。 SELECT customer.CompanyName, Contactn

18、ame, Sell_ductID, Sell_order. sellOrderNumber FROM customer INNER JOIN Sell_order ON customer. customerID= Sell_order. customerID,2020/7/28,28,【例】查询“国皓科技有限公司”的订单信息 SELECT panyName,Sell_order. * FROM customer INNER JOIN Sell_order ON customer. customerID= Sell_order. customerID WHERE panyNam

19、e=国皓科技有限公司 GO 说明: 在多表查询中,Select子句或 Where子句中的列名前都加上了表名作为前缀,这样可避免来自不同表中相同属性名发生混淆。,2020/7/28,29,外连接,分类:左外连接、右外连接和全外连接。 左向外连接:只包括左表的所有行,不包括右表的不匹配行的外连接; 右向外连接:只包括右表的所有行,不包括左表的不匹配行的外连接。 完整外部连接:既包括左表不匹配的行,也包括右表的不匹配的行的连接,2020/7/28,30,左外连接,语法如下: SELECT FROM 左表名 LEFT OUTER JOIN 右表名 ON 连接条件 包括左表(出现在 JOIN 子句的最左

20、边)中的所有行。不包括右表中的不匹配行。 【例】查询是否所有的员工均接受了销售订单,包括员工的姓名和订单信息。 SELECT employee.employeename, sell_order.* FROM employee LEFT JOIN sell_order on employee.employeeID = sell_order.employeeID,2020/7/28,31,右外连接,右外连接的语法如下。 SELECT FROM 左表名 RIGHT OUTER JOIN 右表名 ON 连接条件 包括右表(出现在 JOIN 子句的最右边)中的所有行。不包括左表中的不匹配行。 【例】查询

21、是否所有的供应商提供的商品情况。 USE CompanySales GO SELECT Purchase_order.*,viderName FROM Purchase_order RIGHT JOIN provider on Purchase_viderID=viderID GO,2020/7/28,32,全外连接,全外连接的语法如下。 SELECT FROM 左表名 FULL OUTER JOIN 右表名 ON 连接条件 包括所有连接表中的所有记录,不论它们是否匹配。 【例】使用全外连接查询客户和商品的订购信息,包括客户名称

22、、联系人姓名、订购的商品名称、订购的数量和订购日期。 SELECT C.CompanyName,C.Contactname,P.productName, S.sellOrderNumber, S.SellOrderDate FROM customer C FULL JOIN sell_order S on C.customerID=S.customerID FULL JOIN Product P on P.productID=S.productID,思考:P136实训第8题,2020/7/28,33,嵌套查询,在SQL中,将一条SELECT语句作为另一条SELECT语句的一部分称为嵌套查询。外

23、层的SELECT语句被称为外部查询或父查询,内层的SELECT语句成为内部查询或子查询。 嵌套查询如下。 SELECT /*外层查询或父查询*/ FROM WHERE IN ( SELECT /*内层查询或子查询*/ FROM WHERE ),2020/7/28,34,单值嵌套,单值嵌套就是通过子查询返回一个单一的数据。当子查询返回的是单值,可以使用,=,!=或等比较运算符参加相关表达式的运算。,2020/7/28,35,单值嵌套(续),【例 】查找员工“姚安娜”所在的部门名称。 步骤1:查询员工“姚安娜”所在的部门编号,查询语句如下。 SELECT departmentID FROM emp

24、loyee WHERE employeeName =姚安娜 得到的结果为 3 步骤2:查询部门编号为3 的部门名称。 SELECT departmentName FROM department WHERE departmentID =3 得到结果为“人事部”。 组合: SELECT departmentName 部门名称 FROM department WHERE departmentID =(SELECT departmentID FROM employee WHERE employeeName=姚安娜),2020/7/28,36,单值嵌套(续),【例 】查找年龄最小的员工姓名、性别和工资。

25、 USE CompanySales GO SELECT employeeName 姓名, sex 性别, BirthDate 出生年月, salary 工资 FROM employee WHERE BirthDate=(SELECT MAX(BirthDate) FROM employee ) GO 思考题:P136实训5的第7题,2020/7/28,37,多值嵌套,子查询的返回结果是一列值的嵌套查询称为多值嵌套查询。多值嵌套查询经常使用IN操作符。IN操作符使用的格式如下。 表达式 NOT IN (子查询) 【例】 查询已经接收销售订单的员工姓名和工资信息。 SELECT EmployeeName 姓名,salary 工资 FROM employee WHERE employeeID IN (SELECT employeeID FROM sell_order) 【例5.44】 查询目前没有接收销售订单的员工姓名和工资信息。,2020/7/28,38,【例5.45】 查询订购牛奶的客户的

温馨提示

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

评论

0/150

提交评论