当前位置: 首页 > news >正文

SQL 多表查询速查:JOIN、子查询一文全掌握 - 详解

每个工程师的必备技能。本文总结了多表查询的常用写法,既能作为学习笔记,也能在面试中快速回忆。就是在实际构建和面试中,多表查询是SQL的核心考点之一。业务中几乎不可能只靠单表达成所有需求,因此掌握JOIN和子查询

一、为什么要用多表查询?

真实业务中,数据往往分散在不同表中,例如用户表和订单表。

查询用户的订单信息,就需要把这两张表的数据结合在一起。

SQL提供了JOIN和子查询两大手段,灵活完成多表数据整合。

二、JOIN 详解

1. INNER JOIN(内连接)

取两张表中匹配成功的数据。

SELECT u.id, u.name, o.order_id, o.amount

FROM users u

INNER JOIN orders o ON u.id = o.user_id;

只有users和orders同时匹配到的行才会被返回。

2. LEFT JOIN(左连接)

以左表为主,返回左表全部数据,如果右表没有匹配,则填充为NULL。

SELECT u.id, u.name, o.order_id

FROM users u

LEFT JOIN orders o ON u.id = o.user_id;

即使某些用户没有订单,也会出现在结果里。

3. RIGHT JOIN(右连接)

和LEFT JOIN相反,以右表为主,返回右表全部信息。

SELECT u.id, u.name, o.order_id

FROM users u

RIGHT JOIN orders o ON u.id = o.user_id;

4. FULL JOIN(全连接)

返回两张表的所有数据,匹配不上的部分填NULL。

⚠️ 注意:MySQL不直接支撑FULL JOIN,可以通过UNION组合LEFT JOIN和RIGHT JOIN来实现。

三、子查询(Subquery)

写在另一个SQL里的SQL。常见用法有三类:就是子查询

1. 标量子查询

子查询返回单个值,常用于比较。

SELECT name, salary

FROM employees

WHERE salary > (SELECT AVG(salary) FROM employees);

查询工资高于平均工资的员工。

2. 列子查询

子查询返回一列,常用于IN。

SELECT name

FROM users

WHERE id IN (SELECT user_id FROM orders WHERE amount > 100);

查询下过大额订单的用户。

3. 表子查询

子查询返回一张临时表,许可继续JOIN或SELECT。

SELECT t.user_id, COUNT(*) AS order_count

FROM (SELECT user_id FROM orders WHERE status = 'paid') t

GROUP BY t.user_id;

查询所有已支付订单的用户及订单数。

四、ON和WHERE的区别

很多初学者容易混淆ON和WHERE的区别。

ON:在表连接阶段起作用,决定两表如何匹配。

WHERE:在连接完毕后过滤结果。

举个例子:

SELECT u.id, u.name, o.order_id

FROM users u

LEFT JOIN orders o ON u.id = o.user_id

WHERE o.amount > 100;

注意,这里WHERE o.amount > 100会把没有订单的用户也过滤掉,效果相当于INNER JOIN。

倘若要保留没有订单的用户,应该把条件写在ON后面。

五、面试高频考点

1. INNER JOIN和LEFT JOIN的区别?

答:INNER JOIN只保留匹配行,LEFT JOIN保留左表全部行。

2. 子查询和JOIN的区别?

答:子查询可读性高,JOIN性能更好;面试时可提到“优化时更倾向于JOIN”。

3. ON和WHERE的执行顺序?

答:ON先于WHERE执行,影响结果集范围。

六、总结

多表查询核心两大工具:JOIN和子查询。

JOIN主要分为INNER、LEFT、RIGHT、FULL,不同场景灵活选择。

子查询分为标量、列、表三种类型。

注意ON和WHERE的区别,这是面试的常见考点。

掌握这些写法,能消除大多数业务查询问题,也是面试必问的重点。

建议:多写实际SQL,多用EXPLAIN分析执行计划,才能真正理解JOIN的性能差异。

http://www.hskmm.com/?act=detail&tid=22487

相关文章:

  • 深入解析:数字和字节:Linux 中的内存如何工作?
  • AtCoder Beginner Contest 424 425 部分题解
  • 关于滚动数组
  • 第九篇
  • 2025 年宁波搬家公司推荐 TOP 权威榜单发布,多维度解读宁波搬家服务公司创新亮点举措
  • 2025 年检测器厂家推荐 TOP 品牌权威排名,防爆火焰 / 一体化火焰 / 紫外线火焰 / 离子火焰 / 红外线火焰 / 红紫外复合火焰 / 智能火焰检测器公司推荐
  • 9-29
  • 10-1
  • 2025母线槽源头厂家 TOP 工厂权威榜单揭晓,密集型、封闭、浇筑、耐火、防火、防水、插接式母线槽公司推荐!
  • 2025 年衬氟鹤管源头厂家 TOP 企业品牌推荐排行榜,天然气 / 低温 / LNG / 撬装 / 底装 / 火车 / 装卸车 / 上装 / 衬氟 / 下装鹤管公司推荐这 10 家
  • 2025 铜覆钢圆钢生产商厂家 TOP 企业品牌推荐榜单,铜覆钢接地极 / 棒 / 圆钢 / 扁钢 / 圆线 / 绞线 / 角钢 / 扁铁 / 管公司推荐这 10 家
  • 2025 年喷雾干燥机厂家 TOP 企业品牌推荐排行榜,无锡 / 常州喷雾干燥机 / 离心式 / 压力式 / 气流 / 造粒 / 有机溶剂 / 闭路循环 / 闭式循环 / 实验喷雾干燥机公司推荐!
  • 2025 年工业吊扇最新推荐权威排行榜:TOP5 优质品牌全面解析,助力企业高效选购
  • 2025 同步带源头厂家 TOP 排行榜单公示,碳纤维 / 高扭矩碳纤维 / 高强力 / 保力强 / 摩托车 / 自行车同步带公司推荐
  • 20250928 组合计数
  • 哈希问题的一类技巧
  • CVPR-2025 | 具身导航指令高效生成!MAPInstructor:基于场景图的导航指令生成Prompt调整策略 - 详解
  • 2025 年无锡西门子产品供应商 TOP 企业品牌排行榜,PLC,高低压变频器,高低压电机代理分销商推荐
  • 2025 年树脂排水沟厂家 TOP 品牌权威排行榜单,U 形、线性、成品、混凝土、园林、市政、玻璃钢树脂排水沟公司推荐
  • 2025 年石墨烯厂家推荐 TOP 品牌排行榜单最新发布,氧化 / 羧基化 / 巯基化 / 羟基化 / 氨基化 / 氮掺杂氧化 / 氮掺杂石墨烯公司推荐
  • AtCoder Grand Contest 015 - E - Mr.Aoki Incubator
  • 9.30 CSP-S模拟25 改题记录
  • 全球抗体药表达系统:CHO 细胞主导下,未来十年将迎哪些突破?
  • 完整教程:[论文阅读]Benchmarking Poisoning Attacks against Retrieval-Augmented Generation
  • 绕过Cloudflare IP白名单限制的技术解析
  • 撕裂的乡土:在人性荒原上寻找微光
  • 2025蔬菜配送服务公司 TOP 企业推荐排行榜,深圳、宝安、光明、松岗、东莞、长安、虎门、沙田、厚街、大岭山蔬菜配送推荐
  • 2025液压缸TOP企业品牌推荐排行榜!抓斗、伺服、大吨位、车辆、工程、拉杆、冶金、重载、港机液压缸推荐
  • 2025 年破胶机厂家品牌推荐榜单白皮书,多规格型号 610/710/810、大型、自动型、低温环保、节能省电、自动打块、轮胎破胶机公司推荐
  • 乱七八糟的国庆做题记录