数据与统计

黄玉珍

目录

  • 1 第一章 绪论
    • 1.1 数据库系统概述
    • 1.2 数据模型
  • 2 第二章 数据库的基本操作
    • 2.1 文件与事务操作
    • 2.2 数据库的创建与查看、管理
  • 3 第三章 数据表的建立与操作
    • 3.1 数据表及SQL Server数据类型
    • 3.2 数据库中表的操作
  • 4 第四章  数据查询
    • 4.1 基本查询与带条件查询
    • 4.2 高级查询
  • 5 第五章 数据完整性
    • 5.1 数据完整性的基本类型与约束
    • 5.2 默认、规则、标识和自定义数据类型
  • 6 第六章 视图
    • 6.1 视图的概述及视图的操作
  • 7 第七章 存储过程
    • 7.1 存储过程的概述及存储过程的操作
  • 8 第八章 触发器
    • 8.1 触发器的概述及触发器的操作
  • 9 第九章 用户自定义函数
    • 9.1 用户自定义函数概述及操作
  • 10 第十章 安全管理
    • 10.1 安全机制、登陆账户、角色、权限
  • 11 第十一章  备份与恢复
    • 11.1 备份、恢复及其相关操作
高级查询

多表查询

前面介绍的都是从一张表上查询数据,更多的情况是从多张表中查询数据。例如一个数据库包含学生基本信息表和学生成绩信息表,若要得知道学生的基本信息和成绩,那就必须进行多表查询

SQL Server提供了实现多表查询的方法――连接查询。所谓连接查询是将多个表通过某个或某些列为条件进行连接,从中检索出关联数据。连接有两种语法形式:

1.ANSI连接语法形式

    SELECT column_list

    FROM { table_name1 [ join_type ] 

    JOIN table_name2 ON connection_condition}[,…n]

    WHERE search_condition

2.SQL Server连接语法形式 

    SELECT column_list

    FROM  table_name1[,…n]

    WHERE { search_condition 

    AND | OR connection_condition}[,…n]

connection_condition:连接条件;

join_type:连接类型,包括,内连接、外连接、交叉连接等;

(1)内连接(Inner Join)

内连接是多个表通过连接条件中共享列的值进行的比较连接。当未指明连接类型时,默认为内连接。内连接值显示两个表中所有匹配数据的行。

(2)外连接(Outer Join)

外连接显示一个表中所有的行和另外一个表中的任何匹配的行


•左外连接(LEFT OUER JOIN)

左外连接即在连接两表时,不管右表中是否有匹配数据,结果将保留左表中的所有行。

•右外连接(RIGHT OUTER JOIN)

右外连接与左外连接相反在连接两表时,不管左表中是否有匹配数据,结果将保留右表中的所有行。

(3)交叉连接(CROSS JOIN)

两个表之间的交叉连接,是用左表中的每一行与右表中的每一行进行连接。因此,结果集中的行数是左表的行数乘以右表的行数,该乘积也称为“笛卡儿乘积”。交叉连接使用关键字CROSS JOIN。


分组和汇总

1.聚合函数的使用

聚合函数可以返回一列、几列或全部列的汇总数据,用于计数或寻找某列的平均值。这类函数仅作用于数值型列,并且在列上使用聚合函数时,不考虑NULL值。

2.分组汇总子句的使用

当需要显示分组的汇总数据时,就应使用GROUP BY子句。该子句的功能是根据指定的列将表中数据分成多个组后进行汇总。其语法格式为:

    SELECT column_name1[,…n]

    FROM table_name

    WHERE search_condition

    GROUP BY [ ALL ]colum_name1[,…n]

    [ HAVING search_condition ]

•使用GROUPBY子句为每一个组产生一个汇总结果,每个组只返回一行,不返回详细信息。

•SELECT子句中指定的列必须是GROUPBY子句中指定的列,或者是和聚合函数一起使用。

•如果包含WHERE子句,则只对满足WHERE条件的行进行分组汇总。

•如果GROUPBY子句使用关键字ALL,则WHERE子句将不起作用。

•HAVING子句可进一步排除不满足条件的组

•当同时存在GROUPBY子句、HAVING子句和WHERE子句时,其执行顺序为:先WHERE子句,后GROUP BY子句,再HAVING子句。即先用WHERE子句过滤不符合条件的数据记录,接着用GROUPBY子句对余下的数据记录按指定列分组、汇总,最后再用HAVING子句排除不符合条件的组。

3.明细汇总子句的使用

使用GROUPBY对查询出来的数据作分类汇总后,只能显示统计结果,看不到详细的数据。使用COMPUTE和COMPUTE BY子句既能浏览详细数据又可看到统计的结果。其语法形式:

    COMPUTE affregate_function(column_name)[,…n]

    [ BY column_name [,…n] ]

其中:affregate_function表示聚合函数。

•COMPUTE[BY]子句不能与SELECTINTO子句一起使用。

•COMPUTE子句中的列必须出现在SELECT子句的列表中。

•COMPUTEBY表示按指定的列进行明细汇总,使用BY关键字时必须同时使用ORDER BY子句,并且COMPUTE BY后出现的列必须具有与ORDER BY后出现的列相同的顺序,且不能跳过其中的列。例如:如果ORDER BY子句按照如下顺序指定排序列:ORDER BY CategoryID,Price,Stocks。则COMPUTE BY后的列表只能是下面任一种形式:

    BY CategoryID,Price,Stocks

    BY CategoryID,Price

    BY CategoryID

嵌套查询

所谓嵌套查询指的是在一个SELECT查询内再嵌入一个SELECT查询。外层的SELECT语句叫外部查询,内层的SELECT语句叫子查询。

使用子查询时需注意:

子查询可以嵌套多层。

子查询需用圆括号()括起来。

子查询中不能使用COMPUTE[ BY ]INTO子句。

子查询的SELECT语句中不能使用imagetextntext数据类型

合并数据集

在SELECT语句中,使用UNION子句可以把两个或多个SELECT语句查询的结果组合成一个结果集。语法形式:

    SELECT_statement1  

    UNION [ALL] SELECT_statement2