mysql 多表查询的用法

本文仅在 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:

  • 不消除重复行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章