SQL怎么写啊,两个表里相同的值我想要第二张表对应的数据那种查询方法
- 问答
- 2026-01-13 21:50:09
- 2
您说的这个问题,其实就是想找两个表里都有的东西,然后把第二张表里对应的详细信息给拿出来,这在我们平时弄数据的时候,简直是太常遇到了,比如说,您有一个表是公司所有员工的名单(第一张表),另一个表是记录了本月发了奖金的员工名单和奖金数额(第二张表),您现在想干的事儿就是,找出那些既在总名单里,又出现在奖金名单里的员工,然后把他们对应的奖金数额给查出来,说白了,就是要找两个名单的交集部分,并且以第二张表的信息为主来展示。
最直接、最符合您这个想法的SQL写法,就是使用 INNER JOIN,翻译过来叫“内连接”,这个方法就像它的名字一样,只关心“内部”共同的部分,我来给您仔细拆解一下。
核心方法:使用 INNER JOIN
INNER JOIN 的工作方式特别形象,您可以把两个表想象成两个圆圈,INNER JOIN 就是取这两个圆圈重叠的那一部分阴影区域,只有两个表里都能匹配上的记录,才会被显示在最终的结果里。
它的基本写法结构是这样的:
SELECT 第二张表.想要的字段, 第一张表.想参考的字段 FROM 第一张表的名字 INNER JOIN 第二张表的名字 ON 第一张表.用来比对的字段 = 第二张表.用来比对的字段;
这里有几个关键点:
SELECT后面跟着的是您想最终看到哪些列的数据,您特别提到了想要“第二张表对应的数据”,所以这里应该主要写第二张表.字段名,您也可以从第一张表里选一些字段来辅助查看。FROM后面指定第一个表。INNER JOIN后面指定第二个表。ON这个条件是最最关键的,它就是用来告诉数据库,我们依据哪个字段来判断两个表的记录是“相同”的,两个表都有一个叫“员工ID”的字段,或者都有一个“商品编号”字段。
我给您举个非常具体的例子,您一听就明白了。
假设我们有两个表:
employees员工表(第一张表):里面有所有员工的基本信息。id(员工ID)name(员工姓名)
bonus奖金表(第二张表):里面记录了本月获得奖金的员工。employee_id(员工ID,和员工表里的id是一个意思)bonus_amount(奖金金额)
您的需求是:“找出拿了奖金的员工,并显示他们的姓名和奖金数额。” 注意,员工姓名在第一张表里,奖金数额在第二张表里。
用 INNER JOIN 来写就是这个样子:
SELECT employees.name, bonus.bonus_amount FROM employees INNER JOIN bonus ON employees.id = bonus.employee_id;
我们来一步步看这个查询做了什么:
FROM employees:从员工表开始。INNER JOIN bonus:去连接奖金表。ON employees.id = bonus.employee_id:连接的条件是,员工表的id字段的值要和奖金表的employee_id字段的值相等。SELECT employees.name, bonus.bonus_amount:对于所有能成功匹配上的记录,把员工的姓名和对应的奖金数额选出来。
这个查询的结果,就会是一个列表,里面只包含那些在奖金表里出现了的员工,以及他们的奖金,如果一个员工在总名单里,但奖金表里没有他(说明他没奖金),那么这个员工就不会出现在结果里,这正是您要的“两个表里相同的值”以及“想要第二张表对应的数据”。
另外一种思路:使用 WHERE 子句
达到同样效果还有一个老派的写法,用的是 WHERE 条件,这个写法可能看起来更直白一些,尤其是在刚学的时候。
还是上面那个例子,用 WHERE 来写是这样的:
SELECT employees.name, bonus.bonus_amount FROM employees, bonus WHERE employees.id = bonus.employee_id;
这个写法的意思是:从员工表和奖金表这两个表里选数据,但只选出那些员工表ID和奖金表员工ID相等的记录,它的结果和 INNER JOIN 是完全一样的。
现在更推荐使用 INNER JOIN 的写法,因为它表达连接关系的意图更清晰,尤其是当查询需要连接很多个表的时候,用 JOIN ... ON ... 的结构会更容易阅读和理解,不容易出错。
总结一下
您记住最关键的一点就行:当您需要“找两个表共同有的记录,并且要第二张表的信息”时,INNER JOIN 就是最趁手的工具,它的核心就在于那个 ON 后面的条件,这个条件就像一把钥匙,把两个表里相关联的记录给锁在一起了。
操作步骤也很固定:
- 确定哪个是第一张表(通常是主信息表),哪个是第二张表(包含您想要获取的附加信息的表)。
- 找出两个表里那个可以互相匹配的字段(比如共同的ID、共同的编号)。
- 写SQL语句:
FROM表1INNER JOIN表2ON表1.共同字段 = 表2.共同字段。 - 在
SELECT后面,放心地去选取第二张表里的字段就行了。
希望这个直接的解释能帮您彻底搞清楚这个问题,多试几次,很快就熟练了。

本文由符海莹于2026-01-13发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/80168.html
