当前位置:文档之家› SQL数据库数据的查询,汇总,统计和分析

SQL数据库数据的查询,汇总,统计和分析

8.数据的查询、汇总、统计和分析本章将深入剖析SELECT命令。

8.1.SELECT命令SELECT是一个用来从一个或多个表中获取数据的SQL命令。

8.2.简单的SELECT查询如:SELECT命令至少包含:➢要出现在查询结果中的字段列表,如:身份证号码,姓名,电话号码➢字段来自哪些表,如:FROM飞狐工作室➢字段列表也可以是由字段、常量和函数组成的表达式➢要列出所有字段,只须用* 号8.3.设置查询结果的字段名查询需求请从数据库pubs的authors表,查询出所有作者的代号、姓名、电话号码及住址,而且请使用中文文字作为查询结果的各字段名。

解答SELECT 作者代号= au_id,姓名= au_fname+au_lname,电话号码= phone,住址= addressFROM authors或(看看你更喜欢哪一种格式?)/* 脚本文件名: Demo92.sql */USE pubsSELECT au_id AS 作者代号,au_fname+au_lname AS 姓名,phone AS 电话号码,address AS 住址FROM authors注意:➢如果您设置的的字段名包含空格,则须加上单引号SELECT au_fname+au_lname AS‘Name of Author’FROM authors任务:查询teacher表的姓名、性别和生日,列名用中文表示;查询class表的所有班级信息;查询teacher表的教师姓名和年龄。

8.4.关键字ALL和DISTINCT的使用1.查询需求请列出“飞狐工作室”表中所有员工的雇用日期,但是日期相同者只列出一次即可。

USE NorthwindSQLSELECT DISTINCT雇用日期FROM飞狐工作室2.查询需求请列出“飞狐工作室”表中有哪些部门。

USE NorthwindSQLSELECT DISTINCT部门FROM飞狐工作室ALL为默认项,显示所有查询到的记录,包括重复项。

DISTINCT,对指定字段的内容相同的,仅显示一项。

每个SELECT表达式只能有一个DISTINCT关键字。

这意味着,DISTINCT是限制整条数据记录都重复者,只显示其中一条,而不是针对单一字段来处理。

任务:请列出“章立民工作室”表中有哪些部门。

列出teacher表中的教师职称。

8.5.查询结果的输出目的地为什么要讨论查询结果的输出目的地?答:可能希望将查询结果输出到某个存储处以便进行进一步的处理。

举例说明INTO子句的用法:➢将查询结果存储到当前数据库中的新表MyTmpTable中USE NorthwindSQLSELECT* INTO MyTmpTable FROM飞狐工作室注:INTO子句会生成相应的表,如果表已存在则提示错误“表已存在”。

任务:把teacher表中的教师职称保存到新表教师职称表中。

查询员工表中的职称,并存储到新表员工职称表中。

8.6.WHERE子句的条件搜索功能1.查询需求请列出“飞狐工作室”表中目前薪资大于60000的员工。

/* 脚本文件名: Demo93.sql */USE NorthwindSQLSELECT姓名,目前薪资FROM飞狐工作室2.查询需求请列出“飞狐工作室”表在信息部、行销部和业务部等3个部门任职的员工姓名。

3.查询需求请列出“飞狐工作室”表在信息部、行销部和业务部等3个部门以外任职的员工姓名。

4.查询需求请列出“飞狐工作室”表中,本月出生的员工姓名和出生日期。

5.查询需求请列出“飞狐工作室”表中,年龄大于20岁的每一位员工的姓名。

/* 脚本文件名: Demo911.sql */USE NorthwindSQLSELECT 姓名FROM 飞狐工作室WHERE DATEDIFF(year,出生日期,GETDATE())>20任务:查询章立民工作室中已婚的员工信息;查询“飞狐工作室”表中行销部的员工信息;查询06010111班或者07010211班的学生信息;查询成绩在80分以下的学生选课信息;查询年龄超过50岁的女教师信息;查询出生日期在1970到1980年之间的教师信息。

8.7.SELECT的通配符共有5个通配符。

*(星号)➢用于字段列表,代表源表中的所有的字段/* 脚本文件名: Demo913.sql */USE NorthwindSQL--连接两张表“客户”表和“订货主档”表SELECT *FROM 客户INNER JOIN订货主档ON客户.客户编号= 订货主档.客户编号WHERE 订货主档.订单日期BETWEEN '08/01/1996' AND '08/31/1996'/* 脚本文件名: Demo914.sql */USE NorthwindSQLSELECT 客户.公司名称,订货主档.*FROM 客户INNER JOIN订货主档ON客户.客户编号= 订货主档.客户编号WHERE 订货主档.订单日期BETWEEN '08/01/1996' AND '08/31/1996'%(百分号)➢只能用在WHERE子句中,代表0个或0个以上的字符。

如:ABC%代表ABC开头的字符串。

➢百分号通常与运算符LIKE搭配使用。

/* 脚本文件名: Demo915.sql */USE NorthwindSQLSELECT 姓名FROM 飞狐工作室WHERE 姓名LIKE '%光%' --表示查询姓名中包含“光”字的记录任务:查询“飞狐工作室”表中住在北京市的的员工信息;查询教师表中姓杜的教师信息;查询professional表中专业名称包含计算机的专业信息。

_(下划线)➢只能用在WHERE子句中,代表1个字符。

如:_A%代表第二个字符为A的字符串。

➢下划线通常与运算符LIKE搭配使用。

➢USE NorthwindSQL➢➢SELECT 姓名FROM 飞狐工作室➢WHERE 姓名LIKE '_建_'[](中括号)➢只能用在WHERE子句中,用来限定任何一个单个字符介于指定的范围或集合中。

➢通常与运算符LIKE搭配使用。

/* 脚本文件名: Demo923.sql */USE pubsSELECT au_fname,au_lname FROM authorsWHERE au_lname LIKE '[P-Z]inger'--表示第一个字符为P~Z之间且后五个字符为inger/* 脚本文件名: Demo924.sql */USE NorthwindSQLSELECT 姓名FROM 飞狐工作室WHERE 姓名LIKE '[ACD张李]%' --表示什么?ORDER BY 姓名任务:查询学号尾号为1、3、5、7、9的学生信息。

[^](中括号中包含^号)➢只能用在WHERE子句中,用来限定任何一个单个字符不介于指定的范围或集合中。

➢通常与运算符LIKE搭配使用。

/* 脚本文件名: Demo927.sql */USE pubsSELECT au_fname,au_lname FROM authorsWHERE au_fname LIKE '[^H-K]ichel'--首字母不介于H~K之间且后为ichel/* 脚本文件名: Demo930.sql */USE NorthwindSQLSELECT 身份证号码,姓名FROM 飞狐工作室WHERE 身份证号码LIKE '[^ALM]%' --这个表示什么意思?任务:查询学号尾号不为1、3、5、7、9的学生信息。

8.8.字符和通配符冲突时的解决方法可以使用ESCAPE子句通知SQL Server哪一个字符是常量字符而并非通配符。

用专业术语来说,ESCAPE子句所指定的字符称为“转义符”。

/* 脚本文件名: Demo920.sql */USE NorthwindSQLSELECT 姓名, 家庭地址FROM 飞狐工作室WHERE家庭地址LIKE '%\_%' ESCAPE '\'--通知符号\后的字符并非通配符,即查询住址中带下划线的记录8.9.连接条件设置本节内容太重要了!看如下代码,如果TableA有M条记录,TableB有N条记录,则查询结果共有M×N条记录:SELECT * FROM TableA,TableB或SELECT * FROM TableA CROSS JOIN TableB为了避免出现上述情况,有4种连接类型可以选择:➢INNER JOIN特点:查询结果仅包含连接表中彼此相对应的数据记录。

更复杂的连接3个表的例子:FROM客户INNER JOIN订货主档ON客户.客户编号= 订货主档.客户编号INNER JOIN订货明细ON订货主档.订单号码= 订货明细.订单号码任务:查询下了订单的客户信息:客户编号、公司名称、订单号码、订单日期;查询产品信息:产品编号、类别名称;查询学生信息:学号、姓名、班级名称;查询班级信息:班级编号、班级名称、专业名称;查询专业信息:专业编号、专业名称、系名称;列出计算机工程系的专业信息;查询孙晓龙的所有选修课成绩;查询选修了“3dsmax”课程的学生姓名和课程成绩。

➢LEFT OUTER JOIN(左外连接)特点:查询结果将包含位于关键字LEFT OUTER JOIN左侧源表中的所有数据记录,但是仅包含右侧源表中相应的数据记录。

/* 脚本文件名: Demo935.sql 本例用于查看每一位客户的订货情况但是希望并未下订单的客户也出现在查询结果中!*/USE NorthwindSQLSELECT客户.客户编号,客户.公司名称,客户.连络人,➢RIGHT OUTER JOIN(右外连接)特点:查询结果将包含位于关键字RIGHT OUTER JOIN右侧源表中的所有数据记录,但是仅包含左侧源表中相应的数据记录。

➢FULL OUTER JOIN(全外连接)特点:查询结果将包含位于关键字FULL OUTER JOIN左右两侧源表中的所有数据记录。

范例:1.查询在1996年7月份采购的北京市客户的基本数据、订单数据、订货明细。

2.查询出所有曾经在1996年订货的客户公司名称和所订购的产品明细3.假如ERNSH公司是我们的忠实客户,我们要查询出该公司在1998年所下的订单,以及负责处理这些客户订单的员工基本数据:8.10.统计运算的高手:聚合函数聚合函数专用于SELECT语句中。

➢COUNT⏹主要用于计算查询结果中的数据条数,通常用COUNT(*)的形式。

⏹事实上,COUNT()是唯一允许使用通配符作为参数的聚合函数。

相关主题