OracleSQL讲义(Student)(6)

2019-05-18 11:18

select e.first_name,m.first_name, e.manager_id,m.id from s_emp e, s_emp m

where m.first_name = 'Carmen' and e.manager_id = m.id

例子45:请问哪些员工是领导? --- 外连接:

分析外连接的含义: from t1,t2

where t1.c1 = t2.c2; (inner join)

from t1,t2

where t1.c1 = t2.c2(+);(outer join)

把t1表中的匹配不到的记录重新找回来。(一个都不能少)

在t2表中虚拟一条空记录,所有的字段都为null。 结果集:outer join = inner join + 不匹配记录 外连接的思路:(+)放在什么位置上?

(+)在哪边 哪边就是虚拟一个空记录

指导思想就是确定哪个表的全部记录要找出来? 例子46:列出员工和领导的对应关系,包含‘Carmen’?

select e.first_name employee,

nvl(m.first_name,'Boss') manager

from s_emp e, s_emp m where e.manager_id(+) = m.id; 结果集:41 = 24 +(25 - 8)

41 = 24 +17

例子47:列出哪些人是员工?(或者)哪些员工不是领导?、 Select

e.id,e.first_name,m.id,m.first_name

from

s_emp e,s_emp m

Where m.id=e.manager_id(+) And e.first_name is null

--- 左、右、全外连接:自然连接:id=id 就是同名字段的进行连接natural join

交叉连接就是 cross join 就是 s_emp,s_dept 会形成笛卡尔积

※From s_emp,s_dept d where dept_id = d.id 和from s_emp inner join s_dept on detp_id = d.id

分析左、右、全外连接的另外一种实现方式: from t1,t2

where t1 left outer join t2 on t1.c1 = t2.c2 ;(left outer join)

和t1.c1 = t2.c2(+)一样

where t1 right outer join t2 on t1.c1 = t2.c2 ;(right outer join

和(+)t1.c1 = t2.c2一样

全连接:inner join + 左右各不匹配的 24+1+17

列出员工和领导的对应关系,包含‘Carmen’? select

e.first_name

employee,

nvl(m.first_name,'Boss') manager

from s_emp e left outer join s_emp m on e.manager_id = m.id;

列出哪些人是员工? select

e.first_name

employee,

nvl(m.first_name,'Boss') manager

from s_emp e right outer join s_emp m on e.manager_id = m.id where e.first_name is null; select

e.first_name

employee,

nvl(m.first_name,'Boss') manager

from s_emp e full outer join s_emp m on e.manager_id = m.id;

十四、 组函数

//求平均数

//求总记录数

AVG (DISTINCT|ALL|n)

COUNT (DISTINCT|ALL|expr|*) 默认对null忽略

MAX (DISTINCT|ALL|expr) MIN (DISTINCT|ALL|expr) 例子48:列出提成的平均值? 例子49:列出提成的最大值?

//求最大数 //求最小数

select max (commission_pct) from s_emp

注意:所有组函数会忽略null值,只对非空值进行处理。 例子50:求出有提成的员工个数?

select count(commission_pct) from s_emp或 select count(*) from s_emp where commission_pct is not null

例子51:求出各部门的平均工资?

Select dept_id,avg(salary) from s_emp Group by dept_id

Select first_name,max(commission_pct) From s_emp

Group by first_name或

Select dept_id,d.name,avg(salary) From s_emp,s_dept d Where dept_id = d.id Group by dept_id,d.name 部门的平均工资同时显示部门名称 例子52: 求出各职位的平均工资?

select title, avg(salary) from s_emp group by title order by 2 desc

例子53: 求出各部门不同职位的平均工资?

select d.id,title,d.name,avg(salary) from s_emp e,


OracleSQL讲义(Student)(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:地基与基础试题库(含答案)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: