一 查询语句的一般格式
SELECT [ALL | DISTINCT] <目标表达式1> [AS | 空格 目标表达式1的别名] [,目标表达式2 [AS | 空格 目标表达式2的别名]]......
FROM <表名1 | 视图名1> [表名1或者视图名1的别名] [,<表名2 | 视图名2> [表名2或者视图名2的别名]]
[WHERE <条件表达式>]
[GROUP BY <列名1>[, <列名2>......] [HAVING <条件表达式>] ]
[ORDER BY <列名1> [ASC | DESC] [, <列名2>[ASC | DESC] ]
一个完整的SQL命令叫语句(statement),每一个关键字和后面跟着的选项叫子句(clause),例如,“SELECT * FROM emp;"叫语句,而“SELECT *”叫子句,“FROM emp”也叫子句。
查询语句格式的说明:
1>在oracle中,SQL语句的关键字可以大写,也可以小写,也可以大小混写。oracle公司推荐在SQL语句中,关键字大写,其余小写,以增加SQL的可读性,本文章赞成oracle公司推荐的SQL书写格式。
2>在查询语句中只有SELECT子句和FROM子句是必须的。以上格式中,除红色标注的部分外,其他的都可以去掉。
3>在WHERE子句、GROUP BY子句、ORDER BY子句中使用的列名既可以是数据表定义的字段的名字,也可以是SELECT子句中列的别名,也可以是表达式,也可以是SELECT子句中各个列出现的次序(1,2,3,4......等数字)。
4>如果SQL语句中含有ORDER BY子句,则ORDER BY子句必须是该SQL语句的最后一个子句。也就是说,ORDER BY子句只能出现在SQL语句的最后面。
二 select语句的执行顺序
1、from子句组装来自不同数据源的数据;
2、where子句基于指定的条件对记录行进行筛选;
3、group by子句根据指定的列将数据划分为多个分组;
4、使用聚集函数进行计算;
5、使用having子句筛选分组;
6、计算所有的表达式;
7、使用order by对结果集进行排序。
三 例子
SELECT * FROM emp;这种方式可以选出emp表中所有的数据。
SELECT empno, ename FROM emp;也可以指定要查询的列。
复杂点的例子,查询出emp表中,每一个部门中工资在400以上且雇佣日期在2004-10-01 13:20:30之前的员工的平均工资,要求平均工资大于1000,并按照部门号的降序排列。
SQL> SELECT deptno,avg(sal)
2 FROM emp
3 WHERE sal > 400
4 AND hiredate < to_date('2004-10-01 13:23:25','YYYY-MM-DD HH24:MI:SS')
5 GROUP BY deptno
6 HAVING AVG(sal) > 1000
7 ORDER BY deptno DESC;
DEPTNO AVG(SAL)
---------- ----------
30 1566.66667
20 2175
10 2916.66667