1.多表查询:
链接查询(多表查询)
多表查询,本质上来说就是多张表当中获取数据
select * from emp;-- 14 条数据
select * from dept;-- 4 条数据
select * from emp,dept;-- 56 条数据
select * from emp,dept where ename = 'SMITH';-- 4条数据
/*
产生了错误的数据,错误的数据叫做笛卡尔积
A 表中有 3条数据,B表中有2条数据,笛卡尔积 6 条数
*/
多表查询本质上来说就是为了过滤掉笛卡尔积,过滤掉错误的数据
等值链接
查询两张表中相同的列,相同的关系可以消除掉 笛卡尔积
用相同的列进行链接,消除掉不满足条数据的数据
select *
from emp e,dept d
where e.deptno = d.deptno;
等值链接本质就是把多余的数据过滤掉,找到一条或者多条相互匹配的数据进行显示
表和表之间会产生一定的关系,最少创建 ER图
-- 找到收取奖金的员工信息和部门信息
select * from emp e, dept d where e.deptno = d.deptno and comm is not null ;
-- 查询员工编号、姓名、工作、部门编号、部门名称
select empno,ename,job,deptno,dname
from emp e,dept d
where e.deptno = d.deptno;
非等值链接
没有关系的列,如何链接
不是所有表中的列都是等值链接的,有的时候就需要用到非等值链接(不等值链接)
-- 输出员工信息,并输出员工工资等级
select e.*,s.grade from emp e,salgrade s
where sal between losal and hisal;
/*
链接就是一张表的一行数据和另外一张表的所有行进行匹配
等值链接就是通过相同的关系,把笛卡尔积过滤掉
只要能够消除掉 笛卡尔积,找到合适的数据,不管 where 条件后面跟什么都可以
非等值链接,可以去找A 表中相对应的值
*/
内链接
满足条件的显示,不满足条件的过滤掉
select *
from emp e join dept d
on e.deptno = d.deptno;
内连接只显示相互关联的数据,如果是不关联的数据不显示
外连接
-- 先插入一条数据
insert into emp values(1000,'zhangsan','san',7782,null,null,null,null);
select * from emp e join dept d on e.deptno = d.deptno; -- 没有新插入的数据
/*
内连接是通过相等来消除笛卡尔积,不满足条件就会被过滤掉(不满足条件的就不会显示)
如果我们想要把不满足条件的数据显示出来就需要使用到外连接(显示某张表全部内容)
*/
外连接:左外链接和右外链接
外连接:两张表相互连接,把满足条件的数据返回,返回主表不满足条件的数据, 这种链接形式叫做外连接
主表当中不满足条件的也会显示出来
主从关系如何确认
左外连接,左表是主表
右外链接,右表是主表
Oracle 中可以用 + 做链接
-- 左外链接, + 在右边
select *
from emp e,dept d
where e.depeno=d.deptno(+);
-- 右外链接, + 在左边
select *
from emp e,dept d
where e.deptno(+) = d.deptno;
-- + 放到相反的方向
左外链接
left join
select *
from emp left join dept
on emp.deptno = dept.deptno;
右外链接
right join
select *
from emp right join dept
on emp.deptno = dept.deptno;
满外链接
满外链接,属于 Oracle 的特性 full、
两张表中不满足条件的内容全部都显示出来
select *
from emp e full join dept d
on e.deptno = d.deptno;
作业
- 找出在 (任何年份的)2 月受雇的所有员工信息
- 请查询中 1987 年雇员的员工名和雇佣日期
- 查询员工信息和sal
- 如果是'MANAGER' 部门 sal 为工资的1.1倍
- 如果是'CLERK' 部门 sal 为工资的1.2倍
- 如果是'SALESMAN' 部门 sal 为工资的1.3倍,
- 否则 sal 为工资
- 查询所有员工的姓名,工资,部门名称
- 查询20部门员工的工资等级
- 查询员工的信息和其所在的部门信息
- 查询指定年份之间入职的员工信息及入职年份。(1980-1985)
进阶
/* 在emp表中,给职位加薪,MANAGER加1500,SALESMAN加1800,
ANALYST加500,加完薪后,因公司盈利,每个部门,之前没有奖金的人,
加2000的奖金,有奖金的人,奖金翻倍,然后统计总收入。
6000 以上 土豪 5000以上是 上等
4000以上是 中等 3000以上是 一般 其他为 人嫌 */
标签:--,高级,查询,dept,emp,sql,deptno,链接,select From: https://blog.csdn.net/ziaoming_biu/article/details/136884746