2018-04-23下午

2018-04-23  本文已影响0人  怀念单调

--多表链接

--查询员工姓名,薪资,部门地点

--查询的列有哪些

--这些列来自那张表

--有没有限制条件

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(+)

上一篇下一篇

猜你喜欢

热点阅读