多表操作
笛卡尔积现象
当俩张表进行连接查询的时候,没有任何条件进行限制,最终的查询结果是俩张表记录的条数乘积
select e.ename ,d.dname from emp e,dept d;
如何避免笛卡尔积现象?加过滤的条件。
当然不会减少记录的匹配次数,只不过显示的是有效的记录
内连接
-
等值连接
最大特点是:条件是等量关系
select
e.ename ,d.dname
from
emp e
JOIN
dept d
on
e.deptno = d.deptno;
- 非等值连接
最大特点是:连接条件中的关系是非等量关系
SELECT
e.ename,e.sal,s.grade
from
emp e
join
salgrade s
ON
e.sal BETWEEN s.losal and s.hisal
- 自连接
最大特点是:一张表看做俩张表。自己连接自己
SELECT
a.ename as '员工名' , b.ename as '领导名'
from
emp a
INNER JOIN
emp b
ON
a.mgr = b.empno
外连接
什么是外连接,和内连接有什么区别?
内连接:
假设A和B表进行连接,使用内连接的话,凡是A表匹配上的记录,都会查出来,这就是内连接。
AB俩表没有主副之分,都是平等的。
外连接:
假设A和B表进行连接,使用外连接的话,AB俩张表中有一个是主表,一张是副表,主要查询主表的数据
捎带着查询副表数据,当副表没有匹配的数据,副表自动模拟出null与之匹配
-
左连接
-
右连接
多表操作
一对一
使用场景:一个人对应一个身份证,一个身份证对应一个人。
处理方式 :任意的一个表建立外键,去关联另一个主键。
人 : id number pid(设置外键)
身份证: id name
多对一
使用场景:订单操作 一个人多个订单
处理方式:在多的一方建立外键,关联到一的那一方主键。
多对多
使用场景: 学生和老师之间等
处理方式: 借助第三张表,中间表至少包含来个列。将中间表中列(就是俩表的id大部分这样)设置为外键。
关联到俩表的主键上。