SQL新手求助:设计查询语句提取员工部门相关数据
嘿,作为SQL新手不用慌,先帮你理清楚你的EMPLOYEES表结构,然后给你几种常用的员工部门相关数据查询语句,按需选用就行~
首先,你的EMPLOYEES表结构整理后是这样的:
CREATE TABLE EMPLOYEES ( EMPLOYEE_ID NUMERIC(6,0), FIRST_NAME VARCHAR(20), LAST_NAME VARCHAR(25) CONSTRAINT "EMP_LAST_NAME_NN" NOT NULL, EMAIL VARCHAR(25) CONSTRAINT "EMP_EMAIL_NN" NOT NULL, PHONE_NUMBER VARCHAR(20), HIRE_DATE DATE CONSTRAINT "EMP_HIRE_DATE_NN" NOT NULL, JOB_ID VARCHAR(10) CONSTRAINT "EMP_JOB_NN" NOT NULL, SALARY NUMERIC(8,2), COMMISSION_PCT NUMERIC(2,2), MANAGER_ID NUMERIC(6,0), DEPARTMENT_ID NUMERIC(4,0) );
常用员工部门数据查询场景
1. 查询所有员工的基础信息+所属部门ID
这是最基础的查询,明确指定需要的字段比用SELECT *更清晰,性能也更好:
SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, HIRE_DATE, DEPARTMENT_ID FROM EMPLOYEES;
2. 查询某个特定部门下的所有员工
如果需要聚焦某个部门,比如部门ID为10的员工,用WHERE子句过滤即可,还可以拼接员工全名让结果更易读:
SELECT EMPLOYEE_ID, FIRST_NAME || ' ' || LAST_NAME AS FULL_NAME, -- 拼接姓和名为全名 JOB_ID, SALARY, DEPARTMENT_ID FROM EMPLOYEES WHERE DEPARTMENT_ID = 10; -- 把10换成你要查询的目标部门ID
3. 查询员工及其直属经理的关联信息
你的表中有MANAGER_ID字段,可以通过自连接来关联员工和他们的经理,用LEFT JOIN能确保那些没有直属经理的员工也会被显示出来:
SELECT e.EMPLOYEE_ID AS EMPLOYEE_ID, e.FIRST_NAME || ' ' || e.LAST_NAME AS EMPLOYEE_NAME, m.EMPLOYEE_ID AS MANAGER_ID, m.FIRST_NAME || ' ' || m.LAST_NAME AS MANAGER_NAME, e.DEPARTMENT_ID FROM EMPLOYEES e LEFT JOIN EMPLOYEES m ON e.MANAGER_ID = m.EMPLOYEE_ID;
4. 按部门分组统计员工数量和平均薪资
如果需要做部门层面的汇总分析,用GROUP BY配合聚合函数就能实现,比如统计每个部门的员工数和平均薪资:
SELECT DEPARTMENT_ID, COUNT(EMPLOYEE_ID) AS EMPLOYEE_COUNT, -- 统计部门内员工总数 ROUND(AVG(SALARY), 2) AS AVG_SALARY -- 计算部门平均薪资,保留2位小数 FROM EMPLOYEES WHERE DEPARTMENT_ID IS NOT NULL -- 排除没有分配部门的员工 GROUP BY DEPARTMENT_ID ORDER BY EMPLOYEE_COUNT DESC; -- 按员工数量从多到少排序
新手小贴士
- 用
AS给字段取别名,能让查询结果更易读,比如上面的FULL_NAME、EMPLOYEE_COUNT - 如果遇到
DEPARTMENT_ID为NULL的情况(即员工未分配部门),可以用COALESCE函数把NULL替换成友好的文本,比如COALESCE(CAST(DEPARTMENT_ID AS VARCHAR), '未分配部门') AS DEPARTMENT_INFO - 写SQL的时候尽量格式化(比如换行、缩进),自己和别人读起来都更方便
内容的提问来源于stack exchange,提问作者J.M
相关产品推荐
相关产品推荐

