多表操作

笛卡尔积现象

当俩张表进行连接查询的时候,没有任何条件进行限制,最终的查询结果是俩张表记录的条数乘积

select e.ename ,d.dname from emp e,dept d;

在这里插入图片描述

如何避免笛卡尔积现象?加过滤的条件。
当然不会减少记录的匹配次数,只不过显示的是有效的记录

内连接

  1. 等值连接

    最大特点是:条件是等量关系

select 
   e.ename ,d.dname
from 
    emp e
JOIN
    dept d
on 
   e.deptno = d.deptno;

  1. 非等值连接

最大特点是:连接条件中的关系是非等量关系

SELECT
   e.ename,e.sal,s.grade
from 
   emp e
join 
    salgrade s
ON 
   e.sal BETWEEN s.losal and s.hisal
  1. 自连接
    最大特点是:一张表看做俩张表。自己连接自己
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与之匹配

  1. 左连接
    2.

  2. 右连接
    在这里插入图片描述

多表操作

一对一
使用场景:一个人对应一个身份证,一个身份证对应一个人。

处理方式 :任意的一个表建立外键,去关联另一个主键。

人 : id number pid(设置外键)
身份证: id name

多对一

使用场景:订单操作 一个人多个订单

处理方式:在多的一方建立外键,关联到一的那一方主键。

多对多

使用场景: 学生和老师之间等

处理方式: 借助第三张表,中间表至少包含来个列。将中间表中列(就是俩表的id大部分这样)设置为外键。
关联到俩表的主键上。

posted @ 2021-04-28 16:08  杰的博客#  阅读(23)  评论(0编辑  收藏  举报