外连接定义:
不但返回满足连接条件的所有记录,而且会返回部分不满足条件的记录。(用左表的第一行分别和右表的所有行进行连接,如果有匹配的行,则一起输出,如果右表有多行匹配,则结果集输出多行,如果没有匹配行,则结果集中只输出一行,该输出行的左边为左表第一行内容,右边全部输出null)
外连接分类:
左外连接、右外连接。
tip:实际上左连接产生的结果集的行数很可能大于left join左边表的记录的总数,不能理解为:左连接left join左边表有n行,最终产生的记录也是n行。实际上左连接产生的结果集的行数很可能大于left join左边表记录的总数。
例:
select * from dept "D"
left join emp "E"
on E.deptno = D.deptno
完全连接:
(1)两个表中匹配的所有行记录。
(2)左表中那些在右表中找不到匹配行的记录,这些记录的右边全为null。
(3)右表中那些在左表找不到匹配行的记录,这些记录的左边全为null。
交叉连接:
select * from emp cross join dept
等价于
select * from emp,dept
自连接(重点):
定义:
一张表自己和自己连接起来查询数据。
例:使用聚合函数找到工资最高的员工及其信息。
select * from emp where sal = (select max(sal) from emp)
例:不使用聚合函数找到工资最高的员工及其信息。(自连接)
select * from emp
where empno not in (
select distinct "E1".empno
from emp "E1"
join emp "E2"
on "E1".sal < "E2".sal
)
联合(union)
定义:
表和表之间的数据以纵向的方式连接在一起。
例:输出每个员工的姓名、工资、上司的姓名
select "E1".ename, "E1".sal, "E2".ename "上司的姓名"
from emp "E1"
join emp "E2"
on "E1".mgr = "E2".empno
union
select ename, sal "最大老板",
from emp
where mgr is null
分页查询:
类似于网页查找时,最下面一排的导航栏,需要在点击不同的链接时,显示出该页所需展示的数据库中的数据。