多表查询-左右连接-SQL1999:语法-分组查询

注:本文是基于Oracle提供的scott表


多表查询是通过表和表直接的关系,查询出需要的数据
例如代码为:
select count(*) from emp,dept
查询出 emp,dept两个表中的所有数据
但是这之中会出闲一些冗余的信息,emp表示14条数据 dept表是4条数据,但是查出了56条,这其中很多事冗余的数据,通过建立两个表之间的关系可以去消除这个笛卡尔积,所以代码可以写为:
select * from emp e,dept d where e.deptno=d.deptno
emp e,dept d 这里的e d 是为emp 和dept取得别名
多表查询不仅限于多张表,在一张表上也可以使用多表查询,例如:

--查询出每一位雇员的姓名,职位,领导的姓名
这里要查询的是emp表上的员工的姓名,职位,其对应领导的姓名,这就需要查询两次表,二两次之间的联系是第一次的mgr 和第二次的empno是一样的,这事就要用到 别名:
代码为:
select e1.ename,e1.job, e2.ename from emp e1,emp e2 where e1.mgr=e2.empno
左右连接
--左连接 右连接
--(+) 代表连接方向 以左表为主表,就是左连接 主表的数据可以完全查出来
--左连接 :左边的表是主表,
--如果(+)在右边,那就是左连接 (+)在左,那就是右连接
select e.ename,e.job,m.ename from emp e,emp m  where  e.mgr=m.empno(+)
SQL:1999语法
--交叉连接
select * from emp cross join dept --作用就是为了产生笛卡尔积,效果同于
select * from emp , dept
--自然连接 自动找寻表与表之间的外键关联关系 (必须要有外键关联关系)(消除笛卡尔积)
select * from emp natural join dept	--不会产生笛卡尔积 等同于
select * from emp , dept where emp.deptno=dept.deptno
--JOIN USING 子句 (相同字段名称可以使用)
select * from emp join  dept using(deptno)
--JOIN ON 子句 (不相同字段名称也是可以使用)
select * from emp join dept on (emp.deptno=dept.deptno)
--外链接 (左外链接 右外链接 全连接)
select * from emp left  outer join dept on emp.deptno=dept.deptno
-- 右外链接
select * from emp right  outer join dept on emp.deptno=dept.deptno
--全连接
select * from emp full  outer join dept on emp.deptno=dept.deptno 
分组连接就是一个关键词group by 还有一个子语句 having
举个例子
统计平均工资大于两千的部门信息
select avg(e.sal),d.deptno, d.dname, d.loc, count(empno)
from emp e, dept d where e.deptno=d.deptno(+) 
group by d.deptno, d.dname, d.loc  
having avg(e.sal)>2000







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值