10SQL查询

题目


SQL196 查找入职员工时间排名倒数第三的员工所有信息 X

SELECT * FROM employees
WHERE hire_date=
(   SELECT DISTINCT hire_date 
    FROM employees 
    ORDER BY hire_date DESC 
    LIMIT 1 OFFSET 2
)

SQL197 查找当前薪水详情以及部门编号dept_no

SELECT salaries.*, dept_manager.dept_no
FROM salaries, dept_manager
WHERE salaries.emp_no = dept_manager.emp_no
ORDER BY salaries.emp_no

SQL198 查找所有已经分配部门的员工的last_name和first_name以及dept_no

SQL199 查找所有员工的last_name和first_name以及对应部门编号dept_no X

SELECT employees.last_name, employees.first_name, dept_emp.dept_no
FROM employees 
LEFT JOIN dept_emp
ON employees.emp_no = dept_emp.emp_no

注意LEFT JOIN的语法, 是ON

SQL204

所有非部门领导的员工emp_no

用以下查询语句不能实现:

SELECT DISTINCT employees.emp_no
FROM employees, dept_manager
WHERE employees.emp_no != dept_manager.emp_no

因为用了他会逐行比较左边表列与右边表列不相等的情况, 所以只要右表的列与坐标的列有不相同的, 那就会返回, 所以在原题目会返回10001, 10002, 10003, 实际上应该用

SELECT emp_no
FROM employees
WHERE emp_no NOT IN (
    SELECT emp_no
    FROM dept_manager
)

SQL205 获取所有员工当前的manager

最好使用连接, 使得逻辑更清晰

SELECT dept_emp.emp_no, dept_manager.emp_no as manager
FROM dept_emp
INNER JOIN dept_manager
ON dept_emp.dept_no = dept_manager.dept_no
WHERE dept_emp.emp_no != dept_manager.emp_no

我第一次写的是如下也能过但是不清晰

SELECT dept_emp.emp_no, dept_manager.emp_no as manager
FROM dept_emp, dept_manager
WHERE dept_emp.emp_no != dept_manager.emp_no AND dept_emp.dept_no = dept_manager.dept_no
TO_DATE的妙用

正在职位的员工和领导的日期都会设置为9999-01-01, AND to_date = '9999-01-01' 是一个额外的条件,它在查询中用于筛选当前任职的部门领导。在这种情况下,日期 ‘9999-01-01’ 被假设为一个特殊的值,用于表示当前在职的部门领导,因为 ‘9999-01-01’ 比任何其他日期都要远大于当前日期。

通过添加 AND to_date = '9999-01-01' 条件,查询语句会限制结果只包括当前在职的部门领导,而排除已经离职的部门领导。这样可以确保只返回有效的部门领导记录。

如果部门领导表中的离职日期(to_date)的值为 ‘9999-01-01’,那么查询结果将只包含当前在职的部门领导的员工编号。


欢迎在评论区中进行批评指正,转载请注明来源,如涉及侵权,请联系作者删除。

×

喜欢就点赞,疼爱就打赏