Oracle-25-having子句&连接的定义(如多表联查)

来源:互联网 发布:在手机淘宝怎么开店 编辑:程序博客网 时间:2024/05/21 22:30

一、Having子句

1. Having子句可以对聚合函数进行限制。

比如:

SQL>select job, avg(sal) from emp group by job having avg(sal)>1500;


上述SQL子句执行思路:

(1)使用group by子句将行分组为job相同的部分,即job列数据相同的员工信息分为一组;

(2)针对上一步得到的分组数据,使用avg()函数对每组数据分别计算那个均值;

(3)使用having子句限制,即查询结果只返回平均工资大于1500部分。

简单来说:分组,计算平均值,根据having筛选出显示结果。

【注意】如果对聚合函数进行限制,必须用:having聚合函数条件,不要用where

 

1:练习having子句

解:首先查看当前登录用户下的sc表:


现在将cno相同的分为一组,计算平均值,查询结果只显示平均分大于80的课程,注意下图的SQL语句:


如果用where做会报错:


所以wherehaving的区别就是聚合函数条件限定必须且只能用having

 

二、连接的定义

1.连接:它可以用于连接任意多个表,从多个表中检索出相应的记录。


比如要查看每个员工所属部门的名称,那么这个时候需要将员工表和部门表通过“deptno”进行连接查询。

(1)SQL>select ename, dname from emp,dept

               2  where emp.deotno = dept.deptno;

(2)SQL>select ename, dname from emp join dept on

               2  emp.deptno =dept.deptno;

查询方式(1)是平常使用的SQL连接查询操作;查询方式(2)语法方式为SQL/92标准查询。

 

2.连接语句的基本语法格式:

(1)常用语句:

select 表1.列名,表2.列名 from 表1,表2 where 表1.列名1 join_operator 表2.列名2;

(join_operator前后为两张表有关联的列,如上面的deptno列)

 

(2)SQL/92标准语法:

select 表1.列名,表2.列名 from 表1 join_type 表2 on 表1.列名1 join_operator 表2.列名2 where子句;

(join_operator前后为两张表有关联的列,如上面的deptno列)

 

2:练习多表联查

解:首先在当前登录用户下存在三个表:

(1)student表:


(2)sc表:


(3)course表:


现在查询每个学生中文名称所选修的课程,即(1)与(2)通过sno连接,可以查到每个学生选修课程的课程编号cno,如(1)表中张三学号s001,拿着s001去查(2)表,得到张三选了c001课程;然后(2)与(3)通过cno连接,可以查到每个学生选修课程的名称,如张三选了c001课程,拿着c001得到张三选的是J2SE课程,注意下图中的SQL语句:


其中a,b,c是三张表的别名。

【总结】

如果n表联查,那么where子句中的条件必须是n-1个条件,比如

上面3表联查,那么where子句中就有2个条件

 

3:基于2中的student,sc两张表,查询每个学生选修课程的成绩。

解:比如查询张三,只要在student表中获取其学号sno=’s001’,然后用s001去查sc表,即可得到张三的分数。


0 0
原创粉丝点击