内容正文:
项目四 数据查询
任务1 简单查询
任务2 Where子句查询
任务3 排序查询
任务4 聚合函数
任务5 连接查询
任务6 高级查询
任务1 简单查询
任务导入
小林已经建好了数据库、表并录入了数据,他想查某个表中的某一列的信息,或几列的信息。那么,可以使用什么语句来查询所需数据呢?
知识准备
一、SQL查询语句结构
SQL语言中最主要、最核心的部分是它的查询功能。查询语言用来对已经存在于数据库中的数据按照特定的组合、条件表达式或者一定次序进行检索。
二、单列查询
单列查询可以对表或视图中的某一列的数据进行查看。在SELECT语句中只需要给出一个需要查看的列的列名就可以实现单列的查询。
案例——查询college表中college_name列
查询单列数据
三、多列查询
SELECT语句不但可以对单列进行查询,还可以对多个列进行查询。查询结果中的列顺序,是根据SELECT语句指定的列名的先后顺序显示。
案例——查询student表中的name、sex和specialty_ID列
按F5键或单击工具栏中的“执行”按钮,执行结果如图所示。
查询多列数据
四、所有列查询
在对数据表进行查询时,有时需要对表中的列进行查询。如果表中的列过多,在SELECT语句中指定所有列会比较麻烦,使用“*”符号来代替所有的列。
案例——查询student表的所有记录
按F5键或单击工具栏中的“执行”按钮,执行结果如图所示。
查询所有列
任务2 Where子句查询
任务导入
小林通过上一个任务的学习已经会进行简单查询,但是他还想查询表中某个范围的信息,或者满足某个条件的信息,例如,查询成绩在60到70分之间的学生或者查询某个专业的所有学生信息。那么,可以使用什么语句来查询所需数据呢?
知识准备
一、条件查询
选择查询就是指定查询条件,只从表提取或显示满足该查询条件的记录。为了选择表中满足查询条件的某些行,可以使用SQL命令中的WHERE子句。
比较运算符包涵:= > < >= ,<=, !=,<> 表示(不等于)
1.等值条件查询
等值条件用来判断用户指定的条件是否与表中的某条数据相同,如果相同则条件满足,将该条记录显示来。等值条件使用运算符“=”来判断。
案例——查询专业号(specialty_ID)为0403的学生信息。
按F5键或单击工具栏中的“执行”按钮,执行结果如图所示。
2.大于条件查询
大于条件用来判断表中大于所指定条件的数据。大于条件使用“>”来判断。
案例——查询学分大于3分的课程。
按F5键或单击工具栏中的“执行”按钮,执行结果如图所示。
专业号(specialty_ID)为0403的学生信息
学分大于3分的课程
3.大于等于条件查询
大于等于条件用来判断表中大于或等于所指定条件的数据。大于条件使用“>=”来判断。
案例——查询学分大于等于3分的课程。
按F5键或单击工具栏中的“执行”按钮,执行结果如图所示。
4.不等于条件查询
不等于条件用来查询表中不满足指定条件的所有数据。不等于条件使用“!=”或“<>”来判断。
学分大于等于3分的课程
案例——查询学分不等于3分的课程。
按F5键或单击工具栏中的“执行”按钮,执行结果如图所示。
二、逻辑运算
WHERE子句的查询条件可以是一个逻辑表达式,它是由多个关系表达式通过逻辑运算符(AND、OR、NOT)连接而成的。
案例——查询student表中“0403”专业号且性别为“男”的学生记录。
按F5键或单击工具栏中的“执行”按钮,执行结果如图所示。
学分不等于3分的课程
“0403”专业且性别为“男”的学生记录
案例——查询student表中“0403”专业号或性别为“男”的学生记录。
按F5键或单击工具栏中的“执行”按钮,执行结果如图4-9所示。
案例——查询student表中专业号不是“0403”的“男”学生记录。
按F5键或单击工具栏中的“执行”按钮,执行结果如图所示。
0403”专业或性别为“男”的学生记录
专业号不是“0403”的“男”学生记录
三、特殊条件查询
1.空值判断:is null
基本语法为:Select * from table_name where column_name is null
查询列中的空值。
2.between and
BETWEEN m AND n表示在指定的范围m~n内。
案例——查询score表中成绩在60~70之间的所有记录。
按F5键或单击工具栏中的“执行”按钮,执行结果如图所示。
3.in
IN…表示在指定的列表中。
查询成绩在60~70之间的记录
案例——查询score表中成绩为75、82或86的记录。
按F5键或单击工具栏中的“执行”按钮,执行结果如图所示。
4.like模糊查询
案例——查询学生表18级的学生信息。
按F5键或单击工具栏中的“执行”按钮,执行结果如图所示。
成绩为75、82或86的记录
查询18级的学生信息
任务3 排序查询
任务导入
小林不仅想查询成绩在60到70分之间的学生或者查询某个专业的所有学生信息,还想对表中的信息进行排序,比如对学习成绩进行排名。那么,可以使用什么语句来进行排序查询呢?
知识准备
通过在SELECT命令中加入ORDER BY子句来控制选择行的显示顺序。ORDER BY子句可以按升序(默认或ASC)、降序(DESC)排列各行,也可以按多个列来排序。
案例——按学号升序显示student表的所有记录。
按F5键或单击工具栏中的“执行”按钮,执行结果如图所示。
以class降序显示student表
案例——以course_ID升序、credit降序显示course表的所有记录。
按F5键或单击工具栏中的“执行”按钮,执行结果如图所示。
course_ID升序、credit降序显示course表
任务4 聚合函数
任务导入
小林不仅要对学生成绩进行排名,还想统计某个专业的人数,还要计算某个学生的期末成绩的平均分以及总分。那么,怎么使用聚合函数统计学生人数呢?怎么计算学生的平均分和总分呢?
知识准备
聚合函数用于实现数据统计等功能,常用的聚合函数如表所列。
案例——查询“0904”专业的学生人数。
按F5键或单击工具栏中的“执行”按钮,执行结果如图所示。
查询人数
查询人数
案例——查询学生号为“17043219”的平均分。
按F5键或单击工具栏中的“执行”按钮,执行结果如图所示。
案例——查询学生号为“17043219”的总分。
按F5键或单击工具栏中的“执行”按钮,执行结果如图所示。
查询平均分
查询平均分
当WHERE子句、GROUP BY子句和HAVING子句同时出现在一个查询中时,SQL的执行顺序如下:
(1)执行WHERE子句,从表中选取行。
(2)由GROUP BY对选取的行进行分组。
(3)执行聚合函数。
(4)执行HAVING子句选取满足条件的分组。
案例——查询最低分大于70,最高分小于90的NO列。
按F5键或单击工具栏中的“执行”按钮,执行结果如图所示。
查询分数在70到90分的学号
任务5 连接查询
任务导入
小林想要查找专业所属学院以及学院领导是谁,但是在单个表中没法查询,需要跨表查询。那么,怎么进行连接查询?
知识准备
在数据查询中,经常涉及到提取两个或多个表的数据,这就需要使用表的连接来实现若干个表数据的联合查询。
在一个查询中,当需要对两个或多个表连接时,可以指定连接列,在WHERE子句中给出连接条件,在FROM子句中指定要连接的表、
1.等值查询
所谓等值连接,是指表之间通过“等于”关系连接起来,产生一个连接临时表,然后对该临时表进行处理后生成最终结果。
案例——查询所有专业的specialty_name、college_name和president列。
2.非等值查询
所谓非等值连接,是指表之间的连接关系不是“等于”,而是其他关系。
3.自连接
在数据查询中有时需要将同一个表进行连接,这种连接称之为自连接,进行自连接就如同两个分开的表一样,可以把一个表的某行与同一表中的另一行连接起来。
案例——查询“01054010”课程的成绩高于“17043219”号学生成绩的所有学生记录,并按成绩从高到低排列。
查询成绩并降序排列
任务6 高级查询
任务导入
小林在进行数据查询时,需要将另一个查询结果作为条件或数据源,那么,通过什么方法来实现?小林就这个问题去咨询老师,老师告诉他,可以通过子查询方法来实现。那么,什么是子查询呢?子查询中有哪些语句呢?
知识准备
一、数据汇总
为决策支持系统生成聚合事务的汇总报表是一项复杂并且相当消耗资源的工作。SQL Server提供两个灵活且强大的组件,用于生成Microsoft SQL Server Analysis Services。这些组件是程序员在执行SQL Server数据的多维分析时应当使用的主要工具。
案例——统计各班各课程的平均分
二、联接查询
通过联接,可以根据各个表之间的逻辑关系从两个或多个表中检索数据。联接表示SQL Server应如何使用一个表中的数据来选择另一个表中的行。
1.内联接
内联接是用比较运算符比较要联接列的值的联接。在SQL-92标准中,内联接可在FROM或WHERE子句中指定。
统计各班各课程的平均分
案例——查询各专业的学院名称
2.外联接
仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行。
SQL Server对在FROM子句中指定的外联接使用以下关键字:
LEFT OUTER JOIN或LEFT JOIN(左向外联接)
RIGHT OUTER JOIN或RIGHT JOIN(右向外联接)
FULL OUTER JOIN或FULL JOIN(完整外部联接)
(1)左向外联接
(2)右向外联接
(3)完整外部联接
查询各专业的学院名称
3.交叉联接
在这类联接的结果集内,两个表中每两个可能成对的行占一行。交叉联接不使用WHERE子句。
案例——采用交叉联接显示所有课程的任课教师
查询所有课程的任课教师姓名
三、子查询
子查询是一个SELECT查询,它嵌套在SELECT、INSERT、UPDATE、DELETE语句或其他子查询中。子查询也称为内部查询或内部选择,而包含子查询的语句也称为外部查询或外部选择。
嵌套在外部SELECT语句中的子查询包括以下组件:
包含标准选择列表组件的标准SELECT查询。
包含一个或多个表或者视图名的标准FROM子句。
可选的WHERE子句。
可选的GROUP BY子句。
可选的HAVING子句。
(1)使用IN或NOT IN
通过IN(或NOT IN)引入的子查询结果是一列零值或更多值。
案例——查询选修“01054010”课程号的学生名单
查询选修“01054010”课程号的学生名单
(2)比较运算符的子查询
子查询可由一个比较运算符(=、<>、>、>=、<、!>、!<或<=)引入。
案例——查找成绩比平均分多5分的数据
查找成绩比平均分多5分的数据
项目总结
项目实战
实战一 查询部门号(deptno)为30的员工信息。
实战二 以工资升序、员工号降序显示工资表的所有记录。
部门号(deptno)为30的员工信息
course_ID升序、credit降序显示course表
实战三 查询工资在5000~6000之间的员工,包括员工号、姓名、工作名称以及工资
实战四 查找工资比平均工资多300的员工
查询工资在5000~6000之间的员工
查找工资比平均工资多300的员工
$$