多表联合查询、嵌套查询

多表联合查询:

  • 条件:连接到一起的两张表,必须存在公共字段(主外键关系的字段就是公共字段)。名字可以不同,但是数据的含义、字段的类型、长度必须一致。(学生表和商品表就没有公共字段,两张表不适合做连接查询)。
  • 类型:不同的连接类型,连接后的查询结果不同
  • (1)内连接:返回两张表记录的交集

    (2)外连接:返回任意一张表的全部记录

    (3)自连接:一张表自己和自己连接,特殊的表结构

    (4)交叉连接:一张表的所有记录分别与另外一张表的所有记录匹配(不会管两张表是否有公共字段,交集。第一张表有4条记录,第二张表有3条记录,交叉连接最后的结果是4*3=12条记录),又称笛卡尔积

  • 内连接:将两张表在公共字段上有相同值的记录连接在一起成为查询结果。

返回两张表记录的交集

select 两张表的字段

from 表1 inner join 表2

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

where……

order by……

  • 外连接:左外连接、右外连接、全外连接
  • 左外连接:返回内连接的查询结果+左表的剩余记录

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

    select 两张表的字段

    from 表1 left [outer] join 表2

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

    where……

    order by……

  • 右外连接

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

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

select 两张表的字段

from 表1 right [outer] join 表2

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

where……

order by……

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

    返回两张表的全部记录以及另外一张表的相关记录

    嵌套查询:
    • union:可以连接两个查询,要求,字段的个数必须一样。如果两个查询对应的字段的含义相同,类型一样union还可以合并相同的记录,否则重复呈现

    • 格式:左连接 union 右连接

      • 注:MySQL数据库中不支持使用full join实现全外连接,通过左外连接的查询结果和右外连接的查询结果的组合(union)间接实现全外连接的效果.

      • 一个查询中嵌入另外一个查询
      • 外层查询的where条件字段和内层查询的查询字段匹配。
      • 执行效率很低的查询:外层查询从表中每筛选一条记录,内层查询都要重新执行一次

      • 外层查询的where条件如果使用的是比较运算符,内层的查询结果只有一个值;如果内层的查询结果有多个值,外层的条件可以使用in
      • 外层查询和内层查询可以是不同的表,但仍属于单表查询,能查出来的字段只能是外层查询表中的字段
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值