写点什么

【Java 从 0 到架构师】SQL 多表查询

作者:Java高工P7
  • 2021 年 11 月 11 日
  • 本文字数:1134 字

    阅读完需:约 4 分钟

有顾客的公司信息(附带顾客信息) = 有公司的顾客信息(附带公司信息)


INNER JOIN




内连接:查询出所有有公司信息的顾客信息(附带公司信息)


  • 等价于 所有有顾客信息的公司信息(附带顾客信息)


l ∩ r

SELECT * FROM


customer l


INNER JOIN


company r


ON


l.company_id = r.id;


下面的写法等价于上面的内连接:


SELECT * FROM


customer l, company r


WHERE l.company_id = r.id;


LEFT JOIN




左外连接:查询出所有有公司和没有公司的顾客信息(附带公司信息)


l ∪ (l ∩ r)

SELECT * FROM


customer l


LEFT JOIN


company r


ON


l.company_id = r.id;


LEFT JOIN EXCLUDING INNER JOIN




有 WHERE 的左外连接:查询出所有没有公司的顾客信息(附带公司信息)


  • 排除了有公司的顾客信息(附带公司信息)


l - (l ∩ r)

SELECT * FROM


customer l


LEFT JOIN


company r


ON


l.company_id = r.id


WHERE


r.id IS NULL;


RIGHT JOIN




右外连接:查询出所有有顾客和没有顾客的公司信息(附带顾客信息)


r ∪ (l ∩ r)

SELECT * FROM


customer l


RIGHT JOIN


company r


ON


l.company_id = r.id;


RIGHT JOIN EXCLUDING INNER JOIN




带 WHERE 的右外连接:查询出所有没有顾客的公司信息(附带顾客信息)


  • 排除了有顾客的公司信息(附带顾客信息)


r - (l ∩ r)

SELECT * FROM


customer l


RIGHT JOIN


company r


ON


l.company_id = r.id


WHERE


l.company_id IS NULL;


SQL 规范中定义了 FULL OUTER JOIN(全外连接),MySQL 中实现需要依靠 UNION


FULL OUTER JOIN




全外连接:查询出所有:


  • 有顾客的公司信息(附带顾客信息)


等价于 有公司的顾客信息(附带公司信息)


  • 没有顾客的公司信息(附带顾客信息)

  • 没有公司的顾客信息(附带公司信息)


l ∪ r

(


SELECT * FROM


customer l


LEFT JOIN


company r


ON


l.company_id = r.id


)


UNION


(


SELECT * FROM


customer l


RIGHT JOIN


company r


ON


l.company_id = r.id


);


FULL OUTER JOIN EXCLUDING INNER JOI


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


N




排除内连接的全连接,查询出所有:


  • 没有顾客的公司信息(附带顾客信息)

  • 没有公司的顾客信息(附带公司信息)


(l ∪ r) - (l ∩ r)

(


SELECT * FROM


customer l


LEFT JOIN


company r


ON


l.company_id = r.id


WHERE


r.id IS NULL


)


UNION


(


SELECT * FROM


customer l


RIGHT JOIN


company r


ON


l.company_id = r.id


WHERE


l.company_id IS NULL


);


更多的表


=======================================================================




排序、分页


========================================================================


排序


ORDER BY 字段 [ASC | DESC]


分页


LIMIT {[offset,] row_count | row_count OFFSET offset}


  • offset 是记录的偏移量(最小值是 0),从哪一条记录开始选择

  • row_count 是希望选择的记录数量

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
【Java从0到架构师】SQL 多表查询