内连接查询
查询的结果为两个表符合条件匹配到的数据。即两个表求交集。
以上两个表连接的条件是:
学生信息表.cls_id = 班级信息表.id
最终两个表连接效果:
语法格式
select 字段 from 表1 inner join 表2 on 表1.字段1 = 表2.字段2
注意
- 内连接:根据连接条件取出两个表“交集”
- on是连接条件,where是连接后筛选条件
- 多表连接时,通常先把“表与表如何关联”写在 ON,把“最终筛选条件”写在 WHERE(更不容易写错)
-- 查询 有能够对应班级的学生及班级信息
SELECT * FROM students INNER JOIN classes ON students.cls_id = classes.id;
-- 显示姓名,班级
SELECT students.name,classes.name FROM students INNER JOIN classes ON students.cls_id = classes.id;
-- 给数据表起别名
SELECT s.name as "姓名",c.name as "班级" FROM students as s INNER JOIN classes as c ON s.cls_id = c.id;
内连接与 WHERE 写法的等价关系(理解用)
内连接常被理解为:
SELECT *
FROM students s, classes c
WHERE s.cls_id = c.id;
但更推荐使用显式 INNER JOIN ... ON ...,尤其是当查询里还包含外连接时(语义更清晰,减少误用)。
性能直觉(写慢时先看这里)
- 连接条件列最好有索引:例如
students.cls_id、classes.id - 避免在连接列上做函数/表达式:会让索引失效或变差
- 连接后再过滤 vs 先过滤:能在 WHERE 中提前缩小数据量时,通常更快

