-- 13. 查询 拥有员工的 部门ID、部门名称 (没有员工的部门无需展示)
时间: 2024-03-21 11:43:30 浏览: 84
以下是实现该查询的SQL语句:
```
SELECT d.id, d.name
FROM tb_dept d
WHERE EXISTS (
SELECT 1
FROM tb_emp e
WHERE e.dept_id = d.id
);
```
该查询语句使用`EXISTS`子查询来判断是否存在属于该部门的员工,如果存在则返回该部门的ID和名称。如果不存在,则不返回该部门。
具体来说,它的执行步骤如下:
1. 从`tb_dept`表中选取所有部门的ID和名称。
2. 使用`EXISTS`子查询来判断该部门是否拥有员工。子查询中选取任意一行数据,只要该行数据的`dept_id`与外部查询的`d.id`相同,则返回`1`,否则返回`NULL`。
3. 如果子查询返回的结果为`1`,则表示该部门拥有员工,将该部门的ID和名称返回。
该查询语句可以帮助你快速查询拥有员工的部门信息。
相关问题
查询 拥有员工的 部门ID、部门名称 (没有员工的部门无需展示)
可以使用以下 SQL 语句查询拥有员工的部门ID和名称:
```
SELECT department_id, department_name
FROM departments
WHERE department_id IN (SELECT DISTINCT department_id FROM employees);
```
这个查询语句中,嵌套了一个子查询,用于查找拥有员工的部门ID。主查询则是根据部门ID在部门表中查询相应的部门名称。由于使用了子查询,因此只有拥有员工的部门才会被返回,没有员工的部门不会被展示。
-- 14. 查询所有 在 2010-01-01 之后入职的员工, 及其归属的部门名称; 如果员工没有分配部门, 也需要展示出来
以下是实现该查询的SQL语句:
```
SELECT e.id, e.name, e.entrydate, d.name AS dept_name
FROM tb_emp e
LEFT JOIN tb_dept d ON e.dept_id = d.id
WHERE e.entrydate >= '2010-01-01';
```
该查询语句使用`LEFT JOIN`左连接`tb_emp`表和`tb_dept`表,返回在`2010-01-01`之后入职的所有员工以及其归属的部门名称。如果员工没有分配部门,也会将其信息展示出来。
具体来说,它的执行步骤如下:
1. 从`tb_emp`表中选取所有入职日期在`2010-01-01`之后的员工,包括没有分配部门的员工。
2. 使用`LEFT JOIN`左连接`tb_emp`表和`tb_dept`表,连接条件为`e.dept_id = d.id`,其中`e`是`tb_emp`表的别名,`d`是`tb_dept`表的别名。
3. 返回`e`表中员工的ID、姓名、入职日期,以及`d`表中部门的名称。
该查询语句可以帮助你快速查询在某一时间之后入职的员工的信息,并且可以查看这些员工所属的部门名称。如果员工没有分配部门,也会将其信息展示出来。