用sql实现复杂查询 列出与'Scott'从事相同工作的所有员工及部门名称,部门人数
时间: 2023-06-02 20:05:24 浏览: 167
好的,这个问题可以进行回答。以下是对应的SQL语句:
```sql
SELECT e.*, d.DName, COUNT(*) OVER (PARTITION BY d.DName) AS DCount
FROM EMP e
JOIN DEPT d ON e.Deptno=d.Deptno
WHERE e.Job=(SELECT Job FROM EMP WHERE Ename='Scott')
ORDER BY d.DName;
```
其中,EMP和DEPT是两个表,EMP表中存放员工信息,DEPT表中存放部门信息。以上的SQL语句会返回与'Scott'从事相同工作的所有员工信息以及他们的部门名称和部门人数。
相关问题
sql列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门
可以使用左连接(LEFT JOIN)将部门表(departments)和员工表(employees)连接起来,然后使用 IS NULL 条件子句来筛选出没有员工的部门。具体的 SQL 查询语句如下:
```sql
SELECT d.department_name, e.employee_id, e.first_name, e.last_name
FROM departments d
LEFT JOIN employees e ON d.department_id = e.department_id
ORDER BY d.department_name;
```
这个查询语句中,使用 LEFT JOIN 将部门表和员工表连接起来,以保留所有部门的信息。然后,使用 ORDER BY 子句按照部门名称排序。由于 LEFT JOIN 会保留左表(即部门表)中所有的行,所以如果某个部门没有员工,则该部门在结果集中的员工信息列中会显示 NULL 值。因此,使用 IS NULL 条件子句来筛选出没有员工的部门,即:
```sql
SELECT d.department_name
FROM departments d
LEFT JOIN employees e ON d.department_id = e.department_id
WHERE e.employee_id IS NULL
ORDER BY d.department_name;
```
这个查询语句中,使用 WHERE 子句和 IS NULL 条件子句来筛选出没有员工的部门,然后按照部门名称排序。
使用以下SQL语句列出最低薪金大于15000的各种工作及从事此工作的员工人数。
SELECT job_title, COUNT(*) as employee_count
FROM employees
JOIN jobs
ON employees.job_id = jobs.job_id
WHERE jobs.min_salary > 15000
GROUP BY job_title;