作为DQL语句的最为关键的部分,select语句的用法非常的广泛,这里呢,采用scott用户下的emp表作为演示,该表由oracle数据库自带。以下的语句均在Oracle 9i当中调试过了,不会有问题,希望可以对大家有帮助,如果大家有什么好的高效的查询语句请告诉我。
语法:
SELECT [ALL|DISTINCT] column_name [expression...] FROM table1_name [,table2_name,view_name,...]
WHERE [condition]
[GROUP BY column_name1[,column_name2,...]] [HAVING group_condition]
[ORDER BY column_name2 [ASC|DESC] [,column_name2,...]]
1,无条件查询
查询所有 select * from emp;
查询指定列 select ename,sal from emp;
使用算术表达式 select ename,sal*0.8 from emp;
使用字符常量 select empno,'Name is: ',ename from emp;(这里它能够自动生成列,并且所有的值均为'Name is: ')
使用函数 select empno,UPPER(ename) from emp;
别名:select ename employeename,sal salary from emp;
使用连接字符串:select '员工号:'||empno||'员工名:'||ename from emp;
消除重复行:select distinct deptno from emp;
2,有条件查询
常用查询字符
运算符 说明 例子
= 等于 col=100
!=
<>
^= 不等于 col!=100
>= 大于等于 col>=100
<= 小于等于 col<=100
> 大于 col>100
< 小于 col<100
BETWEEN a AND b 从a到b的范围之内(包括a和b) col BETWEEN 100 AND 200
NOT BETWEEN a AND b 从a到b的范围之外(不包括a和b) col NOT BETWEEN 100 AND 200
IN (list) 和列表中的任何一个相等 col IN (100,200)
NOT IN (list) 和列表中的任何一个都不相等 col NOT IN (100,200)
IS NULL 等于null col IS NULL
IS NOT NULL 不等于null col IS NOT NULL
LIKE 和pattern相匹配 col LIKE 'A%'
NOT LIKE 和pattern不匹配 col NOT LIKE 'A%'
SELECT column,group_function,...
From table
[WHERE condition]
[GROUP [BY ROOLUP|CUBE|GROUPING SETS] group_by_expression ]
[HAVING group_condition]
[ORDER BY column[ASC|DESC]]
1),单列分组查询
查询每个部门的部门号人数和平均工资
SELECT deptno,count(*),avg(sal) FROM emp GROUP BY deptno;
2),多列分组查询
这里请小心,因为在select参数当中不能够出现非分组的列或者非聚集函数
SELECT deptno,job,count(*),avg(sal) FROM emp GROUP BY deptno,job;
下面将出现错误
SELECT ename,deptno,job,count(*),avg(sal) FROM emp GROUP BY deptno,job;
3),使用Having子句限制
select deptno,count(*),avg(sal) FROM emp Group BY deptno HAVING AVG(sal)>1800;
4),使用ROLLUP和CUBE选项
ROLLUP:生成横向统计和不分组统计
CUBE:生成横向统计、纵向统计和不分组统计
例如:查询各个工种的平均工资、每个部门的平均工资和所有员工的平均工资。
select deptno,job,avg(sal) from emp group by rollup (deptno,job);
查询各个部门各个工种的平均工资、各个工种的平均工资、每个部门的平均工资和所有员工的平均工资
select deptno,job,avg(sal) from emp group by cube (deptno,job);
5)合并分组查询
查询各个部门和各个工种的平均工资。
select deptno,job,avg(sal) from emp group by grouping sets (deptno,job);