1.99表内连接
首先,在使用查询语句时,当要查询的数据来源于多张表时,使用连表查询;当查询数据来自于一张表,但是相关的满足条件来自于其他表时,优先使用子查询。
1.1cross join|笛卡尔积
格式:select 数据 from 数据源1 cross join 数据源2…;
例:select e.empno ,e.ename,d.deptno from emp e cross join dept d;
使用cross join 最后得到的数据集是笛卡尔积的状态。
1.2等值连接
1.2.1自然连接
natural join作为自然连接,会自动将同名字段|主外键关系的字段进行等值连接,且在自然连接中,同名字段不能写限定词(指明出处)。
--在自然连接中 同名字段会自动进行等值连接
select e.empno,e.ename,deptno from emp e natural join dept d;
1.2.2join…using ()
join…using 在使用过程中,using中存放同名的字段,语句按照括号内的字段进行等值连接。
--在join.....using中,同名字段不能写限定词(指明出处)
select e.empno,e.ename,e.deptno from emp e join dept d using(deptno);
1.2.3join…on…
join…on…不同于以上两种连接方式,等值的连接判断需要我们自己写在on后面,当然on后面也可以做非等值判断。
当连接两张表时:数据源1 join 数据源2 on 连接条件
当连接多张表时:数据源1 join 数据源2 on 连接条件1 join 数据源3 on连接条件2…
即当连接多张表时,后面的表会和前面已经连接的新表再次进行连接。
--查询所有员工的信息以及所在部门信息然后过滤掉,只保留10部门 -->先连接,然后后过滤
select * from emp e join dept d on e.deptno = d.deptno where e.deptno = 10;
--连接多张表
select * from student st join score sc on st.sno=sc.sno join course co on sc.cno=co.cno
join…on…用于自连接:
--使用join......on......自连接,当过滤条件都来源于自身时,则需要用到自连接
select * from emp e1 join emp e2 on e1.mgr = e2.empno;
2.外连接
使用内连接查询数据时,有些数据不满足连接条件,但是也要想展示出来则需要用到外连接,在外连接中主表很关键,主表中的数据不满足连接条件也会全部显示出来。
- 左连接:left join
- 右连接:right join
- 全连接:full join
--左连接
select * from emp e1 left join emp e2 on e1.mgr = e2.empno;
--右连接
select * from emp e2 right join emp e1 on e1.mgr = e2.empno;
--两边都是主表
select * from emp e1 full join emp e2 on e1.mgr = e2.empno;
不同于92查询语法中的左右连接,99语法中使用方法更加灵活。