
数据库的查询和视图.ppt
140页4.1 关系运算 4.2 数据库的查询 4.3 视图 4.4 游标数据库的查询与视图b 1. 选择(Selection) 选择是单目运算,其运算对象是一个表该运算按给定的条件,从表中选出 满足条件的行,形成一个新表,作为运算结果 选择运算的记号为F(R)其中,是选择运算符,下标F是一个条件表达式,R 是被操作的表 例如,若要在T表(表4.1)中找出T1] /*指定临时命名的结 果集*/ SELECT [ ALL | DISTINCT ] [ TOP expression [ PERCENT ] [ WITH TIES ] ] /*指定要选择的列及其限定*/ [ INTO new_table ] /*INTO子句,指定结果存入新表*/ [ FROM table_source ] /*FROM子句,指定表或视图*/ [ WHERE search_condition ] /*WHERE子 句,指定查询条件*/ [ GROUP BY group_by_expression] /*GROUP BY子句,指 定分组表达式*/ [ HAVING search_condition] /*HAVING 子句,指定分组统计条件*/ [ ORDER BY order_expression [ ASC | DESC ] ] /*ORDER子句,指定排序表达式 和顺序*/通过SELECT语句的项组成结果表的列。
语法格式如下:::= { * /*选择当前表或视图的所有列*/| { table_name | view_name | table_alias }.* /*选择指定的表或视图的所有列*/| { column_name | [ ] expression | $IDENTITY | $ROWGUID } /*选择指定的列*/| udt_column_name [ { . | :: } { { property_name | field_name } | method_name(argument [,.n] ) } ] /*选择用户定义数据类型的属性、方法和字段*/ | expression [ [ AS ] column_alias ]/*AS子句,定义列别名*/| column_alias = expression /*选择指定列并更改列标题*/ } [ ,.n ] b 1.选择所有列 使用“*”表示选择一个表或视图中的所有列 【例4.1】 查询PXSCJ数据库中XSB表的所有数据 USE PXSCJ GO SELECT * FROM XSB GO 执行完后SQL Server Management Studio的结果窗口中将显示XSB表的所有数据 。
b 2.选择一个表中指定的列 使用SELECT语句选择一个表中的某些列,各列名之间要以逗号分隔其中, $IDENTITY表示选择标识列,$ROWGUID表示选择ROWGUIDCOL属性的全局标识列 如果在FROM子句中有多个表具有ROWGUIDCOL属性,则必须用特定的表名限定 $ROWGUID,如T1.$ROWGUID 【例4.2】 查询PXSCJ数据库的XSB表中各个同学的姓名、专业和总学分 USE PXSCJ GO SELECT 姓名,专业,总学分 FROM XSB GO SQL Server 2008中还能一次执行多个查询例4.3】 查询XSB表中计算机专业同学的学号、姓名和总学分,查询XSB表中 所有列 SELECT 学号, 姓名, 总学分 FROM XSB WHERE 专业 = '计算机' GO SELECT * FROM XSB执行后在结果窗口中将分别列出两个查询语句的结果,如图4.1所示:图4.1 一次执行多个查询b 3.定义列别名 当希望查询结果中的某些列或所有列显示时使用自己选择的列标题时,可以 在列名之后使用AS子句来更改查询结果的列标题名其中,column_alias是指定的 列别名。
【例4.4】 查询XSB表中计算机系同学的学号、姓名和总学分,结果中各列的 标题分别指定为number、name和mark USE PXSCJ GO SELECT 学号 AS number, 姓名 AS name, 总学分 AS mark FROM XSB WHERE 专业= '计算机'执行结果如下:更改查询结果中的列标题也可以使用column_alias=expression的形式例如, SELECT number= 学号, name = 姓名, mark = 总学分 FROM XSB WHERE 专业= '计算机' 该语句的执行结果与上例的结果完全相同 当自定义的列标题中含有空格时,必须使用引号将标题括起来例如, SELECT 'Student number' = 学号,姓名 AS 'Student name', mark = 总学分 FROM XSB WHERE 专业= '计算机'b 4.替换查询结果中的数据 在对表进行查询时,有时希望对所查询的某些列得到的是一种概念而不是具 体的数据例如,查询XSB表的总学分,希望知道的是学习的总体情况,这时,就 可以用等级来替换总学分的具体数字。
要替换查询结果中的数据,则要使用查询中的CASE表达式,格式为 CASE WHEN 条件1 THEN 表达式1 WHEN 条件2 THEN 表达式2…… ELSE 表达式 END【例4.5】 查询XSB表中计算机系各同学的学号、姓名和总学分,对其总学分 按以下规则进行替换:若总学分为空值,则替换为“尚未选课”;若总学分小于50 ,则替换为“不及格”;若总学分在50与52之间,则替换为“合格”;若总学分大于52 ,则替换为“优秀”列标题更改为“等级” USE PXSCJ GO SELECT 学号, 姓名, 等级= CASE WHEN 总学分 IS NULL THEN '尚未选课' WHEN 总学分 =50 and 总学分50; 执行结果为2 【例4.15】 求选修了课程的学生总数 SELECT COUNT(DISTINCT 学号) FROM CJB COUNT_BIG函数的格式、功能与COUNT函数都相同,区别仅在于COUNT_BIG返 回bigint类型值在SQL Server 2008中,选择行是通过在SELECT语句的WHERE子句中指定选择的 条件来实现的这一节将详细讨论WHERE子句中查询条件的构成。
WHERE子句必须 紧跟在FROM子句之后,其基本格式为 WHERE 其中,search_condition为查询条件 ::= { [ NOT ] | ( ) }[ { AND | OR } [ NOT ] { | () } ] [ ,…n ]其中,为判定运算,结果为TRUE、FALSE或UNKNOWNNOT表示对 判定的结果取反,AND用于组合两个条件,两个条件都为TRUE时值才为TRUEOR 也用于组合两个条件,两个条件有一个条件为TRUE时值就为TRUE ::= { expression { = | | >= | = | =(大于等于)、= | 50; 执行结果如下:【例4.18】 查询XSB表中通信工程专业总学分大于等于42的同学的情况 USE PXSCJ GO SELECT * FROM XSB WHERE 专业= '通信工程' AND 总学分 >= 42b 2.模式匹配 LIKE谓词用于指出一个字符串是否与指定的字符串相匹配,返回逻辑值TRUE 或FALSELIKE谓词表达式的格式为 match_expression [ NOT ] LIKE pattern [ ESCAPE Escape_character ] 说明如下。
match_expression:匹配表达式,一般为字符串表达式,在查询语句中可以是 列名 pattern:在match_expression 中的搜索模式串在搜索模式串中可以使用通 配符,表4.11列出了LIKE谓词可以使用的通配符及其说明通 配 符说 明%代表0个或多个字符 _(下画线)代表单个字符 [ ]指定范围(如[a-f]、[0-9])或集合(如[abcdef])中的任何单个字符[^]指定不属于范围(如 [^a-f]、[^0-9])或集合(如[^abcdef])的任何单个字符表4.11 通配符列表Escape_character:转义字符,应为有效的SQL Server字符,Escape_character没 有默认值,且必须为单个字符当模式串中含有与通配符相同的字符时,应通过该 字符前的转义字符指明其为模式串中的一个匹配字符使用ESCAPE可指定转义符 NOT LIKE:使用NOT LIKE与LIKE的作用相反 使用带%通配符的LIKE时,若使用LIKE 进行字符串比较,则模式字符串中的所有 字符都有意义,包括起始或尾随空格 【例4.19】 查询XSB表中姓“王”且单名的学生情况。
SELECT * FROM XSB WHERE 姓名 LIKE '王_ ' 执行结果如下:【例4.20】 查询XSB表中学号倒数第3个数字为1,且倒数第1个数在1~5之间 的学生学号、姓名及专业 SELECT 学号,姓名,专业FROM XSBWHERE 学号 LIKE '%1_[12345]' 如果需要查找一个通配符,则必须使用一个转义字符 【例4.21】 查询XSB表中名字包含下划线的学生学号和姓名 SELECT 学号,姓名FROM XSBWHERE 学号 LIKE '%#_%' ESCAPE '#'b 3.范围比较 用于范围比较的关键字有两个:BETWEEN和IN当要查询的条件是某个值的范 围时,可以使用BETWEEN关键字BETWEEN关键字指出查询范围,格式为: expression [ NOT ] BETWEEN expression1 AND expression2 当不使用NOT时,若表达式expression的值在表达式expression1与expression2之 间(包括这两个值),则返回TRUE,否则返回FALSE;当使用NOT时,返回值刚好相 反 使用IN关键字可以指定一个值表,值表中列出所有可能的值,当与值表中的任 一个匹配时,即返回TRUE,否则返回FALSE。
使用IN关键字指定值表的格式为: expression IN ( expression [,…n]) 【例4.22】 查询XSB表中不在1989年出生的学生情况 SELECT 学号, 姓名, 专业, 出生时间FROM XSBWHERE 出生时间 NOT BETWEEN '1989-1-1' and '1989-12-31'【例4.23】 查询XSB表中专业为“计算机”、“通信工程”或“无线电”的学生情况 SELECT * FROM XSB WHERE 专业 IN ('计算机', '通信工程', '无线电') 该语句与下列语句等价: SELECT * FROM XSB WHERE 专业= '计算机' or 专业= '通信工程' or 专业='无线电'b 4.空值比较 当需要判定一个表达式的值是否为空值时,使用IS NULL关键字,格式为: expression IS [ NOT ] NULL 当不使用NOT时,若表达式expression的值为空值,则返回TRUE,否则返回 FALSE;当使用NOT时,结果刚好相反 【例4.24】 查询总学分尚不定的学生情况 SELECT * FROM XSB WHERE 总学分 IS NULLb 5.CONTAINS谓词 下面介绍如何利用图形化界面向导的方式来新建全文索引,其主要步骤如下。
第1步:要建立全文索引,首先要启动全文搜索服务,这项服务默认是禁用的 启动的方法是:打开“SQL Server配置管理器”窗口,进入“。









![2019版 人教版 高中语文 必修 上册《第一单元》大单元整体教学设计[2020课标]](http://img.jinchutou.com/static_www/Images/s.gif)


