【SQL 专栏】1. 零基础入门!4 个语法搞定薪资报表查询
今日核心学习知识点:SELECT、WHERE、DISTINCT、ORDER BY
一、业务背景
公司共500名员工,HR每月发薪前导出薪资数据给财务核对,数据存储在employees单表。
今日所有习题,全部围绕4个核心语法展开练习,无其他额外知识点干扰。
二、数据表结构
CREATETABLEemployees(idINTPRIMARYKEYAUTO_INCREMENT,nameVARCHAR(64)NOTNULL,dept_idINTNOTNULL,salaryDECIMAL(12,2)NOTNULL,hire_dateDATENOTNULL,INDEXidx_dept(dept_id),INDEXidx_salary(salary));三、四大知识点详细讲解
知识点1:SELECT
作用:自定义查询需要展示的字段,是SQL查询的起始语法。
固定格式:SELECT 字段1,字段2 FROM 表名
规范:业务查询不使用SELECT *,只查询业务所需字段,节省性能。
知识点2:WHERE
作用:条件过滤,提前筛选符合要求的数据行,缩小查询范围。
常用运算符:>、<、=、>=、<=,执行顺序早于去重、排序。
知识点3:DISTINCT
作用:对查询返回结果做去重,消除重复数据。
使用规则:必须紧跟在SELECT关键字后方,多用于查询不重复部门、分类编号场景。
知识点4:ORDER BY
作用:对最终结果集进行排序,分两种规则:
ASC:升序,从小到大,默认可省略;
DESC:降序,从大到小,薪资排名高频使用。
执行顺序最晚,过滤、去重完成后才执行排序。
做题通用固定流程
FROM 数据表 → WHERE 条件筛选 → SELECT 提取字段 → DISTINCT 结果去重 → ORDER BY 排序
四、语法演示案例
案例1 组合知识点:SELECT + ORDER BY
业务需求:导出全部员工姓名、薪资,薪资由高至低展示
SELECTname,salaryFROMemployeesORDERBYsalaryDESC;案例2 组合知识点:SELECT + WHERE + DISTINCT
业务需求:筛选薪资8000以上员工,获取不重复的部门编号
SELECTDISTINCTdept_idFROMemployeesWHEREsalary>8000;五、刷题实战
Q001 阿里真题
题目:查询所有员工的姓名和薪资,按薪资降序排列。
涉及核心知识点:SELECT、ORDER BY
个人作答:
selectname,salaryfromemployeesorderbysalarydesc解题拆解:
- SELECT 定义输出字段name、salary;
- ORDER BY salary DESC 完成薪资降序排名。
Q002 腾讯真题
题目:查询薪资超过 8000 元的员工所在部门ID(去重)。
涉及核心知识点:SELECT、WHERE、DISTINCT
个人作答:
selectdistinctdept_idfromemployeeswheresalary>8000解题拆解:
- WHERE salary > 8000 过滤高薪员工;
- DISTINCT 去除重复部门ID。
Q003 美团真题
题目:输出员工姓名与薪资,按薪资从高到低排序(HR 发薪核对用)。
涉及核心知识点:SELECT、ORDER BY
个人作答:
selectname,salaryfromemployeesorderbysalarydesc解题拆解:
- SELECT 提取报表所需姓名字段、薪资字段;
- ORDER BY DESC 生成有序薪资表,供财务核对。
Q004 京东真题
题目:找出薪资大于 8000 的所有部门编号,同一部门只保留一条。
涉及核心知识点:SELECT、WHERE、DISTINCT
个人作答:
selectdistinctdept_idfromemployeeswheresalary>8000解题拆解:
- WHERE 筛选薪资达标人员数据;
- DISTINCT 实现部门编号唯一展示。
六、今日学习总结
1、两大题型分类(对应两套知识点组合)
1)薪资排序题型:SELECT + ORDER BY
特征:需求包含排名、按薪资高低排序、导出有序表格
2)筛选去重题型:SELECT + WHERE + DISTINCT
特征:需求包含数值筛选、去重、唯一部门编号统计
2、知识点速记
- SELECT:控制展示哪些列;
- WHERE:前置过滤数据;
- DISTINCT:消除重复行;
- ORDER BY:末尾排序,DESC实现从高到低。
3、落地价值
今日4个语法覆盖HR每月薪资导出全部基础需求,是后续复杂SQL学习的底层基础。