--多表链接
--查询员工姓名,薪资,部门地点
--查询的列有哪些
--这些列来自那张表
--有没有限制条件
select ename ,sal,loc from emp ,dept
--笛卡尔积:一张表中的所有数据与另一张表的所有数据都做了一个链接
select * from dept
--多表链接时需要加上限制条件 消除笛卡尔积的效果
--等值链接
--查询 员工姓名,薪资,部门地点
--emp.deptno=dept.deptno emp表与dept表的关联条件
--deptno 同时存在两张表中
--如果直接使用会 产生未明确定义列的问题
--需要表明进行区分
select ename,sal,loc from emp e,dept d where e.deptno=d.deptno
--查询员工编号,职位,工作地点,部门地点,部门号,部门名称
select empno,job,loc,e.deptno,dname from emp e,dept d where e.deptno=d.deptno
--非等值链接
--表与表之间的关联条件不是直接相等的
select ename ,sal ,grade from emp,salgrade where sal between losal and hisal --------
--外连接
--查询所有部门员工姓名和部门号,没有员工的部门也要显示
--(+) 外连接符号
--如果需要将不满足链接条件的数据显示在结果集
--可以使用(+)外连接符号
--(+)写在哪个表中 就会对应出现万能行
--万能行的作用就是与不满足条件的数据进行连接
select ename,d.deptno from emp e,dept d where e.deptno(+)= d.deptno
--查询员工姓名,薪资,工作地点,薪资等级
--多表连接后 如果有其他限制条件 在 where 中通过 and 连接
select ename ,sal,loc,grade from emp,dept ,salgrade where emp.deptno=dept.deptno and sal between losal and hisal;
--查询员工姓名,薪资,工作地点,薪资等级 要求薪资大于1500
select ename ,sal,loc,grade from emp,dept ,salgrade where emp.deptno=dept.deptno and sal between losal and hisal and sal>1500;
--N个表 表的关联条件至少 N-1
--通过表前缀可以提高查询性能
--表 别 名 代替表名
--当给表起了表别名之后 不能使用表名作为列的前缀
select ename ,e.deptno ,dname from emp e,dept d where e.deptno =d.deptno
--1.写一个查询,显示所有员工姓名,部门编号,部门名称。
select ename,e.deptno,dname from emp e, dept d where e.deptno=d.deptno;
--2.写一个查询,显示所有工作在CHICAGO并且奖金不为空的员工姓名,工作地点,奖金
select ename,loc,comm from emp e,dept d where e.deptno= d.deptno and loc='CHICAGO' and comm is not null
--3.写一个查询,显示所有姓名中含有A字符的员工姓名,工作地点。
select ename,loc from emp e,dept d where e.deptno=d.deptno and ename like '%A%'
1.查询每个员工的编号,姓名,工资,工资等级,所在工作城市,按照工资等级进行升序排序。
select e.deptno,ename,sal,grade,loc from emp e,dept d,salgrade s where e.deptno=d.deptno and e.sal between losal and hisal order by grade
--自链接
--查询每个员工的姓名和直接上级的姓名
--e表示员工表 l 表示领导表
-- 关联条件 员工表的领导编号=领导表员工编号
select e.ename ,l.ename from emp e,emp l where e.mgr=l.empno
---查询员工的姓名,薪资,领导姓名,领导薪资
select e.ename,l.ename,e.sal,l.sal from emp e,emp l where e.mgr=l.empno and e.sal<1500
--1.查询所有工作在NEW YORK和CHICAGO的员工姓名,员工编号,以及他们的经理姓名,经理编号。
select e.ename, e.empno,l.ename,l.empno from emp e,dept d,emp l where e.deptno=d.deptno and e.mgr=l.empno and e.mgr=l.empno and d.loc in ('NEW YORK','CHICAGO')
--2.第上一题的基础上,添加没有经理的员工King,并按照员工编号排序。
select e.ename,e.empno,l.ename,l.empno from emp e,emp l where e.mgr=l.empno(+)
--3.查询所有员工编号,姓名,部门名称,包括没有部门的员工也要显示出来。
select empno,ename,dname from emp e,dept d where e.empno=d.deptno(+)
网友评论