SQL多表关联查询
1 --内连接 2 select e.empno as 员工编号, e.ename as 员工名称, d.dname as 部门 3 from emp e inner join dept d on e.deptno=d.deptno; 4 5 --左外连接 6 insert into emp(empno,ename,job) values(9527,'EAST','SALESMAN'); 7 8 select e.empno,e.ename,e.job,d.deptno,d.dname from emp e left join dept d 9 on e.deptno=d.deptno; 10 --右外连接 11 select e.empno,e.ename,e.job,d.deptno,d.dname from emp e right join dept d 12 on e.deptno=d.deptno; 13 14 --完全连接 15 select e.empno,e.ename,e.job,d.deptno,d.dname from emp e full join dept d 16 on e.deptno=d.deptno; 17 18 --自然连接(共有的属性,会去除重复列) 19 select empno,ename,job,dname from emp natural join dept where sal>2000; 20 21 事务如果不提交,会一直写入以下表空间; 22 redo(记录日志表空间) undo(记录日志备份表空间) 23 提交: commit 回滚: rollback 24 25 --右外连接过滤 26 select * from emp e right join dept d on e.deptno=d.deptno 27 where e.deptno is null; 28 --左外连接过滤 29 select * from emp e left join dept d on e.deptno=d.deptno 30 where d.deptno is null; 31 --全外连接过滤 32 select * from emp e full join dept d on e.deptno=d.deptno 33 where d.deptno is null or e.deptno is null; 34 35 36 /*自连接(self join)是SQL语句中经常要用的连接方式,使用自连接可以将自身表的一个镜像当作另一个表来对待,从而能够得到一些特殊的数据。 37 在emp中的每一个员工都有自己的mgr(经理),并且每一个经理自身也是公司的员工,自身也有自己的经理。*/ 38 select em2.enname 管理者,em1.enname 下属员工 from emp em1 left join emp em2 on em1.mgr=em2.empno order by em1.mgr; 39 40 /*交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数*/ 41 select count(*) from dept cross join emp;