–SQL99 多表查询
-
–笛卡尔积:使用cross join
select * from emp cross join dept;
–自然连接
–使用select 内容 from 表名 natural join 表名
–特点:1底层先笛卡尔积,然后按照所有的同名同值字段进行等值筛选。
–问题1:如果想按照部分字段结果筛选怎么办?
–问题2:如果字段名不同,但是值相同如何筛选?
select * from emp natural join dept;
–解决1:使用using关键字
–作用1:使用指定的字段对联合查询的结果进行等值筛选
–注意:指明的字段内容必须是两表同名同值字段
–使用:select 内容 from 表名 inner join 表名 using(字段)
select * from emp inner join dept using(deptno);
–解决2:使用on关键字进行自定义连接条件筛选(等值筛选,不等值筛选)
–注意:普通筛选条件使用where进行,不要使用on进行。
–使用:select 内容 from 表名 inner join 表名 on 连接条件 where 普通筛选条件
select * from emp e inner join dept d on e.deptno=d.deptno where sal>2000;
–外连接 -
–左外连接
select * from emp e left join dept d on e.deptno= d.deptno;
-
–右外连接
select * from emp e right join dept d on e.deptno=d.deptno;
-
–全外连接
select * from emp e full join dept d on e.deptno=d.deptno;
-
–自连接
–查询员工的领导
select e1.ename ||’ 领导是 ’ || e2.ename from emp e1 inner join emp e2 on e1.mgr=e2.empno;
select * from emp where mgr is null;
上图中有5个人没有上级领导。所以查询结果为