1.连接条件无效或没有连接条件,即会产生笛卡尔积
2.结果:表中每个字段都会和另一张表中所有字段连接并输出数据
多条件查询,把关联条件写在最前面
不是字段产生的关系,而是里面的值有相等的关系,所以即使字段不同,也可以,但一般都设置为相同的
select ename,e.deptno
from emp e,dept d
where e.deptno=d.deptno
根据值的关系建立连接
emp表中的sal在salgrade表中losal,hisal之间 所以用这个关系连接这两个表
select empno,ename,sal,grade,loc
from emp e,dept d,salgrade s
where e.deptno=d.deptno and sal between losal and hisal
order by grade;
1.理解
dept中有deptno=40的部门而emp中deptno没有40,但是又想把dept中40的部门显示出来,此时只需把dept(查谁 谁是基表)作为基表 用+号(放在不是基表的另一张表)连接就可以了。
2.概念
外部连接就好像是为符号(+)所在边的表增加一个“万能”的行,这个行全部由空值组成。它可以和另一边的表中所有不满足连接条件的行进行连接。由于这个“万能”行的各列全部是空值,因此在连接结果中,来自“万能”行属性值全部为空值
3.实例
select *
from dept d,emp e
where e.deptno(+)=d.deptno
1.特点
同一张表中不同字段建立的连接
2.实例
--员工的经理编号=经理的员工编号
select worker.ename 员工姓名,manager.ename 经理姓名
from emp worker,emp manager
where worker.mgr=manager.empno
1.特点
左边表全部显示,右边表与左表匹配,如果有些值右表没有,空值填充
2.实例
select *
from emp e left outer join dept d
on(e.deptno=d.deptno)
1.特点
右边表全部显示,左边表与右表匹配,如果有些值左表没有,空值填充
select *from emp e right outer join dept d
on(e.deptno=d.deptno)
1.特点
全外连接返回两个表等值连接结果,以及两个表中所有等值连接失败的记录
2.实例
SELECT e.empno, d.deptno
FROM emp e
FULL OUTER JOIN dept d
ON (e.deptno = d.deptno);
1.cross join交叉连接
语法 cross join 表名
特点:交叉连接会产生连个表的交叉乘积,和两个表之间的笛卡尔积是一样的
2.自然连接
自然连接是对两个表之间相同名字和数据类型的列进行的等值连接;
--如果两个表之间相同名称的列的数据类型不同,则会产生错误;
--使用NATURAL JOIN子句来完成。
--两个表中关联的字段不能使用别名
3.using连接
1.特点自然连接是使用所有名称和数据类型相匹配的列作为连接条件,而USING子句可以指定用某个或某几个相同名字和数据类型的列作为连接条件
2.实例
-- 两个表的字段都是deptno 进行连接
SELECT e.ename,e.sal,deptno,d.loc
FROM emp e JOIN dept d USING (deptno)
WHERE deptno = 20 ;
4.on连接
1.特点
如果要指定任意连接条件,或指定要连接的列,则可以使用ON子句;
--用ON将连接条件和其它检索条件分隔开,其它检索条件写在WHERE子句;
--ON子句可以提高代码的可读性
2.实例
select e.ename,e.deptno,d.dname
from emp e
join dept d
on (e.deptno=d.deptno)