6. 4 2001 3000
7. 5 3001 9999
GRADE LOSAL HISAL
------------------- ------------------- -------------
1 700 1200
2 1201 1400
3 1401 2000
4 2001 3000
5 3001 9999
显示雇员名称,工资和所属工资等级。
执行以下查询:
Sql代码
1.SELECT e.ename, e.sal, s.grade FROM emp e,salgrade s
2. WHERE e.sal BETWEEN s.losal AND s.hisal;
SELECT e.ename, e.sal, s.grade FROM emp e,salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal;
执行结果为:
Sql代码
1.ENAME SAL GRADE
2. ----------------- -------------------- -------------------
3.JONES 2975 4
4. BLAKE 2850 4
5. CLARK 2450 4
6. SCOTT 3000 4
7. FORD 3000 4
8. KING 5000 5
ENAME SAL GRADE
----------------- -------------------- -------------------
JONES 2975 4
BLAKE 2850 4
CLARK 2450 4
SCOTT 3000 4
FORD 3000 4
KING 5000 5
说明:通过将雇员工资与不同的工资上下限范围相比较,取得工资的等级,并在查询结果中显示出雇员的工资等级。
4.自连接
最后是一个自连接的训练实例,自连接就是一个表,同本身进行连接。对于自连接可以想像存在两个相同的表(表和表的副本),可以通过不同的别名区别两个相同的表。
显示雇员名称和雇员的经理名称。
执行以下查询:
Sql代码
1.SELECT worker.ename||' 的经理是 '||manager.ename AS 雇员经理
2. FROM emp worker, emp manager
3. WHERE worker.mgr = manager.empno;
SELECT worker.ename||' 的经理是 '||manager.ename AS 雇员经理
FROM emp worker, emp manager
WHERE worker.mgr = manager.empno;
执行结果为:
Sql代码
1.雇员经理
2.-------------------------------------------
3. SMITH 的经理是 FORD
4. ALLEN 的经理是 BLAKE
5. WARD 的经理是 BLAKE
雇员经理
-------------------------------------------
SMITH 的经理是 FORD
ALLEN 的经理是 BLAKE
WARD 的经理是 BLAKE
说明:为EMP表分别起了两个别名worker和manager,可以想像,第一个表是雇员表,第二个表是经理表,因为经理也是雇员。然后通过worker表的mgr(经理编号)字段同manager表的empno(雇员编号)字段建立连接,这样就可以显示雇员的经理名称了。
注意:经理编号mgr是雇员编号empno之一,所以经理编号可以同雇员编号建立连接。
统计查询
通常需要对数据进行统计,汇总出数据库的统计信息。比如,我们可能想了解公司的总人数和总工资额,或各个部门的人数和工资额,这个功能可以由统计查询完成。
Oracle提供了一些函数来完成统计工作,这些函数称为组函数,组函数不同于前面介绍和使用的函数(单行函数)。组函数可以对分组的数据进行求和、求平均值等运算。组函数只能应用于SELECT子句、HAVING子句或ORDER BY子句中。组函数也可以称为统计函数。
组函数:
AVG:求平均值
COUNT:求计数值,返回非空行数,*表示返回所有行
MAX:求最大值
MIN:求最小值
SUM:求和
STDDEV:求标准偏差,是根据差的平方根得到的
VARIANCE:求统计方差
分组函数中SUM和AVG只应用于数值型的列,MAX、MIN和COUNT可以应用于字符、数值和日期类型的列。组函数忽略列的空值。
使用GROUP BY 从句可以对数据进行分组。所谓分组,就是按照列的相同内容,将记录划分成组,对组可以应用组函数。
如果不使用分组,将对整个表或满足条件的记录应用组函数。
在组函数中可使用DISTINCT或ALL关键字。ALL表示对所有非NULL值(可重复)进行运算(COUNT除外)。DISTINCT 表示对每一个非NULL值,如果存在重复值,则组函数只运算一次。如果不指明上述关键字,默认为ALL。
求有佣金的雇员人数。
执行以下查询:
Sql代码
1.SELECT COUNT(comm) FROM emp;
SELECT COUNT(comm) FROM emp;
返回结果为:
Sql代码
1.COUNT(COMM)
2. ---------------------
3. 4
COUNT(COMM)
---------------------
4
说明:在本例中,没有返回全部雇员,只返回佣金非空的雇员,只有4个人。
求雇员表中不同职务的个数。
执行以下查询:
Sql代码
1.SELECT COUNT( DISTINCT job) FROM emp;
SELECT COUNT( DISTINCT job) FROM emp;
返回结果为:
Sql代码
1.COUNT(DISTINCT JOB)
2. -------------------------------
3. 5
COUNT(DIS