数据库的查询和视图

上传人:第*** 文档编号:38907910 上传时间:2018-05-09 格式:DOC 页数:50 大小:698KB
返回 下载 相关 举报
数据库的查询和视图_第1页
第1页 / 共50页
数据库的查询和视图_第2页
第2页 / 共50页
数据库的查询和视图_第3页
第3页 / 共50页
数据库的查询和视图_第4页
第4页 / 共50页
数据库的查询和视图_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《数据库的查询和视图》由会员分享,可在线阅读,更多相关《数据库的查询和视图(50页珍藏版)》请在金锄头文库上搜索。

1、第 4 章 数据库的查询和视图 分配学时:8+8 教学目的及要求:掌握嵌套查询和多表查询的方法,数据汇总的方法。 重点和难点:掌握数据汇总的方法,了解 in、exists 子查询的格式。 教学进程: 4.1 数据库的查询 4.2 视图 4.3 游标4.1.1 选择列 通过 SELECT 语句的项组成结果表的列。 := SELECT ALL | DISTINCT TOP n PERCENT WITH TIES * /*选择当前表或视图的所有列*/ | table_name | view_name | table_alias .* /*选择指定的表或视图的所有列*/ | colume_name |

2、 expression | IDENTITYCOL | ROWGUIDCOL AS column_alias /*选择指定的列*/ | column_alias = expression /*选择指定列并更改列标题*/ , n 本小节讨论上述格式中的常用表示方法。 1. 选择一个表中指定的列 一般情况下,希望包含在结果表中的列表清单在 SELECT 关键字之后,就像前 面用到的那样,当在 SELECT 关键字后面指定*时,就表示全部列都包含在结 果表中。不指定*,可以列出一个表中的某些列,各列名之间要以逗号分隔。4.1.1 选择列 【例 4.1】查询 XSCJ 数据库的 XS 表中各个同学的姓

3、名、专业名和总学分。 USE XSCJ SELECT 姓名,专业名,总学分 FROM XS 执行结果如图 4.1 所示。图 4.1 在 XS 表中选择列4.1.1 选择列 【例 4.2】查询 XS 表中计算机专业同学的学号、姓名和总学分。查询 XS 表中 的所有列。 SELECT 学号,姓名,总学分 FROM XS WHERE 专业名= 计算机 GO SELECT * FROM XS GO 当在 SELECT 语句指定列的位置上使用*号时,表示选择表的所有列。 执行后将列出 XS 表中的所有数据,如图 4.2 所示:4.1.1 选择列图 4.2 XS 表中的所有数据记录4.1.1 选择列 2.

4、 修改查询结果中的列标题 当希望查询结果中的某些列或所有列显示时使用自己选择的列标题时,可以在 列名之后使用 AS 子句来更改查询结果的列标题名。其中 column_alias 是指定 的列标题。 【例 4.3】查询 XS 表中计算机系同学的学号、姓名和总学分,结果中各列的标 题 分别指定为 number、name 和 mark。 SELECT 学号 AS number, 姓名 AS name, 总学分 AS mark FROM XS WHERE 专业名= 计算机 该语句的执行结果如图 4.3 所示。 更改查询结果中的列标题也可以使用 column_alias=expression 的形式。例

5、如: SELECT number = 学号, name = 姓名, mark = 总学分 FROM XS WHERE 专业名= 计算机 该语句的执行结果与上例的结果完全相同。4.1.1 选择列图 4.3 更改查询结果的列标题 注意,当自定义的列标题中含有空格时,必须使用引号将标题括起来。例如:SELECT Student number = 学号,姓名 AS Student name , mark = 总学分 FROM XS WHERE 专业名= 计算机4.1.1 选择列 3. 替换查询结果中的数据 在对表进行查询时,有时对所查询的某些列希望得到的是一种概念而不是具体 的数据。例如查询 XS 表

6、的总学分,所希望知道的是学习的总体情况,这时, 就可以用等级来替换总学分的具体数字。 要替换查询结果中的数据,则要使用查询中的 CASE 表达式,格式为: CASE WHEN 条件 1 THEN 表达式 1 WHEN 条件 2 THEN 表达式 2 ELSE 表达式 END SQL Server 按照顺序计算每一个条件,如果找到条件为真的语句,SQL Server 就执行 TEHN 关键字后的表达式;否则执行可选的 ELSE 关键字后的语句。若 没有为真的条件,也没有关键字,则 CASE 表达式返回值为空。4.1.1 选择列 【例 4.4】查询 XS 表中计算机系各同学的学号、姓名和总学分,对

7、其总学分按 以下规则进行替换:若总学分为空值,替换为“尚未选课” ;若总学分小于 50,替换为“不及格” ;若总学分在 50 与 52 之间,替换为“合格” ;若总学分 大于 52,替换为“优秀” 。列标题更改为“等级” 。 SELECT 学号, 姓名,等级= CASE WHEN 总学分 IS NULL THEN 尚未选课 WHEN 总学分 =50 and 总学分(大于) 、=(大于等于) 、= | = 424.1.2 选择行 2. 模式匹配 LIKE 谓词用于指出一个字符串是否与指定的字符串相匹配,其运算对象可以是 char、varchar、text、ntext、datetime 和 sma

8、lldatetime 类型的数据,返回逻辑值 TRUE 或 FALSE。LIKE 谓词表达式的格式为: string_expression NOT LIKE string_expression ESCAPE escape_character 【例 4.9】查询 XSCJ 数据库 XS 表中计算机系的学生情况。查询 XSCJ 数据库 XS 表中姓“王”且单名的学生情况。 SELECT * FROM XS WHERE 专业名 LIKE 计算机 GO SELECT * FROM XS WHERE 姓名 LIKE 王_ GO4.1.2 选择行 使用 LIKE 进行模式匹配时,常使用通配符,即可进行模糊

9、查询。有关通配符 的格式和含义请见附录中介绍 T-SQL 语言的相关说明。 执行结果如图 4.8 所示。图 4.8 模糊查询 若要匹配的内容为通配符的字符(包括%、_、 、) ,可使用关键字 ESCAPE。以告诉系统其后的每个字符均作为实际匹配的字符,而不再作为通 配符。 3. 范围比较 用于范围比较的关键字有两个:BETWEEN 和 IN。 当要查询的条件是某个值的范围时,可以使用 BETWEEN 关键字。BETWEEN关键字指出查询范围,格式为: expression NOT BETWEEN expression1 AND expression24.1.2 选择行 当不使用 NOT 时,若

10、表达式 expression 的值在表达式 expression1 与 expression2 之间(包括这两个值) ,则返回 TRUE,否则返回 FALSE;使用 NOT 时,返回值刚好相反。 注意:expression1 的值不能大于 expression2 的值。 使用 IN 关键字可以指定一个值表,值表中列出所有可能的值,当与值表中的任 一个匹配时,即返回 TRUE,否则返回 FALSE。使用 IN 关键字指定值表的格 式为: expression IN ( expression ,n) 【例 4.10】查询 XSCJ 数据库 XS 表中不在 1989 年出生的学生情况。查询 XSCJ

11、 数据库 XS 表中专业名为“计算机”或“通信工程”或“无线电”的学生 的情况。 SELECT * FROM XS WHERE 出生时间 NOT BETWEEN 1989-1-1 and 1989-12-31 GO SELECT * FROM XS WHERE 专业名 IN (计算机, 通信工程, 无线电) GO4.1.2 选择行 该语句与下列语句等价: SELECT * FROM XS WHERE 专业名 = 计算机 or 专业名 = 通信工程 or 专业名 = 无线 电 说明:IN 关键字最主要的作用是表达子查询。 4. 空值比较 如果两个值当中有一个或者都为空,则对这两个值的比较结果是未

12、知的。 NULL 谓词提供了一种方法,用来测试值为空或者非空。格式为: expression IS NOT NULL 当不使用 NOT 时,若表达式 expression 的值为空值,返回 TRUE,否则返回 FALSE;当使用 NOT 时,结果刚好相反。 【例 4.11】查询 XSCJ 数据库中总学分尚不定的学生情况。 SELECT * FROM XS WHERE 总学分 IS NULL4.1.2 选择行 5. CONTAINS 谓词若需要在表中搜索指定的单词、短语或近义词等,可以使用 CONTAINS 谓词。 CONTAINS 谓词用于在表中搜索指定的字符串,可以是精确匹配,也可以是模 糊

13、匹配,还可以是加权匹配。要使用 CONTAINS 谓词,必须在操作的表上事先 建立全文索引。 CONTAINS ( column | * , ) 上式中,column 表示在指定的列中搜索,*表示在所有列中搜索; 为搜索的限定或说明。:= | | | | | ( ) AND | AND NOT | OR n 说明: simple_term:用于说明搜索的是单词还是短语,格式为:word | “phrase” , word 为单词,即不含空格和标点符号的字符串;短语是含一个或多个空格的字 符串。如果搜索的是短语,则需要用双引号将其括起来。4.1.2 选择行 prefix_term:给出了要搜索的

14、单词或短语必须匹配的前缀,格式为: “word*” | “phase*” 其中 word 为单词,phase 为短语,当查询的串是是短语时,需用双引号定界。 generation_term:说明搜索包含原词的派生词,所谓派生词是指原词的名词单、 复数形式或动词的各种时态等。格式为: FORMSOF ( INFLECTIONAL , ,n) proximity_term:表示搜索包含 NEAR 或运算符左右两边的词或短语,格式为: | NEAR | | nweight_term:指明本语句是加权搜索,即查询的数据与给定的权重进行加权匹 配,格式为: ISABOUT ( | | | WEUGHT

15、(weight_value) ,n ) 其中 weight_value 是一个 01 之间的数,表示权重。 6. FREETEXT 谓词 与 CONTAINS 谓词类似,FREETEXT 谓词也用于在一个表中搜索单词或短语, 并要求表已建全文索引。格式为: FREETEXT ( column | * , freetext_string ) 其中 freetext_string 是要搜索的字符串。 FREETEXT 的查询精度没有 CONTAINS 高,他并不要求对它们进行严格的模 式匹配。 FREETEXT 对所查询的串也没有写法要求,因此 FREETEXT 也称为 自由式查询。4.1.2 选

16、择行 7. 子查询子查询通常与 IN、EXIST 谓词及比较运算符结合使用。 (1)IN 子查询 IN 子查询用于进行一个给定值是否在子查询结果集中的判断,格式为: expression NOT IN ( subquery ) 其中 subquery 是子查询。当表达式 expression 与子查询 subquery 的结果表中的 某个值相等时,IN 谓词返回 TRUE,否则返回 FALSE;若使用了 NOT,则返 回的值刚好相反。 【例 4.12】在 XSCJ 数据库中有描述课程情况的表 KC 和描述学生成绩表的表 XS_KC,表的结构和样本数据见附录 A。要查找选修了课程号为 101 的课程的 学生的情况:

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号