分享

sql 多表查询的用法

 L罗乐 2019-05-22

本文转载自公众号:媛测,作者:yuance。

本文仅在 Mysql 中验证,其它数据库中可能会有差异。

多表查询,即同时查询两张表或更多表,包括交叉连接、内连接、左/右外连接、合并等。

在使用时:

  • 多张表中的列名可能一致,所以必须为每张表起别名,通过别名指向对应的列

  • 通常需要有关联条件

交叉连接查询:

  • 得到的是两个表的乘积(笛卡尔集),返回左表中的所有行,及左表中的每一行与右表中的所有行组合

  • 简单查询两张表组合,就是求笛卡儿积,效率最低,基本不会使用。

select * from a, b;

内/外连接

内连接查询:

  • 可以有效的去除笛卡尔集现象

  • 有两种方式:隐式内连接,显式内连接

'隐式内连接:'select a.xx, a.xxx, b.xxx
from A a, B b
where a.xx = b.xx;

或者:
select a.*, b.*
from A a, B b
where a.xx = b.xx;

'显式内连接:'
select * from A a
inner join B b
on a.xx = b.xx;
(其中 inner 可以省略)

外连接查询:

  • 有两种方式:左外连接,右外连接

  • 左外连接:简称左连接

    • 左边表的内容全部显示,然后匹配右边的表

    • 如果右边的表匹配不到,则空

    • 即返回两张表共有的部分,及左表中独有的信息

  • 右外连接:简称右连接

    • 右边表的内容全部显示,然后匹配左边的表

    • 如果左边的表匹配不到,则空

    • 即返回两张表共有的部分,及右表中独有的信息

(其中,out 可省略)
'左外连接:'
select * from A 
left outer join B 
on 条件

'右外连接:'
select * from A
right out join B 
on 条件

总结:

  • 内连接:两表交集

  • 左外连接:左边表,包含两表交集

  • 右外连接:右边表,包含两表交集

select a.field1, b.field2...
from tab1 a
inner/left/right join tab2 b
on a.field1 = b.field1;

Union 合并

  • 用于合并两个或多个 SELECT 语句的结果集

  • 使用 UNION 时,多张表查询的结果要有相同数量的列、且列类型相似。

  • 有两种用法:UNIONUNION ALL

UNION:

  • 消除多表中任何重复行

UNION ALL:

  • 不消除重复行

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多