天天看点

五种关联查询

五种关联查询:

1. 交叉连接(CROSS JOIN)

2. 内连接(INNER JOIN)

3. 外连接(LEFT JOIN/RIGHT JOIN)

4. 联合查询(UNION 与 UNION ALL)

5. 全连接(FULL JOIN)

  • 交叉连接(没有任何关联条件,查询所有表)
    select * form a,b,c 
               
    或者 :
    select * from a cross join b cross join c
               
  • 内连接(多表中同时符合某种条件的数据记录的集合)
    select * from a,b where a.id = b.id
               
    或者 :
    select	* from a inner join b on a.id = b.id
               
    分析 :
    select	* from 表1 inner join 表2 on 条件
               
    内连接分为三类
    ①等值连接: on a.id = b.id
    
    ②不等值连接 : on a.id > b.id
    
    ③自连接: select * from a as a1 inner join a as a2 on a.id = a2.pid
    
    [自连接就是自己连接自己 条件id和pid]
               
INNER JOIN 可以缩写为 JOIN
  • 外连接

    左外连接:

    LEFT OUTER JOIN 缩写 LEFT JOIN
    以左表为主,先查询出左表,按照ON之后关联条件匹配右表,没有匹配到的用NULL填充
               
    右外连接:
    RIGHT OUTER JOIN 缩写 RIGHT JOIN
    以右表为主,先查询出右表,按照ON之后关联条件匹配左表,没有匹配到的用NULL填充
               
  • 联合查询
    表的数据结构一定要一样,把多个结果集集中到一起,UNION前的结果为基准
               

    union 相同的记录行会合并

    union all 不会合并重复的记录行

  • 全连接( 完整外部连接返回左表和右表中的所有行)
    mysql中不支持全连接,可以使用LEFT JOIN 和 UNION 和 RIGHT JOIN 联合使用
    select * from A left join B on A.id = b.id union select * from a right join on a.id = b.id