多表联合查询:

  • 条件:连接到一起的两张表,必须存在公共字段(主外键关系的字段就是公共字段)。名字可以不同,但是数据的含义、字段的类型、长度必须一致。(学生表和商品表就没有公共字段,两张表不适合做连接查询)。
  • 类型:不同的连接类型,连接后的查询结果不同
  • (1)内连接:返回两张表记录的交集
    (2)外连接:返回任意一张表的全部记录
    (3)自连接:一张表自己和自己连接,特殊的表结构
    (4)交叉连接:一张表的所有记录分别与另外一张表的所有记录匹配(不会管两张表是否有公共字段,交集。第一张表有4条记录,第二张表有3条记录,交叉连接最后的结果是4*3=12条记录),又称笛卡尔积
  • 内连接:将两张表在公共字段上有相同值的记录连接在一起成为查询结果。

返回两张表记录的交集

select 两张表的字段

from 表1 inner join

on 表1.公共字段 = 表2.公共字段

where……

order by……

  • 外连接:左外连接、右外连接、全外连接
  • 左外连接:返回内连接的查询结果+左表的剩余记录
       返回左表的全部记录以及右表的相关记录
    select 两张表的字段
    from 表1 left [outer] join
    on 表1.公共字段 = 表2.公共字段
    where……
    order by……
  • 右外连接

返回内连接的查询结果+右表的剩余记录

 返回右表的全部记录以及左表的相关记录

select 两张表的字段

from 表1 right [outer] join

on 表1.公共字段 = 表2.公共字段

where……

order by……

  • 全外连接
  • 返回内连接的查询结果+左右表的剩余记录
    返回两张表的全部记录以及另外一张表的相关记录 嵌套查询:
  • union:可以连接两个查询,要求,字段的个数必须一样。如果两个查询对应的字段的含义相同,类型一样union还可以合并相同的记录,否则重复呈现
  • 格式:左连接 union 右连接
  • 注:MySQL数据库中不支持使用full join实现全外连接,通过左外连接的查询结果和右外连接的查询结果的组合(union)间接实现全外连接的效果.
  • 一个查询中嵌入另外一个查询
  • 外层查询的where条件字段和内层查询的查询字段匹配。
  • 执行效率很低的查询:外层查询从表中每筛选一条记录,内层查询都要重新执行一次
  • 外层查询的where条件如果使用的是比较运算符,内层的查询结果只有一个值;如果内层的查询结果有多个值,外层的条件可以使用in
  • 外层查询和内层查询可以是不同的表,但仍属于单表查询,能查出来的字段只能是外层查询表中的字段