oracle(6)

4.2.2 等值连接

在笛卡尔积的基础上取条件列相同的值

查询员工信息和部门信息

查询员工姓名,部门名称

--查询每一个员工的信息以及所在部门的信息

--查询的数据:员工信息,部门信息

--数据来源:emp,dept

--链接条件:emp.deptno=dept.deptno

select * from emp e,dept d where e.deptno=d.deptno;

--查询出每一个有员工存在的部门的信息和部门的人数

--查询数据:部门信息,对应的部门的人数

--数据来源:dept,emp 经过计算

--链接条件:dept.deptno=人数对应的.deptno

--查询出有员工的部门的员工人数

select count(*),deptno from emp group by deptno;

select * from dept d, (select count(*),deptno from emp group by deptno) c where d.deptno=c.deptno;

4.2.3非等值连接

!=,>,<,<>,between and

查询员工姓名,工资及等级

--查询数据:ename,sal,hiredate,grade

--数据来源:emp,salgrade

--链接条件:emp.sal between losal and hisal

--查询员工表

select * from emp;

select * from salgrade;

select ename,sal,hiredate, grade

from emp e,salgrade s

where e.sal between losal and hisal;

4.2.4外连接

内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行。

外连接可以是左向外连接,右向外连接或完整外部连接。

左向外连接的结果集包括LEFT OUTER 子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表均为空值。

右向外连接是左向外连接的反向连接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

看‘+’,带‘+’的表为从表,对立面的表为主表。

找出所有员工的姓名以及他上级的名称

找出所有上级的名称以及其手下员工的名称

找出所有部门的员工数及部门名称

找出所有员工的部门名称及员工数

--查询每一个部门的信息和部门人数

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

(这是一个内连接) 注意:这个部门里面没有员工的时候不显示,

select * from dept;

select count(*),deptno from emp group by deptno;

select * from dept d,( select count(*),deptno from emp group by deptno;

)c where d.deptno=c.deptno;

~~~~~~~~~~~~~~~~~~·~~~~~~~~~~

(这是一个外连接)

注意:这个部门里面没有员工的时候是会占位显示为null

不用区分哪个是左连接还是哪个是右连接只需要知道主表既可

--外连接 主表 (只要在主表中出现的记录,就必须出现在结果中

注:不是主表的后面有’(+)’ 代表只是主表的附属品

--查看每一个部门的信息,对应的员工数

--查询的数据:部门信息,部门人数

--数据来源:dept d,(select count(*),deptno from emp group by deptno)c

--连接条件 d.deptno=c.deptno(+)

select *

 from dept d,( select count(*),deptno from emp group by deptno)c

where d.deptno =c.deptno(+);

处理为null的时候 ,当为null 显示为0

select d.deptno,dname, loc ,nvl(cc,0)from dept d,

(select count(*),deptno from emp group by deptno)c

where d.deptno=c.deptno(+);

--列出每一个有上级的员工的信息和上级信息

--列出所有的员工信息以及其上级的信息

--查询数据:员工信息,上级的信息

--数据来源:emp e,emp m

--连接条件:e.mgr=m.empno(+)

select * from emp e,emp m where e.mgr =m.empno(+);

4.2.5 自连接

特殊的等值连接 (来自于同一张表)

找出存在上级的员工姓名

--查询出每一个员工(有上级存在的员工)自己的信息,以及上级的信息

--查询的数据:员工信息,上级信息

--数据来源:emp e, emp m

--连接条件: e.mgr=m.empno

select * from emp e,emp m where e.mgr =m.empno;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值