--Oracle表查询(分组查询,多表查询,子查询,集合操作等)
--分组函数(max, min, avg, sum, count)
--1. 查询所有员工最高和最低工资
select max(sal) 最高工资, min(sal) 最低工资 from emp;
--2. 利用子查询查询最高工资的人是谁
select ename,sal from emp where sal = (select max(sal) from emp);
--3. group by(用于对查询的结果分组统计) 查询每个部门的平均工资和最高工资
select avg(sal), max(sal), deptno from emp group by deptno;
--4. having(用于限制分组显示结果)
select avg(sal), max(sal), deptno from emp group by deptno having avg(sal) < 2000;
--5. 多表查询
--a. 查询名字,工资及所在部门的名字
select e.ename, e.sal, d.dname from emp e, dept d where e.deptno = d.deptno;
--b. 查询员工的行吗,工资及工资级别
select e.ename, e.sal, s.grade from emp e, salgrade s where e.sal between s.losal and s.hisal;
--自连接 显示员工FORD的上级
select worker.ename, boss.ename from emp worker, emp boss
where worker.mgr = boss.empno and worker.ename = 'FORD';
--在多行子查询中使用all操作符
select ename, sal, deptno from emp
where sal > all(select sal from emp where deptno = 30);
--等价于:
select ename, sal, deptno from emp where sal >
(select max(sal) from emp where deptno = 30);
--在多行子查询中使用any操作符
select ename, sal, deptno from emp
where sal > any(select sal from emp where deptno = 30);
--等价于
select ename, sal, deptno from emp where sal >
(select min(sal) from emp where deptno = 30);
--多列子查询
select deptno, ename, job from emp
where (deptno, job) = (select deptno, job from emp where ename = 'SMITH');
--在from子句中使用子查询 如何显示高于自己部门平均工资的员工信息
select e.ename, e.deptno, e.sal, ds.avgsal from emp e,
(select deptno, avg(sal) avgsal from emp group by deptno) ds
where e.deptno = ds.deptno and e.sal > ds.avgsal;
--用查询结果创建新表
create table mytable(id, name, sal, job, deptno) as
(select empno, ename, sal, job, deptno from emp);
--合并查询 union取得两个结果的并集,自动去掉重复行,union all则不去除重复行
select ename, sal, job from emp where sal > 2500
union
select ename, sal, job from emp where job = 'MANAGER';
select ename, sal, job from emp where sal > 2500
union all
select ename, sal, job from emp where job = 'MANAGER';
--取交集 intersect
select ename, sal, job from emp where sal > 2500
intersect
select ename, sal, job from emp where job = 'MANAGER';
--取差集 minus
select ename, sal, job from emp where sal > 2500
minus
select ename, sal, job from emp where job = 'MANAGER';
相关推荐
李兴华老师的ORACLE数据库课程中,对分组统计和子查询进行了深入详解。本课程涵盖了分组统计的重点和难点、子查询的概念和应用场景,以及在实际开发中需要注意的细节。 分组统计 在SQL中,分组统计是对数据进行...
- 分解复合子查询:大型子查询可以分解成多个小的子查询,分别处理,然后组合结果。 6. **案例分析**: - 查找销售最高和最低的产品:通过子查询找出销售额最高的产品ID,再在外层查询中找出该ID对应的产品详情。...
本压缩包“ORACLE-select-query.rar”专注于讲解Oracle数据库中的查询技术,特别是多表查询、子查询以及高级子查询。下面将详细探讨这些关键知识点。 首先,基础查询SQL语句是所有数据库操作的基础,它涵盖了SELECT...
当子查询的返回值是一个集合而不是一个值时,不能使用单行操作符,而必须根据需要使用ANY、IN、ALL或EXISTS等操作符。 在WHERE子句中使用子查询时,需要注意不能使用ORDER BY子句。在HAVING子句中使用子查询时,...
另一方面,多行子查询则与集合操作符一起使用,如IN、ANY、ALL等。在使用子查询时,如果子查询返回多行而主查询期望单行结果,就会导致错误,如"single-row subquery returns more than one row"。 另外,子查询也...
子查询的类型多种多样,根据返回的结果集不同,可以分为单行子查询(返回一行一列或一行多列)、多行子查询(返回多行一列)以及集合子查询(返回多行多列)。在HAVING子句中,子查询通常用于与聚合函数结合,过滤...
除了子查询和外连接,Oracle还提供了其他高级查询技术,如联接(JOIN)、集合操作(UNION, INTERSECT, EXCEPT)、分组和聚合函数(GROUP BY, HAVING)、窗口函数(OVER())以及带有条件的聚合(FILTER)。...
- **连接(JOIN)**:适合处理两个或更多表之间的关系,效率通常高于子查询,但结构较复杂。 在"MLDN魔乐科技JAVA培训_Oracle课堂11_子查询.wmv"这个视频课程中,你可能会学习到如何编写和理解各种类型的子查询,...
4. **子查询**:子查询是嵌套在其他查询中的查询,可以作为值、条件或表达式的一部分,用于筛选或计算数据。 5. **高级查询**:包括使用集合操作(UNION、INTERSECT、EXCEPT)和窗口函数(ROW_NUMBER、RANK、DENSE_...
子查询是嵌套在其他SQL语句中的查询,用于获取主查询所需的值。它可以作为SELECT、FROM或WHERE子句的一部分。例如,你可以使用子查询来找到某个部门薪水最高的员工,然后再找出这个员工的所有信息。 二、连接查询 ...
以上只是Oracle SQL多表查询和统计功能的一部分,实际使用中还有更多的复杂查询和统计技巧,例如子查询、窗口函数、集合操作等。通过持续学习和实践,你可以掌握这些技能,提高在Oracle数据库中的数据处理能力。
- **分组子查询**:在GROUP BY和HAVING子句中使用,用于对子查询结果集进行分组和过滤。 2. **子查询的应用场景**: - **筛选条件**:在WHERE子句中使用子查询,根据子查询的结果筛选出满足条件的记录。 - **...
- 在Oracle等数据库系统中,可以使用窗口函数(如ROW_NUMBER(), RANK(), DENSE_RANK()等)在子查询中进行分析操作,提供排序和分组后的聚合计算。 8. 优化子查询性能: - 使用索引来提高子查询的执行效率。 - ...
- 子查询可以嵌套在`SELECT`, `FROM`, `WHERE`等子句中,作为更复杂查询的一部分。 - 例如:`SELECT * FROM table_name WHERE column IN (SELECT column FROM another_table);` 7. **聚合函数** - `COUNT()`, `...
本资源集锦涵盖了日期查询、嵌套查询和多表查询等多个方面,对于学习和提升Oracle SQL技能大有裨益。 1. **日期查询**:在Oracle中,日期类型数据的处理是非常常见的。你可以使用内置的日期函数如`SYSDATE`获取当前...
如果需要使用子查询,可以在`SELECT`, `FROM`或`WHERE`子句中嵌套查询。例如,找出某个表中不存在于另一个表的数据: ```sql SELECT column1 FROM table1 WHERE column1 NOT IN (SELECT column1 FROM table2); ``` ...
1. **子查询**:在主查询中嵌套一个或多个查询,用于获取满足特定条件的数据。例如,找出"scott"用户中薪水高于部门平均薪水的员工。 ```sql SELECT * FROM scott.employees WHERE salary > (SELECT AVG(salary) ...