【MySQL 学习笔记 _ Day13】多表连接进阶 + 企业实战5题(IN_BETWEEN_LIKE_日期_比较)

【MySQL 学习笔记 | Day13】多表连接进阶 + 企业实战5题(IN/BETWEEN/LIKE/日期/比较)

大家好,我是白鹿为溪~ 今天是MySQL初级SQL学习的第13天,承接Day12的多表连接基础,今天重点讲解多表连接的进阶场景,同时配套5道难度略高于基础的企业SQL题,精准覆盖IN、BETWEEN、LIKE、日期函数、比较运算符,贴合初级开发高频需求,帮大家巩固多表连接的同时,熟练运用各类常用运算符,内容无冗余、纯初级知识点,可直接复制到博客园发布。

一、前言

Day12我们掌握了INNER JOIN、LEFT JOIN、RIGHT JOIN的基础用法,今天重点讲解多表连接的进阶场景(多表连接+条件过滤、多表连接+简单统计),同时配套5道难度略高于基础的企业SQL题,精准覆盖IN、BETWEEN、LIKE、日期函数、比较运算符,贴合初级开发高频需求,帮大家巩固多表连接的同时,熟练运用各类常用运算符。

二、核心知识点:多表连接进阶(初级必掌握)

1. 多表连接+条件过滤(企业高频)

核心逻辑:先通过JOIN关联多张表,再用WHERE过滤原始数据,最后按需排序/统计,区别于HAVING(过滤聚合结果),这里的条件过滤针对的是关联后的每一行原始数据。

实战案例:查询部门地址为「上海」且薪资大于6000的员工信息,显示员工姓名、薪资、部门名称、部门地址,按薪资降序排列。

SELECT
    e.emp_name,
    e.salary,
    d.dept_name,
    d.dept_address
FROM emp e
INNER JOIN dept d ON e.dept_id = d.dept_id
WHERE d.dept_address = '上海' -- 部门地址条件(比较运算符)
  AND e.salary > 6000 -- 薪资条件(比较运算符)
ORDER BY e.salary DESC;

2. 多表连接+简单统计

核心逻辑:多表连接后,结合COUNT、SUM等基础聚合函数,实现简单的分组统计,无需复杂的高级聚合,贴合初级开发场景。

实战案例:统计每个部门、不同性别的员工人数,显示部门名称、性别、员工人数,按部门名称升序排列。

SELECT
    d.dept_name,
    e.gender,
    COUNT(e.emp_id) AS emp_count
FROM emp e
LEFT JOIN dept d ON e.dept_id = d.dept_id
GROUP BY d.dept_name, e.gender
ORDER BY d.dept_name ASC;

3. 常用运算符回顾(铺垫练习题)

结合今日练习题,快速回顾5类核心运算符,重点掌握初级场景的用法:

  • 比较运算符:>、<、=、>=、<=、!=(用于薪资、年龄等数值比较)

  • IN:判断字段值是否在指定集合中(如dept_id IN (1,2,3))

  • BETWEEN ... AND ...:判断字段值是否在指定区间内(含首尾值)

  • LIKE:模糊查询,搭配%(任意字符)、_(单个字符)使用

  • 日期函数:CURDATE()、DATE_SUB()等,用于日期相关条件过滤

三、今日企业实战5题(难度略高于基础,覆盖指定运算符)

基于emp(员工表)、dept(部门表)设计,所有题目均为企业初级开发高频场景,附详细参考答案和知识点解析,可直接复制执行练习。

第1题:比较运算符+多表连接

#### 题目

查询薪资在6000-8000之间(不含6000,含8000)、入职日期在2024年之后的员工信息,显示员工姓名、薪资、入职日期、部门名称,要求部门名称不含“行政”二字,按入职日期降序排列。

#### 参考答案

SELECT
    e.emp_name,
    e.salary,
    e.entry_date,
    d.dept_name
FROM emp e
INNER JOIN dept d ON e.dept_id = d.dept_id
WHERE e.salary > 6000 -- 比较运算符
  AND e.salary <= 8000 -- 比较运算符
  AND e.entry_date > '2024-12-31'
  AND d.dept_name NOT LIKE '%行政%' -- LIKE模糊查询(取反)
ORDER BY e.entry_date DESC;

#### 知识点

比较运算符(&gt;、&lt;=)的组合使用,LIKE模糊查询(NOT LIKE取反),日期条件过滤。

第2题:IN运算符+条件过滤

#### 题目

查询部门ID为1、3、5的员工信息,显示员工姓名、性别、薪资、部门名称,要求性别为女,且薪资不等于7000,按薪资升序排列。

SELECT
    e.emp_name,
    e.gender,
    e.salary,
    d.dept_name
FROM emp e
INNER JOIN dept d ON e.dept_id = d.dept_id
WHERE e.dept_id IN (1,3,5) -- IN运算符,指定部门ID集合
  AND e.gender = '女'
  AND e.salary != 7000 -- 比较运算符(不等于)
ORDER BY e.salary ASC;

#### 知识点

IN运算符的使用(指定离散值集合),比较运算符(!=),多表连接的条件筛选。

第3题:BETWEEN...AND...+日期函数

#### 题目

查询入职时间在2023年1月1日至2024年12月31日之间的员工,显示员工姓名、入职日期、薪资、部门地址,要求薪资在5000-7500之间(含首尾),按入职日期升序排列。

SELECT
    e.emp_name,
    e.entry_date,
    e.salary,
    d.dept_address
FROM emp e
INNER JOIN dept d ON e.dept_id = d.dept_id
WHERE e.entry_date BETWEEN '2023-01-01' AND '2024-12-31' -- 日期区间
  AND e.salary BETWEEN 5000 AND 7500 -- 薪资区间(BETWEEN)
ORDER BY e.entry_date ASC;

#### 知识点

BETWEEN...AND...运算符(日期、数值区间均适用),多表连接关联部门地址。

第4题:LIKE模糊查询+多表统计

#### 题目

统计部门名称包含“技术”或“研发”的部门,每个部门的员工人数和平均薪资,显示部门名称、员工人数、平均薪资(保留2位小数),要求平均薪资大于6500,按平均薪资降序排列。

SELECT
    d.dept_name,
    COUNT(e.emp_id) AS emp_count,
    ROUND(AVG(e.salary), 2) AS avg_salary
FROM emp e
INNER JOIN dept d ON e.dept_id = d.dept_id
WHERE d.dept_name LIKE '%技术%' OR d.dept_name LIKE '%研发%' -- LIKE模糊查询(多条件)
GROUP BY d.dept_name
HAVING AVG(e.salary) > 6500 -- 比较运算符,过滤聚合结果
ORDER BY avg_salary DESC;

#### 知识点

LIKE模糊查询(多条件搭配OR),聚合函数(COUNT、AVG),ROUND函数保留小数,HAVING过滤聚合结果。

第5题:日期函数+比较运算符+IN

#### 题目

查询入职时间超过1年(按当前日期2026-04-16计算)、部门ID不在2、4的员工信息,显示员工姓名、入职日期、工龄(保留1位小数)、薪资,要求薪资&gt;6000,按工龄降序排列。

SELECT
    e.emp_name,
    e.entry_date,
    ROUND(TIMESTAMPDIFF(YEAR, e.entry_date, CURDATE()), 1) AS work_years, -- 日期函数计算工龄
    e.salary
FROM emp e
WHERE e.entry_date < DATE_SUB(CURDATE(), INTERVAL 1 YEAR) -- 日期函数+比较运算符
  AND e.dept_id NOT IN (2,4) -- IN运算符(取反)
  AND e.salary > 6000 -- 比较运算符
ORDER BY work_years DESC;

#### 知识点

日期函数(TIMESTAMPDIFF、CURDATE、DATE_SUB)的使用,IN运算符(NOT IN取反),比较运算符,ROUND函数保留小数。

四、今日学习总结

1. 掌握了多表连接进阶用法(多表连接+条件过滤、多表连接+简单统计),贴合企业初级开发场景;

2. 熟练运用比较运算符、IN、BETWEEN、LIKE、日期函数,能应对难度略高于基础的企业SQL查询;

3. 理解了各类运算符的适用场景,能根据业务需求灵活组合使用,提升SQL查询的实用性。

五、明日预告

后续将继续更新MySQL初级SQL相关内容,聚焦初级高频知识点,配套企业实战题,稳步夯实基础,为后续SpringBoot学习做好铺垫。

(注:文档部分内容可能由 AI 生成)

posted @ 2026-04-16 23:41  白鹿为溪  阅读(32)  评论(0)    收藏  举报