对Oracle中分组查询和关联查询的通俗理解

xiaoxiao2021-02-28  54

对Oracle中分组查询和关联查询的通俗理解

一、分组查询 1、实例:查询各个管理者属下员工的最低工资,其中最低工资不能低于800,且没有管理者的员工不计算在内。 select mgr,min(sal) from emp where mgr is not null group by mgr having min(sal) >= 800; 查询结果: 2、通俗理解 关于分组查询基础实例,注意抓题目需求的字眼。 (1)各个:group by ,如果是“所有”,就不用分组 (2)其中:having 而且,having 往往跟在group by后面,而group by又必须在where后面 (3)大于,小于,等于,是,不是,为: where (4)只要分组了,有group by XXX,那么XXX一定出现在select中,如select XXX (5)之间、范围:between and (6)未,没有:null (7)where :大过滤条件 ,往往跟在表后面,如emp后面 (8)having :小过滤条件,往往跟在grou by后面

二、关联查询 1、实例:查询所有部门的名称、所在地、员工数量以及平均工资。 select d.dname,d.loc,e.emp_count,e.avg_sal from dept d join (select deptno,count(*) as emp_count,avg(sal) as avg_sal from emp group by deptno) e on d.deptno = e.deptno; 查询结果: 2、思路分析: (1)既然发现“以及”左边只是涉及到dept表,而右边涉及到emp表,最后才会关联,这时可以运用数据库里的一个有用的知识”临时表”。 先左边的查询一个临时表: select dname,loc from dept;

(2)“以及”右边的平均工资查询一个临时表: select deptno,count(*) as emp_count,avg(sal) as avg_sal from emp group by deptno;

(3)将两张临时表关联起来,查询,2.中当作一个临时表 t 1. select d.dname,d.loc,e.emp_count,e.avg_sal from dept d join t e on d.deptno = e.deptno; 2. 现在把t还原,因为t就是2.中的表嘛。 select d.dname,d.loc,e.emp_count,e.avg_sal from dept d join (select deptno,count(*) as emp_count,avg(sal) as avg_sal from emp group by deptno) e on d.deptno = e.deptno;

3、通俗理解 关于关联查询基础实例,注意抓题目需求的字眼。拿上面实例来辅助说明。 (1)所有部门的 :group by,注意往往是非关键字分组,在表dept中,deptno是关键字,显然已经是按deptno 进行过的分组,你如果再from dept group by deptno,那就重复了。很明显,非关键字分组,在emp中进行 分组。 (2)名称、所在地:dept 员工数量:count(*) 平均工资: avg(sal) ,emp (3)由前面的所有部门、所在地和平均工资,发现是两个表的东西:join on,e.emp,d.dept 两个表放在一起查:关联,外关键字起作用,e.deptno = d.deptno (4)关联查询字眼:和,以及,查询需求中有涉及到两个表的东西(那肯定要关联查询), (5)关联查询:找外关键字,两个表肯定存在联系,不然怎么关联查询。join on (6)临时表:作用不言而喻 (7)在关联查询时,select 后面跟着的东西就是题目需求按顺序要求查询的东西,并且select后面的东西 肯定是分别来自两个表的东西。 (8)注意一点,select d.dname,d.loc,e.emp_count,e.avg_sal,e.emp_count和e.avg_sal来自临时表t中,所以临时表t中必须有e.avg_sal,e.emp_count这样的描述。不然,在select中突然这样写,很突兀,容易出错。 (9)总之,select后面跟着的东西是要上台面的东西,是来自一张表或多张表的东西,一定要在后面from的表中可追溯到。所以,这时的临时表的重要作用就展现出来了。

三、关联查询补充 1、外关联 实例:查询所有部门的名称,员工姓名以及从事的工作。 1.两个表的关联查询,join on ,外关键字,表与表之间存在关联 如:dept表的deptno和emp表的deptno都是彼此的外关键字,存在关联 2. SQL查询语句 select d.dname,e.ename,e.job from dept d join emp e on d.deptno = e.deptno; 2、内关联 1.一个表的关联查询,where,select的东西都来自一张表,表内肯定有字段之间存在关联 如:上下级的关联,都是在同一个表里,只是二者之间还有个上下级的关系 2.1 实例:查询每名员工的姓名极其管理者的姓名 select e1.ename,e2.ename from emp e1,emp e2 where e1.mgr = e2.empno; 2.2 实例:查询每个管理者的姓名及其下属员工的姓名 select e1.ename,e2.ename from emp e1,emp e2 where e1.empno = e2.mgr;

转载请注明原文地址: https://www.6miu.com/read-2631506.html

最新回复(0)