SQL面试题更新 2026-08-03

请写出一条 SQL 语句,找出在 2024 年 7 月内曾经访问过网站的用户,并返回这些用户的用户名,且结果中不能出现重复的用户名。

考察说明

考查候选人对 SQL 基本查询、去重以及日期范围过滤的掌握能力。

回答思路

  1. 【回答框架 1】首先确定需要访问的表,通常涉及用户表(含用户名)和访问记录表(含访问时间和用户标识)。如果两表分离,需要通过用户标识进行关联,例如使用内连接获取访问用户的用户名。
  2. 【回答框架 2】过滤条件为访问时间在 2024 年 7 月内,即访问日期大于等于 2024-07-01 且小于 2024-08-01。在 SQL 中可使用 BETWEEN 或比较运算符,注意正确处理日期边界,避免遗漏或包含错误日期。
  3. 【回答框架 3】去重可以使用 DISTINCT 关键字作用于用户名,或者使用 GROUP BY 用户名。若用户表与访问表关联后可能产生多条记录,必须去重以保证每个用户名只出现一次。
  4. 【回答框架 4】可给出完整 SQL 示例,例如:SELECT DISTINCT u.username FROM users u JOIN visits v ON u.id = v.user_id WHERE v.visit_date >= '2024-07-01' AND v.visit_date < '2024-08-01'; 并简要说明各个部分的作用。
  5. 【回答框架 5】最后可提及索引优化建议,如在访问表的访问日期和用户标识上建立索引,以提高查询效率。
  6. 【关键点 1】使用 DISTINCT 或 GROUP BY 实现用户名去重
  7. 【关键点 2】日期范围过滤正确写法为 >= '2024-07-01' 且 < '2024-08-01'
  8. 【关键点 3】若用户表和访问表分离,需通过用户标识进行连接
  9. 【易错点 1】避免使用 BETWEEN 时包含 '2024-08-01',导致误包含 8 月数据
  10. 【易错点 2】若不在访问日期上建立索引,全表扫描可能造成性能问题