1、第四章 数据库查询,学时:8 目标 学习SELECT语句执行查询的各种方法和技巧;掌握SELECT语句的基本结构;使用运算符和关键字过滤查询;使用聚合函数汇总数据等 重点 查询数据库 难点 各种语句的使用,SQL数据库应用,第四章 数据库查询,4.1 SELECT语句结构 4.2 基本子句查询 4.3 数据汇总 4.4 多表联接查询 4.5 联合查询 4.6 嵌套查询,第四章 数据库查询,数据库检索速度的提高是数据库技术发展的重要标志之一。 对于使用SQL的数据库,检索数据都要使用SELECT语句。使用SELECT语句,既可以完成简单的单表查询、联合查询,也可以完成复杂的联接查询、嵌套查询。,
2、4.1 SELECT 语句结构,SELECT语句能够从数据库中检索出符合用户需求的数据,并将结果以表格的形式返回,是SQL Server中使用最频繁的语句之一。它功能强大,所以也有较多的子句,包含主要子句的基本语法格式如下:SELECT 列名1 ,列名2 . INTO 新表名 FROM 表名1 ,表名2 . WHERE 条件 GROUP BY 列名列表 HAVING 条件 ORDER BY 列名列表 ASC | DESC ,4.2 基本子句查询,4.2.1 SELECT子句 4.2.2 FROM子句 4.2.3 WHERE子句 4.2.4 ORDER BY子句 4.2.5 INTO子句,4.2
3、.1 SELECT子句,使用通配符*,返回所有列值 使用DISTINCT关键字消除重复记录 使用TOP n指定返回查询结果的前n行记录 使用列别名改变查询结果中的列名 使用表达式,4.2.1 SELECT子句,SELECT子句用于指定要返回的列,其完整的语法格式如下:,4.2.1 SELECT子句,4.2.2 FROM子句,只要SELECT子句有要查询的列,就必须使用FROM子句指定进行查询的单个或者多个表。此外,SELECT语句要查询的数据源除了表以外还可以是视图,视图相当于一个临时表,其语法格式如下:FROM 表名|视图名 ,n,4.2.3 WHERE子句,算术表达式 逻辑表达式 LIKE
4、关键字 BETWEEN关键字 IN关键字 NULL关键字,4.2.3 WHERE子句,算术表达式 逻辑表达式 LIKE关键字 BETWEEN关键字 IN关键字 NULL关键字,4.2 基本子句查询,4.2.4 ORDER BY子句ORDER BY子句用于按查询结果中的一列或多列对查询结果进行排序。其语法格式如下: ORDER BY 列名列表 ASC | DESC4.2.5 INTO子句 INTO子句用于把查询结果存放到一个新建立的表中,新表的列由SELECT子句中指定的列构成,其语法格式如下:INTO 新表名,4.3 数据汇总,4.3.1 使用聚合函数 4.3.2 使用GROUP BY子句 4
5、.3.3 使用HAVING子句 4.3.4 使用COMPUTE和COMPUTE BY子句,4.3.1 使用聚合函数,聚合函数的功能是对整个表或表中的列组进行汇总、计算、求平均值或总和。 COUNT(DISTINCT|ALL*) COUNT (DISTINCT|ALL*) ) AVG (DISTINCT|ALL*) ) MAX(DISTINCT|ALL*) ) MIN(DISTINCT|ALL*) ) SUM(DISTINCT|ALL*) ),4.3.2 使用GROUP BY子句,GROUP BY子句用来对查询结果进行分组GROUP BY ALL WITH CUBE | ROLLUP ,4.3.
6、3 使用HAVING子句,HAVING子句用来指定分组或集合的搜索条件,通常和GROUP BY子句一起使用,其行为与WHERE子句相似,只是WHERE子句作用于表和视图,HAVING子句作用于分组。其语法格式如下:HAVING 指定条件,4.3.4 使用COMPUTE和COMPUTE BY子句,有时我们不仅需要知道数据的汇总情况,可能还需要知道详细的数据记录,此时可以使用COMPUTE或COMPUTE BY子句生成明细汇总结果。COMPUTE子句用于对列进行聚合函数计算并生成汇总值,汇总的结果以附加行的形式出现,其语法格式如下:COMPUTE AVG | COUNT | MAX | MIN |
7、 STDEV | STDEVP| VAR | VARP | SUM ( 列名1 ) ,.n BY 列名1 ,.n ,4.4 多表联接查询,4.4.1 联接简介 数据库的设计原则是精简,通常是各个表中存放不同的数据,最大限度地减少数据库冗余数据。而实际工作中,往往需要从多个表中查询出用户需要的数据并生成单个的结果集,这就是联接查询。 SQL Server联接语法格式如下: SELECT 表名.列名1 ,.n FROM 表名1 ,.n WHERE 查询条件 AND | OR 联接条件 ,.n 尽可能以表的主键和外键来指定联接条件,如果以各表共同拥有的列来指定联接,则这些列的数据类型必须相同或兼容。
8、 如果所要联接的表具有相同的列名,则在引用这些列的时候,必须指定其表名,格式为:表名.列名 参与联接查询的表的个数越多,SQL Server处理这个查询所花费的时间就越,所以应该尽量限制表的个数。,4.4 多表联接查询,4.4.2 联接的类型 1内联接 2左外联接 3右外联接 4完全外部联接 5交叉联接,1内联接 所谓内联接指的是返回参与联接查询的表中所有匹配的行,在ANSI联接形式中使用关键字INNER JOIN表示。 2左外联接 所谓左外联接指的是返回参与联接查询的表中所有匹配的行和所有来自左表的不符合指定条件的行。在右表中对应于左表无记录的部分用NULL值表示。在ANSI联接形式中使用关
9、键字LEFT OUTER JOIN表示,而在SQL Server联接形式中使用运算符“*=”表示。 3右外联接所谓右外联接指的是返回参与联接查询的表中所有匹配的行和所有来自右表的不符合指定条件的行。在左表中对应于右表无记录的部分用NULL值表示。在ANSI联接形式中使用关键字RIGHT OUTER JOIN表示,而在SQL Server联接形式中使用运算符“=*”表示。 4完全外部联接 所谓完全外部联接指的是返回联接的两个表中的所有相应记录,无对应记录的部分用NULL值表示。完全外部联接的语法只有ANSI语法格式一种,使用关键字FULL OUTER JOIN表示。 5交叉联接 所谓交叉联接指的
10、是返回两个表交叉查询的结果。它返回两个表联接后的所有行(即返回两个表的笛卡尔积),不需要用ON子句来指定两个表之间任何连接的列。,4.5 联合查询,联合查询是指将多个SELECT语句返回的结果通过UNION操作符组合到一个结果集中。参与查询的SELECT语句中的列数和列的顺序必须相同,数据类型也必须兼容。其语法格式如下:SELECT 语句1 UNION ALL SELECT 语句2在联合查询中,查询结果的列标题是第一个查询语句中的列标题。如果希望结果集中的行按照一定的顺序排列,则必须在最后一个有UNION操作符的语句中使用ORDER BY子句指定排列方式,且使用第一个查询语句中的列名、列标题或
11、列序号。,4.5 嵌套查询,嵌套查询是指在一个SELECT语句的WHERE子句或HAVING子句中,又嵌套有另外一个SELECT语句的查询。嵌套查询中上层的SELECT语句块称为父查询或外层查询,下层的SELECT语句块称为子查询或内层查询。注意 子查询需要用圆括号()括起来 子查询的SELECT语句中不能使用image、text或ntext数据类型 子查询返回的结果值的数据类型必须匹配新增列或where子句中的数据类型 子查询中不能使用COMPUTEBY或INTO子句 在子查询中不能出现ORDER BY子句,ORDER BY子句应该放在最外层的父查询中。,本章小结, 掌握SELECT语句的基
12、本结构。在SELECT语句中,SELECT子句指定查询的特定表中的列,FROM子句指定查询的表,WHERE子句指定查询的条件。 掌握列别名的3种表示方式,表别名的2种表示方式。 学会使用INTO子句生成新的表,使用ORDER BY子句进行数据排序。 使用比较运算符、逻辑运算符和LIKE、IN、BETWEEN等关键字过滤查询结果。 使用聚合函数,例如COUNT、AVG、MAX、MIN、SUN等汇总数据。 使用分组子句GROUP BY和HAVING,使用分组计算子句COMPUTE和COMPUTE BY。 掌握联接查询的5种类型:内联接、左外联接、右外联接、完全外部联接和交叉联接。 使用UNION操作符进行联合查询的方法,使用嵌套查询的方法。,