内连接返回两表匹配记录,左连接保留左表全部数据,右连接保留右表全部数据,多表连接可连续使用JOIN实现复杂查询。

在mysql数据库中,连接查询是处理多表数据关联的核心手段。当数据分散在多个表中时,通过连接查询可以将这些表按照指定条件组合起来,获取所需信息。掌握多表连接的使用方法,对数据分析和系统开发都至关重要。
内连接(INNER JOIN)
内连接返回两个表中满足连接条件的匹配记录,不匹配的数据不会出现在结果中。
语法格式:
select 列名 FROM 表1 INNER JOIN 表2 ON 表1.列 = 表2.列;
例如,有用户表users和订单表orders,想查出每个用户的订单信息:
SELECT users.name, orders.order_no FROM users INNER JOIN orders ON users.id = orders.user_id;
只有存在对应订单的用户才会被列出。
左连接(LEFT JOIN)
左连接以左表为基础,返回左表所有记录,右表中没有匹配的部分用NULL填充。
适用于需要保留主表全部数据的场景,比如统计每个用户的订单数,包括没有下单的用户。
SELECT users.name, orders.order_no FROM users LEFT JOIN orders ON users.id = orders.user_id;
即使某个用户没有订单,名字依然会显示,订单字段为NULL。
右连接(RIGHT JOIN)
右连接与左连接相反,以右表为基础返回所有记录,左表无匹配时字段为空。
SELECT users.name, orders.order_no FROM users RIGHT JOIN orders ON users.id = orders.user_id;
适用于关注从表完整性的场景,如查看所有订单及其用户信息,即使用户已被删除。
多表连接与复合条件
实际应用中常涉及三个或更多表的连接。只需连续使用JOIN即可。
例如,增加商品表products,查询订单对应的用户和商品名称:
SELECT users.name, products.title, orders.order_no FROM orders INNER JOIN users ON orders.user_id = users.id INNER JOIN products ON orders.product_id = products.id;
也可在ON后添加多个条件,实现更精确的匹配:
… ON users.id = orders.user_id AND orders.status = ‘completed’
基本上就这些。合理使用各类JOIN,配合WHERE、GROUP BY等子句,就能灵活应对复杂的多表查询需求。关键是理解每种连接的逻辑差异,避免误删数据或遗漏记录。