Oracle中查询关键字select--from--where--group by--having--order by执行顺序

select--from--where--group by--having--order by 这6个查询关键字的执行顺序:

1.from组装来自不同数据源的数据;
2.where基于指定的条件对记录行进行筛选;
3.group by子句将数据划分为多个分组;
4.使用聚集函数进行计算;
5.使用having子句筛选分组;
6.计算所有的表达式;
7.select 集合输出;
8.使用order by对结果集进行排序。

以下例子基于Oracle自带表空间hr

例子1:having和select的执行说明

情景:关于哪个部门员工最多?

A

1 SELECT D1.DEPARTMENT_ID,D2.DEPARTMENT_NAME
2 FROM EMPLOYEES D1 JOIN DEPARTMENTS D2 ON D1.DEPARTMENT_ID=D2.DEPARTMENT_ID
3 GROUP BY D1.DEPARTMENT_ID ,D2.DEPARTMENT_NAME
4 HAVING count(*)>= all(SELECT count(*) FROM EMPLOYEES GROUP BY DEPARTMENT_ID)

B

1 SELECT D1.DEPARTMENT_ID,D2.DEPARTMENT_NAME,count(*)
2 FROM EMPLOYEES D1 JOIN DEPARTMENTS D2 ON D1.DEPARTMENT_ID=D2.DEPARTMENT_ID
3 GROUP BY D1.DEPARTMENT_ID ,D2.DEPARTMENT_NAME
4 HAVING count(*)>= all(SELECT count(*) FROM EMPLOYEES GROUP BY DEPARTMENT_ID)

A、B结果相同,说明having先于select执行

时间: 2025-01-20 00:38:18

Oracle中查询关键字select--from--where--group by--having--order by执行顺序的相关文章

select from where group by having order by执行规则

执行顺序依次是from — where — group by — having — select — order by 其中select 和 from 是必选项 from 后面的表自右向左解析,所以数据量小的表放在最右边进行关联(用小表关联大表) where 条件后面的条件自上向下解析(把能筛选出小量数据的条件放在最左边)

sql server where、group by、order by 执行顺序

2012-02-07 19:39 先where 条件1,再 group by 条件2再 order by 条件3 如果声明了 GROUP BY 子句,输出就分成匹配一个或多个数值的不同组里. 如果出现了 HAVING 子句,那么它消除那些不满足给出条件的组. 如果声明了 ORDER BY 子句,那么返回的行是按照指定的顺序排序的. 如果没有给出 ORDER BY,那么数据行是按照系统认为可以最快生成的方法给出的. 虽然 SELECT 语句的完整语法较复杂,但是其主要的子句可归纳如下: SELEC

查询语句中select from where group by having order by的执行顺序

查询语句中select from where group by having order by的执行顺序 1.查询中用到的关键词主要包含六个,并且他们的顺序依次为 select--from--where--group by--having--order by 其中select和from是必须的,其他关键词是可选的,这六个关键词的执行顺序 与sql语句的书写顺序并不是一样的,而是按照下面的顺序来执行 from--where--group by--having--select--order by,

Oracle中insert into select和select into的用法(转)

原文地址:http://hi.baidu.com/huahua035/item/87d5e71e6a7d31f187ad4ea5 两张表进行数据的拷贝,最常用的拷贝语句是: insert into select  和 select into from 但是请绝对的注意: 在Oracle中select into from不可以使用-----原因很简单:select into是PL/SQL language 的赋值语句!如果使用则Oracle会抛出0RA-00905:missing keyword的

where、having、group by、order by的顺序

1.order by是按照某个字段进行排序,desc代表降序,esc代表升序. 2.group by是按照某个字段进行分组. 3."Where" 是一个约束声明,使用Where来约束来之数据库的数据,Where是在结果返回之前起作用的,且Where中不能使用聚合函数. "Having"是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在Having中可以使用聚合函数. where.having.group by.order by的顺序是:where -

如何在Oracle中 查询一个表被其他数据库对象引用[z]

这两天老大让我再oracle中把要替换的表被其他对象引用之处找出来,整理一份表,接到这个任务,我是一脸懵逼,怎么找?大海捞针么?问同事.查资料,自己研究,最后整理一下仅供大家参考,同时以备将来回顾.本篇只涉及表被其他数据库对象引用,不涉及外键,想寻找外键的,自己查看下面附有的链接. 首先有下列几种方式: 1.plsql工具 : 点击工具,找到 查找数据库对象 最后进入到查找页面 最后根据页面把要查找的 表对象或者关键词填入 文本查找   里,再在对象条件里 选择自己要筛选的条件即可筛选.但是此方

(六)Oracle 的 oracle表查询关键字

参考:http://www.hechaku.com/Oracle/oracle_tables2.html 1.使用逻辑操作符号问题:查询工资高于500或者是岗位为manager的雇员,同时还要满足他们的姓名首字母为大写的J? SQL> select * from emp where (sal>500 or job='manager') and ename like 'J%'; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---

深入理解Oracle中distinct关键字

distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值.其原因是distinct只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的. distinct 会对返回的结果集进行排序,所以,最好和order by 结合使用,可以提高效率. 一.distinct 基本用法 1.用于单列  1 select distinct name from A  执行后结果如下: 2.作用于多列  1 sel

Oracle中查询一个表中字段(列)个数

如果一个表中有很多的字段,而我们想要知道这个表中的字段个数,如果使用如下方式一个一个数,则显得很麻烦 Oracle中可以使用如下sql来查询字段(列)个数 select count(*) from user_tab_columns where table_name=upper('表名') 或者 select max(column_id) from user_tab_columns where table_name=upper('表名') 作者:itmyhome 链接:http://blog.cs