1 / 93

数据查询

数据查询. 第三章 第二部分. SELECT 是关键字. 是数据库中检索信息的唯一方式. 3.3 表中数据的检索. 3.3.1 SELECT 语句概述. SELECT 语句可以完成以下工作 投影:用来选择表中的列 选择:用来选择表中的行. 3.3.1 SELECT 语句概述. 联接 : 将两个关系拼接成一个关系 联接是通过联接条件来控制的,联接条件为公共属性,或者具有相同语义、可比的属性。. 3.3.1 SELECT 语句概述. SELECT 语句可从数据库中检索信息。形式最简单的 SELECT 语句必须包含以下内容:

Download Presentation

数据查询

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 数据查询 第三章 第二部分

  2. SELECT 是关键字 是数据库中检索信息的唯一方式

  3. 3.3 表中数据的检索

  4. 3.3.1 SELECT语句概述 • SELECT 语句可以完成以下工作 • 投影:用来选择表中的列 • 选择:用来选择表中的行

  5. 3.3.1 SELECT语句概述 联接: • 将两个关系拼接成一个关系 • 联接是通过联接条件来控制的,联接条件为公共属性,或者具有相同语义、可比的属性。

  6. 3.3.1 SELECT语句概述 • SELECT 语句可从数据库中检索信息。形式最简单的SELECT 语句必须包含以下内容: • 一个SELECT子句,该子句指定要显示的列 • 一个FROM 子句,该子句指定SELECT 子句中的各列所在的表

  7. 源表名 需要查询的列 3.3.1 SELECT语句概述 SELECT [ALL|DISTINCT][TOP n [PERCENT]]select_list [ INTO new_table ] FROM table_name [ WHERE search_condition ] [ GROUP BY group_by_expression ] [ HAVING search_condition ] [ ORDER BY order_expression [ ASC | DESC ] ] 关键字 关键字

  8. 3.3.2 列的检索 • 选择列就是垂直地划分数据,限制返回结果中的列,这由SELECT语句中的SELECT子句指定要返回的列来控制 SELECT select_list FROM table_name 由select_list决定

  9. 选择所有列 • 在SELECT关键字后加上一个星号(*),可以显示表中数据的所有列。 SELECT * FROM table_name • 还可以通过单独列出表中的各个列来显示它们。 例3-6 查询本校教师信息 SELECT 教师编号,教师姓名,系,专业方向,职称 From 本校教师 SELECT * FROM 本校教师

  10. 选择所有列

  11. 选择特定的列 • 若要选择表中的特定列,只需在SELECT 子句中列出每个所需的列名并使用逗号分隔每个名称即可。 SELECT column_name1[,column_name2,…] FROM table_name --例3-7 选择“学生”表中的姓名、联系电话、家庭住址和邮编 SELECT 姓名,联系电话,家庭住址,邮编 FROM 学生 • 注意: • 在数据查询时,列的显示顺序由SELECT语句的SELECT子句指定,顺序可以和列定义时顺序不同,这并不影响数据在表中的存储顺序。 • 在查找多列内容时,用‘,’将各字段分开。

  12. 使用算术运算符 在SELECT子句中可以使用算术运算符对数值型数据列进行加(+)、减(-)、乘(*)、除(/)和取模(%)运算,构造计算列。 • 注意,使用这些运算符并不能在表中创建新列, 也不能更改实际的数据值。 • 这些计算的结果仅显示在输出中。 例:从Northwind数据库的Products表中查询产品ID(ProductID)、产品名称(ProductName)、产品单价(UnitPrice)、产品库存量(UnitsInStock)及产品的总价值

  13. 使用算术运算符

  14. 用“+”连接字符串

  15. 使用系统函数 • getdate()取当前系统时间 • year(时间)取指定日期的年份

  16. 怎么知道有哪些系统函数? • 查看系统函数:数据库→Educate→可编程性→函数→系统函数→在12个类别中展开其中一类→具体某个函数→参看参数与返回值 • 鼠标指向某函数时可看到说明函数作用的系统提示

  17. 使用别名 • 为了增加查询的可读性,可以给列取别名 • 两种方法: • 列名 AS ‘列标题’(AS关键字可省) • ‘列标题’=列名 --例-19 查询学生的姓名、性别和年龄,给通过计算得到的年龄列取一个新列名“年龄”

  18. 使用别名

  19. 增加说明列 • 为了增加查询结果的可读性,可以在SELECT子句中增加一些说明列,增加的说明文字串需用单引号括起来。

  20. 3.3.3 行的检索 使用WHERE子句的目的是从表中筛选出符合条件的行,其语法形式如下: SELECT column_name1[,column_name2,…] FROM table_name WHERE search_condition SQL Server支持的查询条件包括比较运算、逻辑运算、模糊匹配、范围、列表、以及是否为空等 定义查询条件

  21. 比较搜索条件 使用比较运算符 • WHERE子句中允许使用的比较运算符包括:

  22. 使用比较运算符

  23. 使用逻辑运算符 在WHERE子句中可以使用逻辑运算符把若干个查询条件连接起来,构成一个复杂的条件进行查询。可以使用的逻辑运算符包括:逻辑与(AND)、逻辑或(OR)和逻辑非(NOT)。语法形式如下: [NOT]search_condition {AND|OR} [NOT]search_condition

  24. 比较搜索条件

  25. 比较搜索条件 注意:如果NOT所修饰的查询条件不是单个的,而是复合的,则需要用圆括号()把复合条件括起来。

  26. 使用查询范围 在WHERE子句中使用BETWEEN关键字可以对表中某一范围内的数据进行查询,系统将逐行检查表中的数据是否在BETWEEN关键字设定的范围内。如果在其设定的范围内,则取出该行,否则不取该行。语法形式如下: column_name [NOT] BETWEEN 表达式1 AND 表达式2 等同于使用>=、<=和and所限定的范围

  27. 使用查询范围

  28. 使用查询列表 如果列值的取值范围不是一个连续的区间,而是一些离散的值,就应使用SQL Server提供的另一个关键字IN 。语法形式如下: column_name [ NOT ] IN (value1,value2,…) 等同于使用or连接的多个条件

  29. 使用查询列表

  30. 字符串模糊匹配 前面的查询条件是确定的,但如果条件不确定,必须使用LIKE关键字进行模糊查询。语法形式如下: expression [ NOT ] LIKE ‘string’ 可以使用四种匹配符:%、_、[]、[^] 匹配字符串

  31. 字符串模糊匹配

  32. 字符串模糊匹配

  33. 字符串模糊匹配

  34. 课堂练习 1.小王需要显示从2007年1月1日到2007年12月31日雇佣的所有职员的姓名和雇佣日期。职员信息表tblEmployees包含列Name和列HireDate,下面哪些语句能完成该功能? A. SELECT Name, HireDate FROM tblEmployees B. SELECT Name, HireDate FROM tblEmployees WHERE HireDate =′2007-01-01‘ OR HireDate ='2007-12-31' C. SELECT Name, HireDate FROM tblEmployees WHERE HireDate BETWEEN '2006-12-31'AND'2008-01-01' D. SELECT Name, HireDate FROM tblEmployees WHERE DATEPART(yy, HireDate) =2007

  35. 空值的判定 • 在SQL Server中,用NULL表示空值,它仅仅是一个符号,不等于空格,也不等于0 • 若要在查询中测试空值,可在WHERE 子句中使用IS NULL 或IS NOT NULL • 语法形式如下: column_name IS [ NOT ] NULL --例-17 查询成绩表中无成绩的学号和课程。 USE Educate go SELECT学号,课程号 FROM成绩 WHERE成绩IS NULL

  36. DISTINCT关键字 使用DISTINCT关键字可以从返回的结果数据集中删除重复的行,语法形式为: SELECT [ALL|DISTINCT]column_name1[,column_name2,…] FROM table_name WHERE search_condition 注意:DISTINCT关键字的作用范围是整个查询的结果集,而不是单独的一列。如果同时对两列数据进行查询时,使用了DISTINCT关键字,将返回这两列数据的唯一组合。 允许重复数据出现,是默认的关键字 从结果集中删除重复的行 注意:DISTINCT关键字可以返回简单明了的数据,但服务器需要花费额外的时间对查询到的数据进行分类、管理,使查询速度减慢,若不必要,不使用DISTINCT关键字。

  37. DISTINCT关键字

  38. TOP关键字 使用TOP关键字可以返回表中前面一定数量的数据,语法形式为: SELECT [TOP integer|TOP integer PERCENT] column_name FROM table_name 用integer表示返回的行数 用百分比表示返回的行数 表示返回表中最前面的几行

  39. TOP关键字

  40. *3.3.5 数据转换 • 有时在查询中需要将结果以另外一种形式显示出来可以使用CASE子句指定数据的转换。

  41. 3.3.11 排序 • 在SQL Server中,通过ORDER BY子句,可以将查询结果进行排序显示。其语法形式为: SELECT select_list FROM table_name WHERE condition ORDER BY column_name|alias|position[ASC|DESC] 按升序排列,可省略 按降序排列 位置 列名 别名

  42. 排序 注意:ORDER BY子句默认为升序排列,即默认使用ASC关键字,如果特别要求按降序排列,必须使用DESC关键字。

  43. 排序 • 可以使用列所处的位置来指定排序列 第4个列

  44. 排序 • 当ORDER BY子句指定了多个排序列时,系统先按照ORDER BY子句中第一列的顺序排列,当该列出现相同值时,再按照第二列的顺序排列,依次类推

  45. 课堂练习 2.在SQL Server 2005创建订单表,创建语句如下: CREATE TABLE 订单表 ( 订单代号int IDENTITY(1,1) PRIMARY KEY, 客户代号int not null, 雇员代号int not null, --经手该笔业务的雇员的代号 订单日期datetime not null, 销售金额money not null, 备注varchar(200) null ) 小王需要获得订单信息列表,包括雇员代号、销售金额和订单日期。他想按日期从近到 早的顺序显示,并且对于每一天的订单,按销售金额从大到小的顺序排序。下面哪条语句能够准确地完成该任务?

  46. 课堂练习 A. SELECT 雇员代号, 销售金额, 订单日期 FROM 订单表 ORDER BY销售金额, 订单日期 DESC B. SELECT 雇员代号, 销售金额, 订单日期 FROM 订单表 ORDER BY 订单日期, 销售金额DESC C. SELECT 雇员代号, 销售金额, 订单日期 FROM 订单表 ORDER BY 订单日期 DESC, 销售金额 DESC D. SELECT 雇员代号, 销售金额, 订单日期 FROM 订单表 ORDER BY 销售金额 DESC, 订单日期 DES

  47. 课堂练习 3.下面哪些关键字能影响SELECT语句返回的结果的行数?(多选) A. TOP n B. WHERE C. ORDER BY D. DISTINCT

  48. 3.3.8 连接查询 • 在实际查询中,有时所需要的信息来自于不同的表 • SQL Server提供了实现多表查询的方法――连接查询。所谓连接查询是将多个表通过某个或某些列为条件进行连接,从中检索出关联数据。 • 两个表在查询中的关联方式: • 指定每个表中要用于联接的列(具有相同名字的列) • 指定用于比较各列的值的逻辑运算符(例如= 或<>)

  49. 3.3.8 连接查询 • 语法形式: SELECT column_list FROM { table_name1 [ join_type ] JOIN table_name2 ON connection_condition }[,…n] WHERE search_condition or SELECT column_list FROM table_name1[,…n] WHERE { search_condition AND | OR connection_condition }[,…n] • connection_condition:为连接条件; • join_type:为连接类型。

  50. 内连接(INNER JOIN) • 所谓内连接是多个表通过连接条件中共享列的值进行的比较连接。当未指明连接类型是,缺省为内连接。内连接值显示两个表中所有匹配数据的行。

More Related