【数据库】SQL面试基础15题,测试/开发必背速查

0 阅读3分钟

SQL 面试基础题占面试八成以上,很多候选人不是不会,是答不全、答不顺。这篇把板块 1 的 15 道基础必问整理成可背的速查,附执行顺序、易错点与答案框架,建议收藏。

一、SELECT 基本查询与执行顺序

语法:SELECT 列 FROM 表 WHERE 条件 ORDER BY 列 LIMIT N

执行顺序(高频考点,务必背):

FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT

二、WHERE 与 HAVING 的区别(必考)

WHERE:分组前过滤行,不能跟聚合函数。

HAVING:分组后过滤组,能跟聚合函数。

示例:

SELECT dept, COUNT(*) FROM emp 
WHERE salary > 5000 
GROUP BY dept HAVING COUNT(*) > 3;

三、JOIN 家族

连接类型保留行范围无匹配时结果MySQL 是否原生支持典型使用场景
INNER JOIN只保留两表匹配的行不保留无匹配行是取两表交集数据,如订单与客户匹配
LEFT JOIN保留左表全部行,右表只取匹配行右表列填 NULL是以左表为主,查右表补充信息,如员工及其部门
RIGHT JOIN保留右表全部行,左表只取匹配行左表列填 NULL是以右表为主,查左表补充信息
FULL JOIN保留两表全部行无匹配一侧填 NULL否(用 UNION 模拟)合并两表全量数据,找出两侧不匹配的记录

下面通过一个完整的实战示例,直观对比四种连接的区别。先准备两张表:员工表 emp 和部门表 dept。

-- 建表语句
CREATE TABLE dept (
    dept_id INT PRIMARY KEY,
    dept_name VARCHAR(50)
);

CREATE TABLE emp (
    emp_id INT PRIMARY KEY,
    emp_name VARCHAR(50),
    dept_id INT
);

-- 示例数据
INSERT INTO dept VALUES (1, '研发部'), (2, '市场部'), (3, '财务部');
INSERT INTO emp VALUES (101, '张三', 1), (102, '李四', 1), (103, '王五', 2), (104, '赵六', NULL);

1. INNER JOIN 内连接:只返回两表匹配的行,赵六(无部门)和财务部(无员工)都不会出现。

SELECT e.emp_name, d.dept_name
FROM emp e
INNER JOIN dept d ON e.dept_id = d.dept_id;
-- 结果:张三-研发部、李四-研发部、王五-市场部

2. LEFT JOIN 左连接:保留左表 emp 全部行,赵六没有匹配部门,dept_name 显示为 NULL。

SELECT e.emp_name, d.dept_name
FROM emp e
LEFT JOIN dept d ON e.dept_id = d.dept_id;
-- 结果:张三-研发部、李四-研发部、王五-市场部、赵六-NULL

3. RIGHT JOIN 右连接:保留右表 dept 全部行,财务部没有匹配员工,emp_name 显示为 NULL。

SELECT e.emp_name, d.dept_name
FROM emp e
RIGHT JOIN dept d ON e.dept_id = d.dept_id;
-- 结果:张三-研发部、李四-研发部、王五-市场部、NULL-财务部

4. FULL JOIN 全连接:MySQL 不原生支持,用 LEFT JOIN 和 RIGHT JOIN 的 UNION 模拟,保留两表全部行,无匹配一侧为 NULL。

SELECT e.emp_name, d.dept_name
FROM emp e
LEFT JOIN dept d ON e.dept_id = d.dept_id
UNION
SELECT e.emp_name, d.dept_name
FROM emp e
RIGHT JOIN dept d ON e.dept_id = d.dept_id;
-- 结果:张三-研发部、李四-研发部、王五-市场部、赵六-NULL、NULL-财务部

四、GROUP BY / ORDER BY / LIMIT 分页

GROUP BY 分组统计;ORDER BY 排序(DESC 降序);LIMIT 分页:LIMIT 10 OFFSET 20 取第 21-30 条。

五、聚合函数与条件过滤

COUNT、SUM、AVG、MAX、MIN;LIKE 模糊(张%、%三%、王_);IN / BETWEEN / IS NULL 范围与空值。

六、自连接:员工找领导

SELECT e.name, m.name AS leader FROM emp e LEFT JOIN emp m ON e.leader_id = m.id;

七、板块1 易错点总结

1、执行顺序记反(最常见翻车点)。

2、WHERE 误用聚合函数。

3、LEFT JOIN 后误加 WHERE 右表条件导致变内连接。

4、HAVING 与 WHERE 混淆。

5、NULL 判断用 IS NULL 而非 = NULL。

板块1是地基,板块2(窗口函数/索引/事务)与板块3(真实场景题)后续更新,关注不迷路。