当前位置: 首页 > news >正文

SQL 大厂面试题目(由浅入深)

今天给大家带来一份大厂SQL面试覆盖:基础语法 → 复杂查询 → 性能优化 → 架构设计,大家需深入理解执行原理并熟悉实际业务场景的解决方案。



1. 基础查询与过滤

题目:查询 employees 表中所有薪资(salary)大于 10000 且部门编号(dept_id)为 5 的员工姓名(name)和入职日期(hire_date)。

SELECT name, hire_date 
FROM employees 
WHERE salary > 10000 AND dept_id = 5;


2. 聚合函数与分组

题目:统计每个部门(dept_id)的平均薪资,并仅显示平均薪资高于 15000 的部门。

SELECT dept_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY dept_id
HAVING AVG(salary) > 15000;


3. 多表连接(JOIN)

题目:查询员工姓名(name)及其所属部门名称(dept_name),表结构为 employees(id, name, dept_id)和 departments(id, dept_name)。

SELECT e.name, d.dept_name
FROM employees e
JOIN departments d ON e.dept_id = d.id;


4. 子查询与 EXISTS

题目:查询没有订单的客户(customers 表的 id 不在 orders 表的 customer_id 中)。

SELECT c.id, c.name
FROM customers c
WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id
);


5. 窗口函数

题目:查询每个部门薪资排名前 3 的员工姓名和薪资。

WITH ranked_employees AS (SELECT name, salary, dept_id,RANK() OVER (PARTITION BY dept_id ORDER BY salary DESC) AS rankFROM employees
)
SELECT name, salary, dept_id
FROM ranked_employees
WHERE rank <= 3;


6. 递归查询(CTE)

题目:查询树形结构表 categories(id, name, parent_id)中 ID=5 的所有子节点。


WITH RECURSIVE sub_categories AS (SELECT id, name, parent_idFROM categoriesWHERE id = 5UNION ALLSELECT c.id, c.name, c.parent_idFROM categories cJOIN sub_categories sc ON c.parent_id = sc.id
)
SELECT * FROM sub_categories;


7. 索引优化

题目:在 orders 表中,如何为 customer_id 和 order_date 设计联合索引以优化查询 WHERE customer_id = 100 AND order_date > '2024-02-10'?
答案:

CREATE INDEX idx_customer_order_date ON orders (customer_id, order_date);


原理:联合索引按最左前缀匹配原则,优先按 customer_id 过滤,再按 order_date 范围查询。


8. 事务与隔离级别

题目:解释“不可重复读”(Non-Repeatable Read)和“幻读”(Phantom Read)的区别。
答案:

        不可重复读:同一事务中两次读取同一行数据,结果不同(由其他事务的 UPDATE 或 DELETE 导致)。

        幻读:同一事务中两次查询同一范围的数据,结果行数不同(由其他事务的 INSERT 导致)。


9. 执行计划分析

题目:以下查询的执行计划中出现了 Full Table Scan,如何优化?
SELECT * FROM products WHERE category = 'Electronics' AND price > 1000;
答案:
添加联合索引 (category, price):

CREATE INDEX idx_category_price ON products (category, price);


10. 复杂场景设计

题目:设计一个数据库表结构,支持用户每日签到(可重复签到但仅第一次有效),并统计某用户最近 30 天的签到次数。
答案:

CREATE TABLE user_checkins (user_id INT,checkin_date DATE,PRIMARY KEY (user_id, checkin_date) -- 唯一约束避免重复
);-- 统计最近30天签到次数
SELECT COUNT(*) 
FROM user_checkins 
WHERE user_id = 100 
AND checkin_date >= CURRENT_DATE - INTERVAL '30 days';


11. 死锁分析与解决

题目:两个事务分别执行以下操作,如何发生死锁?

事务1:UPDATE accounts SET balance = balance - 100 WHERE id = 1; UPDATE accounts SET balance = balance + 100 WHERE id = 2;

事务2:UPDATE accounts SET balance = balance - 200 WHERE id = 2; UPDATE accounts SET balance = balance + 200 WHERE id = 1;
答案:

        事务1锁定id=1后等待id=2,事务2锁定id=2后等待id=1,形成循环等待。
        解决方案:按固定顺序更新(如先更新id小的账户)。


12. 时间窗口统计

题目:统计每小时内订单量最多的前3个小时(表 orders 含字段 order_time)。

WITH hourly_orders AS (SELECT EXTRACT(HOUR FROM order_time) AS hour,COUNT(*) AS order_countFROM ordersGROUP BY EXTRACT(HOUR FROM order_time)
)
SELECT hour, order_count
FROM hourly_orders
ORDER BY order_count DESC
LIMIT 3;


13. 数据去重

题目:删除 logs 表中重复记录(保留id最小的一条)。

DELETE FROM logs
WHERE id NOT IN (SELECT MIN(id)FROM logsGROUP BY user_id, log_time, content
);


14. 分页查询优化

题目:优化大表的分页查询 SELECT * FROM users ORDER BY id LIMIT 1000000, 10;。
答案:
使用覆盖索引 + 游标分页:

SELECT * FROM users 
WHERE id > 1000000 
ORDER BY id 
LIMIT 10;


15. 分区表设计

题目:如何按时间范围对 sales 表进行分区以优化查询性能?
答案:

-- 按月分区(以 PostgreSQL 为例)
CREATE TABLE sales (sale_id SERIAL,sale_date DATE,amount NUMERIC
) PARTITION BY RANGE (sale_date);CREATE TABLE sales_2023_01 PARTITION OF salesFOR VALUES FROM ('2024-01-10') TO ('2024-02-10');


16. JSON 数据处理

题目:从 products 表的 attributes(JSON 字段)中提取颜色(color)和尺寸(size)。

-- 以 MySQL 为例
SELECT attributes->>'$.color' AS color,attributes->>'$.size' AS size
FROM products;


17. 高级窗口函数

题目:计算每个员工薪资与所在部门平均薪资的差值。

SELECT name,salary,salary - AVG(salary) OVER (PARTITION BY dept_id) AS diff_from_avg
FROM employees;


18. 动态SQL与存储过程

题目:编写存储过程,根据输入的城市名动态查询 customers 表。

-- 以 PostgreSQL 为例
CREATE OR REPLACE PROCEDURE get_customers_by_city(city_name TEXT)
LANGUAGE plpgsql
AS $$
BEGINEXECUTE 'SELECT * FROM customers WHERE city = $1' USING city_name;
END;
$$;


19. 分布式ID生成方案

题目:在分布式系统中,如何设计全局唯一的订单ID?
答案:

        雪花算法(Snowflake):时间戳 + 机器ID + 序列号。

        UUID:随机生成,但存储效率低。

        数据库分段分配:中央数据库分配ID范围给各节点。


20. 数据一致性保障

题目:如何实现“扣减库存时防止超卖”?
答案:

-- 事务内原子操作(以 MySQL 为例)
START TRANSACTION;
SELECT stock FROM products WHERE id = 100 FOR UPDATE;
UPDATE products SET stock = stock - 1 WHERE id = 100 AND stock > 0;
COMMIT;

相关文章:

SQL 大厂面试题目(由浅入深)

今天给大家带来一份大厂SQL面试覆盖&#xff1a;基础语法 → 复杂查询 → 性能优化 → 架构设计&#xff0c;大家需深入理解执行原理并熟悉实际业务场景的解决方案。 1. 基础查询与过滤 题目&#xff1a;查询 employees 表中所有薪资&#xff08;salary&#xff09;大于 10000…...

Shader Step和frac函数

Step又称为阶跃函数&#xff0c;在着色器&#xff08;Shader&#xff09;编程中&#xff0c;step 函数是一个非常有用的函数&#xff0c;尤其是在GLSL&#xff08;OpenGL Shading Language&#xff09;和其他类似的着色器语言中。它用于生成基于阈值的阶跃函数输出。step 函数的…...

FreeRtos实时系统: 十二.FreeRTOS的队列集

FreeRtos实时系统: 十二.FreeRTOS的队列集 一.队列集简介二.队列集相关API函数三.队列集操作实验 一.队列集简介 左边的接收任务会在没接收到队列时会阻塞&#xff0c;如果前面释放信号量这时该任务也获取不到信号量。 右边使用队列集如果获取到&#xff0c;判断句柄是谁&#…...

NLP Word Embeddings

Word representation One-hot形式 在上一周介绍RNN类模型时&#xff0c;使用了One-hot向量来表示单词的方式。它的缺点是将每个单词视为独立的&#xff0c;算法很难学习到单词之间的关系。 比如下面的例子&#xff0c;即使语言模型已经知道orange juice是常用组合词&#xf…...

如何在24GB的GPU上运行DeepSeek-R1-Distill-Qwen-32B

如何在24GB的GPU上运行DeepSeek-R1-Distill-Qwen-32B 一、背景二、解决方案三、操作步骤1.下载模型2.安装依赖3.量化4.生成推理代码5.运行A.缓存上限为128条B.不限制缓存上限C.输出内容 一、背景 随着深度学习的不断发展&#xff0c;大型语言模型&#xff08;LLM&#xff0c;L…...

2025年二级建造师报名流程图解

2025年二级建造师报名时间&#xff01;附报名流程&#xff01; ⏰️已公布25年二建考试时间的省份如下&#xff1a; ️4月19日、20日考试的城市有&#xff1a;贵州 ️5月10日、11日考试的城市有&#xff1a;湖北、陕西、宁夏、甘肃、福建、浙江、江西、黑龙江、河南、湖南、…...

深入浅出:Python 中的异步编程与协程

引言 大家好&#xff0c;今天我们来聊聊 异步编程 和 协程&#xff0c;这是近年来编程语言领域中的热点话题之一&#xff0c;尤其在 Python 中&#xff0c;它作为一种全新的编程模型&#xff0c;已经成为处理 IO密集型 任务的强力工具。尽管很多人对异步编程望而却步&#xff0…...

八大排序——简单选择排序

目录 1.1基本操作&#xff1a; 1.2动态图&#xff1a; 1.3代码&#xff1a; 代码解释 1. main 方法 2. selectSort 方法 示例运行过程 初始数组 每轮排序后的数组 最终排序结果 代码总结 1.1基本操作&#xff1a; 选择排序&#xff08;select sorting&#xff09;也…...

vue使用CSS布局技术,实现div定位到页面底部或顶部并居中功能

<template> <div > <div class"bottom-element"> 我在底部&#xff0c;并居中了 </div> </div> </template> 使用CSS布局技术&#xff0c;通过设置CSS属性来实现页面底部定位。 <style lang"scs…...

Jenkins 部署 之 Mac 一

Jenkins 部署 之 Mac 一 一.Jenkins 部署依赖 JDK 环境 查看 Mac JDK 环境&#xff0c;如果没有安装&#xff0c;先安装 打开终端输入命令:java -version Mac安装配置 JDK 二. 检查 HomeBrew 安装 检查 HomeBrew 是否安装&#xff0c;终端输入命令:brew -v Mac安装HomeB…...

【FastAPI 使用FastAPI和uvicorn来同时运行HTTP和HTTPS的Python应用程序】

在本文中&#xff0c;我们将介绍如何使用 FastAPI和uvicorn来同时运行HTTP和HTTPS的 Python应用程序。 简介 FastAPI是一个高性能的Web框架&#xff0c;可以用于构建快速、可靠的API。它基于Python的类型提示和异步支持&#xff0c;使得开发者可以轻松地编写出安全且高效的代…...

HCIA-路由器相关知识和面试问题

二、 路由器 2.1 关于路由器的知识 2.1.1 什么是路由器 路由器是一种网络层互联设备&#xff0c;主要用于连接多个逻辑上分开的网络&#xff0c;实现不同网络之间的数据路由和通信。它能根据网络层地址&#xff08;如 IP 地址&#xff09;来转发数据包&#xff0c;在网络中起…...

Docker+Jenkins自动化部署SpringBoot项目【详解git,jdk,maven,ssh配置等各种配置,附有示例+代码】

文章目录 DockerJenkins部署SpringBoot项目一.准备工作1.1安装jdk111.2安装Maven 二.Docker安装Jenkins2.1安装Docker2.2 安装Jenkins2.3进入jenkins 三.Jenkins设置3.1安装jenkins插件3.2全局工具配置全局配置jdk全局配置maven全局配置git 3.3 系统配置安装 Publish Over SSH …...

PCL 点云数学形态学操作(腐蚀)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 基本原理:使用结构元素(通常为滤波的窗口)的窗口模板作为处理单元,利用形态学中的膨胀与腐蚀相组合即可达到滤波的效果。 点云数据中的数学形态学运算其实和二维图像上的运算非常相似,图像上像素有x,y和亮度值…...

【设计模式】【行为型模式】观察者模式(Observer)

&#x1f44b;hi&#xff0c;我不是一名外包公司的员工&#xff0c;也不会偷吃茶水间的零食&#xff0c;我的梦想是能写高端CRUD &#x1f525; 2025本人正在沉淀中… 博客更新速度 &#x1f44d; 欢迎点赞、收藏、关注&#xff0c;跟上我的更新节奏 &#x1f3b5; 当你的天空突…...

RAGFlow和Dify对比

‌ RAGFlow和Dify都是基于大语言模型&#xff08;LLM&#xff09;的应用开发平台&#xff0c;具有相似的功能和应用场景&#xff0c;但它们在技术架构、部署要求和用户体验上存在一些差异。‌‌ RAGFlow和Dify对比 2025-02-13 22.08 RAGFlow‌ ‌技术栈‌&#xff1a;RAGFlow…...

AI前端开发:蓬勃发展的机遇与挑战

人工智能&#xff08;AI&#xff09;领域的飞速发展&#xff0c;正深刻地改变着我们的生活方式&#xff0c;也为技术人才&#xff0c;特别是AI代码生成领域的专业人士&#xff0c;带来了前所未有的机遇。而作为AI应用与用户之间桥梁的前端开发&#xff0c;其重要性更是日益凸显…...

结构型模式---代理模式

概念 代理模式是一种结构型模式&#xff0c;主要用于在客户端和接口之间添加一个中间层&#xff0c;用于在客户端和接口之间进行权限控制或者其他的中间层操作。 使用场景 1、延缓初始化&#xff0c;当我们偶尔需要使用一个重量级的服务对象&#xff0c;如果一直保持该对象的…...

Java面向对象一:相关概念

面向过程&面向对象 面向过程思想 步骤清晰简单&#xff0c;第一步做什么&#xff0c;第二步做什么… 面对过程适合处理一些较为简单的问题面向对象思想 物以类聚&#xff0c;分类的思维模式&#xff0c;思考问题首先会解决问题需要哪些分类&#xff0c;然后对这些分类进行…...

CEF132 编译指南 MacOS 篇 - depot_tools 安装与配置 (四)

1. 引言 在 CEF132&#xff08;Chromium Embedded Framework&#xff09;的编译过程中&#xff0c;depot_tools 扮演着举足轻重的角色。这套由 Chromium 项目精心打造的脚本和工具集&#xff0c;专门用于获取、管理和更新 Chromium 及其相关项目&#xff08;包括 CEF&#xff…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...

客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践

01技术背景与业务挑战 某短视频点播企业深耕国内用户市场&#xff0c;但其后台应用系统部署于东南亚印尼 IDC 机房。 随着业务规模扩大&#xff0c;传统架构已较难满足当前企业发展的需求&#xff0c;企业面临着三重挑战&#xff1a; ① 业务&#xff1a;国内用户访问海外服…...