Download presentation
Presentation is loading. Please wait.
1
使用SQL Server Management Studio 进行数据查询与维护
5 数据查询 简单SELECT语句 5.1 SELECT语句的统计功能 5.2 SELECT语句中的多表连接 5.3 子 查 询 5.4 使用SQL Server Management Studio 进行数据查询与维护 5.5
2
学习目标 通过本部分的学习,应该掌握以下内容。 数据查询的各种语句
运用SQL Server Management Studio和基本的SELECT语句查询表中的数据 数据维护的基本方法
3
5.1 简单SELECT语句 5.1.1 SELECT语句的语法格式 SELECT语句的基本语法格式如下。 SELECT 列名的列表
[INTO 新表名] [FROM 表名与视图名列表]
4
[WHERE 条件表达式] [GROUP BY 列名的列表] [HAVING 条件表达式] [ORDER BY 列名1[ASC|DESC],列名2[ASC|DESC], ... 列名n[ASC|DESC]]
5
基本的SELECT语句 SELECT语句的基本形式如下。 SELECT 选取的列 FROM 表的列表 WHERE 查询条件
6
5.1.3 使用INTO子句 使用INTO子句允许用户定义一个新表,并且把SELECT子句的数据插入到新表中,其语法格式如下。
FROM 表的列表 WHERE 查询条件
7
使用WHERE子句 WHERE子句确定了查询的条件,表5-1给出了组成查询条件表达式的运算符。
8
表5-1 查询条件表达式的运算符 运算符分类 运 算 符 说 明 比较运算符
表5-1 查询条件表达式的运算符 运算符分类 运 算 符 说 明 比较运算符 >、>=、=、<、<=、<>、!=、!>、!< 比较大小(!>、!< 表示不大于和不小于) 范围运算符 BETWEEN…AND、NOT BETWEEN…AND 判断列值是否在指定的范围内 列表运算符 IN、NOT IN 判断列值是否是列表中的指定值 模糊匹配符 LIKE、NOT LIKE 判断列值是否与指定的字符通配格式相符 空值判断符 IS NULL、NOT NULL 判断列值是否为空 逻辑运算符 AND、OR、NOT 用于多个条件的逻辑连接
9
1.比较运算符 2.范围运算符 3.列表运算符 4.模糊匹配运算符 5.空值运算符 6.逻辑运算符
10
使用ORDER BY子句 在查询结果集中,记录的顺序是按它们在表中的顺序进行排列的,可以使用ORDER BY子句对查询结果重新进行排序,可以规定升序(从低到高或从小到大)或降序(从高到低或从大到小),方法是使用关键字ASC(升序)或DESC(降序)。
11
如果省略ASC或DESC,系统则默认为升序。
可以在ORDER BY子句中指定多个列,检索结果首先按第1列进行排序,第1列值相同的那些数据行,再按照第2列排序,依次类推。 ORDER BY子句要写在WHERE子句的后面。
12
5.2 SELECT语句的统计功能 SELECT语句中的统计功能对查询结果集进行求和、求平均值、求最大最小值等操作。
统计的方法是通过集合函数和GROUP BY子句、COMPUTE子句进行组合来实现的。
13
使用集合函数 集合函数是在查询结果记录的列集上进行各种统计运算,运算的结果形成一条汇总记录。
14
表5-2 SQL Server 2005集合函数及其功能 集 合 函 数 功 能 SUM([ALL|DISTINCT] 列表达式)
功 能 SUM([ALL|DISTINCT] 列表达式) 计算一组数据的和 MIN([ALL|DISTINCT] 列表达式) 给出一组数据的最小值 MAX([ALL|DISTINCT] 列表达式) 给出一组数据的最大值 COUNT({[ALL|DISTINCT] 列表达式}|*) 计算总行数。COUNT(*)返回行数,包括含有空值的行,不能与DISTINCT一起使用 CHECKSUM(*|列表达式[,…n]) 对一组数值的和进行校验,可探测表的变化 BINARY_CHECKSUM(*|列表达式[,…n]) 对二进制的和进行校验,可以探测行的变化 AVG([ALL|DISTINCT] 列表达式) 计算一组值的平均值
15
1.求和函数SUM与求平均值函数AVG SUM和AVG是数值型列值的求和与求平均值函数,它们只能用于数值型字段,而且忽略列值为NULL的记录。
16
2.最大值函数MAX与最小值函数MIN MAX和MIN函数分别用来返回指定列表达式中的最大值和最小值,忽略列值为NULL的记录,列表达式中的列可以是任何可排序的类型。
17
3.计数函数COUNT COUNT函数用于统计查询结果集中记录的个数,语法上,“*”用于统计所有记录的个数,ALL用于统计指定列的列值非空的记录个数,DISTINCT用于统计指定列的列值非空且不重复的记录个数。默认值为ALL。
18
使用GROUP BY 子句 GROUP BY子句就能够实现这种统计,它按照指定的列,对查询结果进行分组统计,该子句写在WHERE子句的后面。
19
注意:SELECT子句中的选择列表中出现的列,或者包含在集合函数中,或者包含在GROUP BY子句中,否则,SQL Server 2005将返回错误信息。
20
语法格式如下。 GROUP BY 列名[HAVING 条件表达式] "HAVING 条件表达式"选项是对生成的组进行筛选。
21
5.2.3 使用COMPUTE BY子句 使用COMPUTE BY子句时必须使用ORDER BY对COMPUTE BY中指定的列进行排序。
语法格式如下。 COMPUTE 集合函数 [BY 列名]
22
5.3 SELECT语句中的多表连接 在实际应用中,数据查询往往会涉及多个表,这就需要将多个表连接起来进行查询。
这种连接分为交叉连接、内连接、外连接和自连接4种。
23
图5-7 连接要使用的表和数据
24
5.3.1 交叉连接 SELECT 列名列表 FROM 表名1 CROSS JOIN 表名2 或者
交叉连接 SELECT 列名列表 FROM 表名1 CROSS JOIN 表名2 或者 SELECT 列名列表 FROM 表名1, 表名2 交叉连接的结果是两个表的笛卡儿积。 交叉连接在实际应用中一般是没有意义的,但在数据库的数学模式上有重要的作用。
25
5.3.2 内连接 内连接是只包含满足连接条件的数据行,是将交叉连接结果集按照连接条件进行过滤的结果,也称自然连接。
内连接 内连接是只包含满足连接条件的数据行,是将交叉连接结果集按照连接条件进行过滤的结果,也称自然连接。 连接条件通常采用“主键=外键”的形式。
26
内连接有以下两种语法格式。 SELECT 列名列表 FROM 表名1 [INNER] JOIN 表名2 ON 表名1.列名=表名2.列名 或 SELECT 列名列表 FROM 表名1, 表名2 WHERE 表名1.列名=表名2.列名
27
外连接 外连接根据连接时保留表中记录的侧重不同分为“左外连接”、“右外连接”和“全外连接”。
28
1.左外连接 将左表中的所有记录分别与右表中的每条记录进行组合,结果集中除返回内部连接的记录以外,还在查询结果中返回左表中不符合条件的记录,并在右表的相应列中填上NULL,由于bit类型不允许为NULL,就以0值填充。
29
左外连接的语法格式如下。 SELECT 列名列表 FROM 表名1 AS A LEFT [OUTER] JOIN 表名2 AS B ON A.列名=B.列名
30
2.右外连接 和左外连接类似,右外连接是将左表中的所有记录分别与右表中的每条记录进行组合,结果集中除返回内部连接的记录以外,还在查询结果中返回右表中不符合条件的记录,并在左表的相应列中填上NULL,由于bit类型不允许为NULL,就以0值填充。
31
右外连接的语法格式如下。 SELECT 列名列表 FROM 表名1 AS A RIGHT [OUTER] JOIN 表名2 AS B ON A.列名=B.列名
32
3.全外连接 全外连接是将左表中的所有记录分别与右表中的每条记录进行组合,结果集中除返回内部连接的记录以外,还在查询结果中返回两个表中不符合条件的记录,并在左表或右表的相应列中填上NULL,bit类型以0值填充。
33
全外连接的语法格式如下。 SELECT 列名列表 FROM 表名1 AS A FULL [OUTER] JOIN 表名2 AS B ON A.列名=B.列名
34
5.3.4 自连接 自连接就是一个表的两个副本之间的内连接。
自连接 自连接就是一个表的两个副本之间的内连接。 表名在FROM子句中出现两次,必须对表指定不同的别名,在SELECT子句中引用的列名也要使用表的别名进行限定。
35
合并结果集 UNION运算符用于将两个或多个检索结果合并成一个结果,当使用UNION时,需遵循以下两个规则。
36
(1)所有查询中的列数和列的顺序必须相同。
(2)所有查询中按顺序对应列的数据类型必须兼容。
37
5.4 子 查 询 在SQL语言中,当一个查询语句嵌套在另一个查询的查询条件之中时,称为子查询。
5.4 子 查 询 在SQL语言中,当一个查询语句嵌套在另一个查询的查询条件之中时,称为子查询。 子查询总是写在圆括号中,可以用在使用表达式的任何地方。
38
5.4.1 比较测试中的子查询 比较测试中的子查询是指父查询与子查询之间用比较运算符进行连接。
比较测试中的子查询 比较测试中的子查询是指父查询与子查询之间用比较运算符进行连接。 但是用户必须确切地知道子查询返回的是一个单值,否则数据库服务器将报错。
39
集合成员测试中的子查询 集合成员测试中的子查询是指父查询与子查询之间用IN或NOT IN进行连接,判断某个属性列值是否在子查询的结果中,通常子查询的结果是一个集合。
40
存在性测试中的子查询 存在性测试中的子查询只是检查子查询返回的结果集是否为空,使用的关键字为EXISTS或NOT EXISTS,它产生逻辑真值“TRUE”或假值“FALSE”。 例如,如果使用“EXISTS”进行测试,并且子查询返回的结果集不空,则测试的结果为真值“TRUE”。
41
5.4.4 批量比较测试中的子查询 1.使用ANY关键字的比较测试
批量比较测试中的子查询 1.使用ANY关键字的比较测试 通过比较运算符将一个表达式的值或列值与子查询返回的一列值中的每一个进行比较,只要有一次比较的结果为TRUE,则ANY测试返回TRUE。
42
2.使用ALL关键字的比较测试 通过比较运算符将一个表达式的值或列值与子查询返回的一列值中的每一个进行比较,只要有一次比较的结果为FALSE,则ALL测试返回FALSE。
43
5.4.5 使用子查询向表中添加多条记录 使用INSERT…SELECT语句可以一次向表中添加多条记录,语法格式如下。
使用子查询向表中添加多条记录 使用INSERT…SELECT语句可以一次向表中添加多条记录,语法格式如下。 INSERT 表名[(字段列表)] SELECT 字段列表 FROM 表名 WHERE 条件表达式
44
5.5 使用SQL Server Management Studio 进行数据查询与维护
查询设计器简介 在查询设计器中可以进行表的插入、删除、修改和查询操作。
45
图5-20 启动查询设计器
46
图5-21 查询设计器窗口
47
查询设计器的应用实例 例5-39 由客户信息表中,给出深圳和上海的所有客户信息,显示顺序按照姓名的升序排序。
48
图5-22 查询设计器界面
49
图5-23 使用查询设计器进行查询
Similar presentations