第4章 数据库的查询和视图

更新时间:2023-05-17 18:54:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

4.1 4.2 4.3 4.4

关系运算 数据库的查询 视图 游标

1. 选择(Selection)选择是单目运算,其运算对象是一个表。该运算按给定的条件,从表中选出 满足条件的行,形成一个新表,作为运算结果。 选择运算的记号为 F(R)。其中, 是选择运算符,下标F是一个条件表达式,R 是被操作的表。 例如,若要在T表(表4.1)中找出T1<20的行形成一个新表,则运算式为 F(T) 上式中F:T1<20,该选择运算的结果如表4.2所示。 表4.1 T表T1 1 2 3 5 20 100 T2 A1 B1 A2 D F A3 T3 3 2 12 10 1 2 T4 3 0 12 24 4 8 T5 M N O P Q N

表4.2 F(T)T1 1 T2 A1 T3 3 T4 3 T5 M

23 5

B1A2 D

212 10

012 24

NO P

2. 投影(Projection)投影也是单目运算,该运算从表中选出指定的属性值组成一个新表,记为 ΠA(R)。其中,A是属性名(即列名)表,R是表名。 例如,在T表中对T1、T2和T5投影,运算式为 T1,T2,T5(T) 该运算得到如表4.3所示的新表。 表4.3 T1,T2,T5(T)T1 1 T2 A1 T5 M T1 5 T2 D T5 P

2 3

B1 A2

N O

20 100

F A3

Q N

3. 连接(JOIN)连接是把两个表中的行按照给定的条件进行拼接而形成新表,记为 。其中,R、 S是被操作的表,F是条件。 例如,若表A和B分别如表4.4和表4.5所示,则 如表4.6 A B 所示,其中,F为 F T1=T3。 表4.4 A表T1 T2 T1 T2 T1 T2

1

A

6

F

2

B

表4.5 B表T3 1 T4 3 T5 M T3 2 T4 0 T5 N

表4.6 A B FT11 2

T2A B

T31 2

T43 0

T5M N

数据库应用中最常用的是“自然连接”。进行自然连接运算要求两个表有共同 属性(列),自然连接运算的结果表是在参与操作的两个表的共同属性上进行等值 连接后,再去除重复的属性后所得的新表。自然连接运算记为 ,其中,R和S是参与 运算的两个表。 例如,若表A和B分别如表4.7和表4.8所示,则 如表4.9所示。 表4.7 A表T1 T2 T3 T1 T2 T3 T1 T2 T3

10

A1

B1

5

A1

C2

20

D2

C2

表4.8 B表T1 1 100 T4 100 2 T5 A1 B2 T6 D1 C1 T1 20 5 T4 0 10 T5 A2 A2 T6 D1 C2

表4.9 A BT1 5 20 T2 A1 D2 T3 C2 C2 T4 10 0 T5 A2 A2 T6 C2 D1

当用户登录到SQL Server后,即被指定一个默认数据库,通常是master数据库。 使用USE database_name语句可以选择当前要操作的数据库。其中,database_name 是要选为当前数据库的数据库名。例如,要选择PXSCJ为当前数据库,可以使用如下 语句实现: USE PXSCJ GO下面介绍SELECT语句,它是T-SQL的核心。语法格式如下: [ WITH <common_table_expression>] 果集*/ SELECT [ ALL | DISTINCT ] [ TOP expression [ PERCENT ] [ WITH TIES ] ] <select_list> /*指定要选择的列及其限定*/ [ INTO new_table ] /*INTO子句,指定结果存入新表*/ [ FROM table_source ] /*FROM子句,指定表或视图*/ [ WHERE search_condition ] 句,指定查询条件*/ [ GROUP BY group_by_expression] /*指定临时命名的

/*WHERE子

/*GROUP BY子句,指

通过SELECT语句的<select_list>项组成结果表的列。语法格式如下:<select_list> ::= { * /*选择当前表或视图的所有列*/ | { 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 ]

1.选择所有列使用“*”表示选择一个表或视图中的所有列。 【例4.1】 查询PXSCJ数据库中XSB表的所有数据。 USE PXSCJ GO SELECT * FROM XSB GO 执行完后SQL Server Management Studio的结果窗口中将显示XSB表的所有数据。

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 一次执行多个查询

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 专业= '计算机'

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 THEN '不及格' WHEN 总学分 >=50 and 总学分<=52 THEN '合格' ELSE '优秀' END FROM XSB WHERE 专业= '计算机' GO

执行结果如下:

5.计算列值使用SELECT对列进行查询时,在结果中可以输出对列值计算后的值,即 SELECT子句可使用表达式作为结果,格式为 SELECT expression [ , expression ] 【例4.6】 按120分计算成绩并显示学号为081101的学生的成绩情况。 USE PXSCJ GO SELECT 学号, 课程号, 成绩120=成绩*1.20 FROM CJB WHERE 学号= '081101' 执行结果如下:

6.消除结果集中的重复行对表只选择其某些列时,可能会出现重复行。例如,若对PXSCJ数据库的XSB 表只选择专业和总学分,则出现多行重复的情况。可以使用DISTINCT关键字消除结 果集中的重复行,其格式是 SELECT DISTINCT | ALL column_name [ , column_name…+ 关键字DISTINCT的含义是,对结果集中的重复行只选择一个,保证行的唯一性。 【例4.7】 对PXSCJ数据库的XSB表只选择专业和总学分,消除结果集中的重复 行。 USE PXSCJ GO SELECT DISTINCT 专业,总学分 FROM XSB 执行结果如下:

7.限制结果集返回行数如果SELECT语句返回的结果集的行数非常多,那么可以使用TOP选项限制其返 回的行数。TOP选项的基本格式为 [ TOP expression [ PERCENT ] [ WITH TIES ] ] 指示只能从查询结果集返回指定的第一组行或指定的百分比数目的行。 expression可以是指定数目或百分比数目的行。若带PERCENT关键字,则表示返回 结果集的前expression%行。TOP 子句可以用于 SELECT、INSERT、UPDATE 和 DELETE 语句中。 【例4.8】 对PXSCJ数据库的XSB表选择姓名、专业和总学分,返回结果集的前 6行。 SELECT TOP 6 姓名,专业,总学分 FROM XSB

本文来源:https://www.bwwdw.com/article/hb04.html

Top