Skip to content

单行操作符

  • =

  • != 或 <>

  • =

  • <

  • <=

sql
# 查询工资大于 149 号员工的员工信息
SELECT last_name
FROM employees
WHERE salary > (
  SELECT salary
  FROM employees
  WHERE employee_id = 149
);

# 查询 job_id 与 141 号员工相同,salary 比 143 号员工多的 last_name,job_id 和 
# salary。
SELECT last_name, job_id, salary
FROM employees
WHERE job_id = (
  SELECT job_id
  FROM employees
  WHERE employee_id = 141
)
AND salary > (
  SELECT salary
  FROM employees
  WHERE employee_id = 143
);

# 返回工资最少的员工信息
SELECT last_name, salary
FROM employees
HAVING salary = (
  SELECT MIN(salary)
  FROM employees
);

# 返回与 141 号员工的 manager_id 和 deparment_id 相同的其它员工的
# employee_id,manager_id,department_id
SELECT employee_id, manager_id, department_id
FROM employees
WHERE manager_id = (
  SELECT manager_id
  FROM employees
  WHERE employee_id = 141
)
AND department_id = (
  SELECT department_id
  FROM employees
  WHERE employee_id = 141
)
AND employee_id != 141;

# 或者
SELECT employee_id, manager_id, department_id
FROM employees
WHERE (manager_id, department_id) = (
  SELECT manager_id, department_id
  FROM employees
  WHERE employee_id = 141
)
AND employee_id != 141;

# 查询最低工资大于 50 号部门最低工资的部门id 和 其最低工资
SELECT department_id, MIN(salary)
FROM employees
GROUP BY department_id
HAVING MIN(salary) > (
  SELECT MIN(salary)
  FROM employees
  WHERE department_id = 50
);

# 显示员工的 employee_id,last_name 和 location
# 若员工的 deparment_id 与 location_id 为 1800 的 department_id 相同,
# 则 location'Canada',其余为 'USA'
SELECT employee_id, last_name,
CASE
WHEN department_id = (
  SELECT department_id
  FROM departments
  WHERE departments.location_id = 1800
)
THEN 'Canada'
ELSE 'USA'
END 'location'
FROM employees e;

# 空值问题
# 没有结果,因为子查询没有结果。
SELECT last_name, job_id
FROM employees
WHERE job_id = (
  SELECT job_id
  FROM employees
  WHERE last_name = 'foo'
);

# 非法使用子查询
# 子查询的结果是多个,不知道该等于哪个,会报错。
SELECT last_name, salary
FROM employees
WHERE salary = (
  SELECT MIN(salary)
  FROM employees
  GROUP BY department_id
);