《第5章--使用SQL-语句查询数据.pptx》由会员分享,可在线阅读,更多相关《第5章--使用SQL-语句查询数据.pptx(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数 据 库 应 用 技 术SQL Server 2012主编:屈武江 霍艳飞 张 健新世纪应用型高等教育计算机类课程规划教材S Q L S E R V E R 2 0 1 2SHUJUKU YINGYONG JISHU第5章使用SQL 语句查询数据5.1 简单查询SELECT 语句的基本语法格式如下:SELECT ALL|DISTINCTTOP n FROM ,nWHERE GROUP BY,nHAVING ORDER BY ,n5.1 简单查询5.1.1 带投影的查询1选择所有列在SELECT 语句中,可以使用星号“*”来代表所有的列。2选择部分列若要选择部分列,应该在 中明确指出要查询的列
2、名。3给列加别名当要改变结果集中列的名称时需要给列一个别名,组合或者计算出的列默认无列名,需要给定一个别名。给列指定别名的方法有如下几种:(1)列名或表达式 AS 别名(2)列名或表达式 别名(3)别名=列名或表达式5.1 简单查询5.1.2 带选择的查询5.1 简单查询5.1.2 带选择的查询1使用比较运算符进行查询2使用空值判断符进行查询3使用模式匹配符进行查询4使用逻辑运算符进行多条件查询5使用范围运算符进行查询6使用列表运算符进行查询5.1 简单查询5.1.3 聚合函数查询聚合函数是用于获取累计值的函数。聚合函数能够基于列进行计算,并返回单个数值,常用的聚合函数有SUM、AVG、MAX
3、、MIN、COUNT。聚合函数不能用于WHERE 子句中。SUM 和AVG 后的列或表达式的值必须为数值型;除了COUNT 函数之外,如果没有满足WHERE 子句的行,所有聚合函数都将返回一个空值,而COUNT 返回的是0。常用的聚合函数见表5-3。5.1 简单查询5.1.4 分组和汇总查询在实际应用中往往并不是简单的查询,而是要对数据表中的数据进行统计,比如学生处要统计全校男女生人数,这就需要进行分组和汇总。分组需要使用GROUP BY 子句,在进行汇总时需要使用聚合函数。GROUP BY 子句将结果集中的记录按照一个或多个列分成多个组,每一组生成一条结果集记录。对分组之后的结果进行筛选需要
4、使用HAVING 子句。HAVING 子句对分组统计的结果设置筛选条件,使用HAVING 子句时必须同时使用GROUP BY 子句。HAVING 子句和WHERE 子句的筛选作用不同。WHERE 子句是对分组前的原始数据进行筛选。HAVING 子句是对分组统计的结果进行筛选,因此HAVING 子句中可以出现聚合函数,而WHERE 子句却不可以。5.2 连接查询5.2.1 内连接内连接(INNER JOIN)通过比较数据表中具有相同意义的列的值,从多个表中选取符合条件的行操作。可以使用等号运算符来连接,也可以连接两个不相等的列中的值。内连接的连接条件可以在FROM 语句中指定,也可以在WHERE
5、 子句中指定。放在FROM语句中的语法格式如下:FROM INNER JOIN ON 5.2 连接查询5.2.2 外连接内连接返回查询结果集中仅包含满足连接条件和查询条件的行,而采用外连接时,不仅会返回满足条件的结果,还会包含左表(左外连接)、右表(右外连接)或两个表(全外连接)中的所有数据行。外连接分为三种:左外连接、右外连接、全外连接。(1)左外连接:查询的结果集包含左表中的所有行,如果左表中的某行在右表中没有相匹配行,则在相关联的结果集行中右表的所有选择列均为空值。语法格式如下:SELECT 列名列表FROM 表1 LEFT OUTTER JOIN 表2 ON 连接条件表达式5.2 连接
6、查询5.2.2 外连接(2)右外连接:查询的结果集包含右表中的所有行,如果右表中的某行在左表中没有相匹配行,则在相关联的结果集行中左表的所有选择列均为空值。语法格式如下:SELECT 列名列表FROM 表1 RIGHTOUTTER JOIN 表2 ON 连接条件表达式(3)全外连接:查询结果除了包含满足连接条件的记录外,还包含两个表中不满足条件的记录。当某行在另一个表中没有匹配行时,则另一个表的选择列均为空值。语法格式如下:SELECT 列名列表FROM 表1 FULLOUTTER JOIN 表2 ON 连接条件表达式5.2 连接查询5.2.3 自连接在某些查询中,虽然查询的内容只与一个表有关
7、,但需要对表中不同的记录进行对比,这时就要在同一个表上进行自连接,即将同一个表的不同行连接起来。自连接可以看作是同一个表的两个副本之间的连接,因此必须给两个副本定义不同的别名。在生成连接结果时,表中的每一行都会和自身进行连接,生成重复的记录,可以使用WHERE 子句来消除这些重复的记录。5.2 连接查询5.2.4 交叉连接交叉连接就是将连接的两个表的所有行进行组合,形成一个结果集。左表中的所有行与右表中的所有行进行组合,相当于两个表“相乘”。该结果集的列数为两个表属性列的和,行数为两个表行数的乘积。交叉连接的语法格式如下:SELECT 列名列表FROM 表1 CROSS JOIN 表25.3
8、子查询5.3.1 嵌套子查询1.使用比较运算符的子查询2.使用IN 或NOT IN 集合的子查询3.使用批量比较的子查询4.在INSERT、UPDATE、DELETE 语句中使用子查询5.3 子查询5.3.2 相关子查询在前面的查询中,子查询都仅执行一次,并将得到的值代入外部查询的WHERE 子句中进行计算,这样的子查询称为非相关子查询。非相关子查询是独立于外部查询的子查询。而有些子查询依赖外部查询获得值,这意味着子查询是重复执行的,为外部查询可能选择的每一行均执行一次,这样的子查询称为相关子查询。相关子查询的执行过程:首先从外层开始执行,外层查询将子查询引用的外部字段的值传给内层子查询,内层
9、子查询执行操作,外部查询根据子查询得到的结果或结果集返回满足条件的结果行,外部查询的每一行都要做上述处理。5.4 其他查询操作5.4.1 集合运算查询1.UNION 运算UNION 是一种并集运算,可以将两个或两个以上的查询结果合并成一个结果,并在后续的结果集中去除前面结果集中已有的数据行。2.INTERSECT 运算INTERSECT 可以返回多条查询语句中都包含的重复数据。相当于关系运算的交运算。3.EXCEPT 运算EXCEPT 运算可以比较两个查询结果集的差异,从第一个查询结果集中返回在第二个查询结果集中找不到的数据,相当于关系运算中的差运算。5.4 其他查询操作5.4.2 对查询结果进行排序使用ORDER BY 子句可以对查询结果按照某一列或某几列进行升序(ASC)或降序(DESC)排列。如果按照多列进行排序,多列之间用逗号分开,先按照第一列进行排序,第一列相同再按照第二列进行排序,依次类推。ORDER BY 子句的语法格式如下:ORDER BY 列1 或表达式1 ASC|DESC,N5.4 其他查询操作5.4.3 存储查询结果使用INTO 子句允许用户定义一个新表,并且把SELECT 子句查询到的数据插入新表中,其语法格式如下:SELECT 选择列表 INTO 新表名FROM 表名WHERE 查询条件THANKS
限制150内