单行比较操作符
| 操作符 | 含义 |
|---|---|
| = | equal to |
| > | greater than |
| >= | greater than or equal to |
| < | less than |
| <= | less than or equal to |
| <> | not equal to |
代码示例
题目:查询工资大于 149 号员工工资的员工的信息
题目:返回 job_id 与 141 号员工相同,salary 比 143 号员工多的员工姓名,job_id 和工资
SELECT last_name, job_id, salaryFROM employeesWHERE job_id =(SELECT job_idFROM employeesWHERE employee_id = 141)AND salary >(SELECT salaryFROM employeesWHERE employee_id = 143);
题目:返回公司工资最少的员工的 last_name,job_id 和 salary
SELECT last_name, job_id, salaryFROM employeesWHERE salary =(SELECT MIN(salary)FROM employees);
题目:查询与 141 号或 174 号员工的 manager_id 和 department_id 相同的其他员工的employee_id,manager_id,department_id
实现方式 1:不成对比较
SELECT employee_id, manager_id, department_idFROM employeesWHERE manager_id IN(SELECT manager_idFROM employeesWHERE employee_id IN (174,141))AND department_id IN(SELECT department_idFROM employeesWHERE employee_id IN (174,141))AND employee_id NOT IN(174,141);
实现方式 2:成对比较
SELECT employee_id, manager_id, department_idFROM employeesWHERE (manager_id, department_id) IN(SELECT manager_id, department_idFROM employeesWHERE employee_id IN (141,174))AND employee_id NOT IN (141,174);
HAVING 中的子查询
- 首先执行子查询。
- 向主查询中的HAVING 子句返回结果。
题目:查询最低工资大于50号部门最低工资的部门id和其最低工资
SELECT department_id, MIN(salary)FROM employeesGROUP BY department_idHAVING MIN(salary) >(SELECT MIN(salary)FROM employeesWHERE department_id = 50);
CASE 中的子查询
在CASE表达式中使用单列子查询:
题目:显式员工的 employee_id,last_name 和 location。其中,若员工 department_id 与 location_id 为 1800 的 department_id 相同,则 location 为“Canada”,其余则为“USA”。
SELECT employee_id, last_name,(CASE department_idWHEN(SELECT department_id FROM departmentsWHERE location_id = 1800)THEN 'Canada' ELSE 'USA' END) locationFROM employees;
子查询中的空值问题
SELECT last_name, job_idFROM employeesWHERE job_id =(SELECT job_idFROM employeesWHERE last_name = 'Haas');
非法使用子查询
SELECT employee_id, last_nameFROM employeesWHERE salary =(SELECT MIN(salary)FROM employeesGROUP BY department_id);
多行子查询使用单行比较符
