交叉连接(笛卡尔积)、连接查询、内连接、外连接都有哪些,以及书写语法【详细】【有例子】【有代码】【基础】【重点】

连接查询:

  1. 连接查询是指多表联合查询;

连接查询的分类:

根据表的连接方式分类:

  • 内连接:
    • 等值连接
    • 非等值连接
    • 自连接
  • 外连接:
    • 左外连接(左连接)
    • 右外连接(右连接)
  •  全连接(这个不讲,很少用,并且MySQL也不支持)

笛卡尔积现象(交叉连接):

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

避免方式:增加条件进行过滤,但是并不会减少数据匹配次数,只不过显示的是有效记录

表匹配原理:表1中的一条数据与表2中的所有数据进行匹配

内连接是什么?

  1. 内连接是从结果表中删除与其他被连接表中没有匹配行的所有行,也就是找到两个表中相同的字段进行返回;
  2. 属于有条件的交叉连接;

内连接都有哪些方式?

内连接-等值连接:

语法:

...
    A
join
    B
on
    连接条件
where
    ...

举例:

// inner可以省略的,带着inner目的是可读性好一些。

select

e.ename,d.dname

from

emp e

inner join

dept d

on

e.deptno = d.deptno;

执行结果:

就是把两张表值相等的直接连起来了;

内连接-非等值连接:

语法:同非等值连接;

举例:

// inner可以省略

select

e.ename,e.sal,s.grade

from

emp e

inner 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;

结果:

栗子用的数据表:

外连接是什么?

  • 分为左外连接和右外连接;
  • 左外连接:又称左连接。左边是主表,这种连接方式会显示左表不符合条件的数据行,右边不符合条件的数据行直接显示NULL。
  • 右外连接:又称右连接,与左连接相对,这种连接方式会显示右表不符合条件的数据行,左表不符合条件的数据行直接显示NULL。
  • 这里的左右指的是join语句的左右,不懂的可以看下面的栗子;

外连接都有哪些方式?

外连接-左连接:表示左边的这张表是主表,显示左表不符合条件的数据行,右边不符合条件的数据行显示NULL。

// outer是可以省略的。

select

a.ename '员工', b.ename '领导'

from

emp a

left outer join

emp b

on

a.mgr = b.empno;

外连接-右连接:表示右边的这张表是主表;

外连接:(右外连接/右连接)

select

a.ename '员工', b.ename '领导'

from

emp b

right join

emp a

on

a.mgr = b.empno;

可以将左连接和右链接对比着看!

主表就是要全部查询的表格;

  1. 三张表查询也一样,先连上两个,再连接第三个;
  2. 栗子用的数据表:

猜你喜欢

转载自blog.csdn.net/jiayoudangdang/article/details/123166668