92语法 99语法

查询所有用户的信息及所在部门信息
查询的数据: 用户信息 部门信息
来源: 用户表 emp 部门表 dept
多个表中才能拿到我们想要的数据==连表查询
92语法 99语法

笛卡尔积

  • select empno,emp.deptno from emp,dept;

使用的字段,是多个表中存在的,指定字段的来源
别名

  • select empno,d.deptno from emp e,dept d;

等值连接 可以是相同名字的字段,也可以是非相同名字的字段,但是要保证两个字段的类型相同

  • select * from emp,dept where emp.deptno=dept.deptno;
  • select * from emp,dept where emp.ename=dept.dname; --没有满足条件的数据

查询30部门 用户的信息及所在部门信息

  • select * from emp,dept where emp.deptno=dept.deptno and
    emp.deptno=30;

非等值连接
薪资2500的等级信息

  • select * from salgrade where 2500 between losal and hisal;

查询所有员工的信息及工资等级信息

  • select * from emp e,salgrade s where e.sal between s.losal and
    s.hisal;

查询用户的用户信息,部门信息及薪资等级信息

  • select * from emp e, dept d, salgrade s where e.deptno = d.deptno
    and sal between s.losal and s.hisal;

查询所有有上级的员工的信息及上级信息 假设e1是员工表 e2是上级表
select * from emp e1,emp e2 where e1.mgr=e2.empno;

查询所有员工的信息及上级信息 假设e1是员工表 e2是上级表
需求:想要期中的某张表中所有的数据全部展示,无论是否满足等值连接条件 --外链接
外链接:确认主表(主表中的内容会全部展示) +对面的表为主表,+所在的表为从表
左外连接 主表在,的左边叫做左连接
右连接 主表在,的右边叫做右连接
自连接 特殊的连接,自己连接自己 也可以自外链接

  • select * from emp e2,emp e1 where e1.mgr=e2.empno(+); --右连接
  • select * from emp e1,emp e2 where e1.mgr=e2.empno(+); --左连接
  • select * from emp e1,emp e2 where e1.mgr=e2.empno; --自连接

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

  • select deptno,count(1) from emp group by deptno; select dname, c
    from dept d, (select deptno, count(1) c from emp group by deptno) e
    where d.deptno = e.deptno;

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

  • select dname, nvl(c,0) from dept d, (select deptno, count(1) c from
    emp group by deptno) e where d.deptno = e.deptno(+); --左链接

99语法
实现笛卡尔积效果
92写法

  • select * from emp ,dept;

99写法 交叉连接 cross join

  • select * from emp cross join dept;

等值连接
自然连接 natural join 内部自动查找同名字段|主外键关系 自动实现等值连
不能指定限定词

  • select deptno from emp natural join dept;

using 连接 指定字段等值连接

  • select * from emp join dept using(deptno);

非等值连接|等值连接 join …on… (Inner join内连接)

  • select * from emp join dept on emp.deptno = dept.deptno;

查询工资答应1500的用户的信息和薪资等级

  • select * from emp e join salgrade s on e.sal between s.losal and
    s.hisal where sal>1500;

查询10和30部门的员工的名称,部门名称,薪资,薪资等级,上级名称
select e.ename, d.dname, e.deptno, e.sal, s.grade, m.ename
from emp e
join emp m
on e.mgr = m.empno
join salgrade s
on e.sal between s.losal and s.hisal
join dept d
on e.deptno = d.deptno
where deptno in (10, 30);

外连接
左外连接 left join … on…

  • select * from emp e1 left join emp e2 on e1.mgr = e2.empno;

右外连接 right join … on…

  • select * from emp e2 right join emp e1 on e1.mgr = e2.empno;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值