您好,登錄后才能下訂單哦!
子查詢:類型、語法、和注意事項
使用子查詢能解決哪些問題?
子查詢語法:
select select_list from table where expr operator (select select_list from table);
子查詢(內查詢)在主查詢(外查詢)之前執行。
主查詢使用子查詢結果。
位置:select,where,from,having
1、查詢誰的工資比Abel高
select last_name, salary from employees
where salary >
(select salary
from employees
where last_name = 'Abel');
使用子查詢注意事項
子查詢要包含在括號內。
將子查詢放在比較條件的右側增強可讀性(子查詢可以出現在比較運算符的兩側)
單行操作符對應單行子查詢,多行操作符對應多行子查詢
單行子查詢:
– 子查詢中的組函數
– HAVING 子句中的子查詢
只返回一行
使用單行比較操作符
操作符 | 含義 |
= | 等于 |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
<> | 不等于 |
select last_name, job_id, salary from employees
where job_id in (select job_id from employees
where last_name like 'Taylor')
and salary in
(select salary
from employees
where last_name like 'Taylor');
在子查詢中使用組函數
select last_name, job_id, salary from employees where
salary = (select min(salary) from employees);
子查詢中的HAVING 子句
首先執行子查詢
向主查詢中的 HAVING 子句返回結果
select department_id, min(salary)
from employees
group by department_id
having min(salary) >
(select min(salary)
from employees
where department_id = 50);
多行子查詢使用單行比較符,以下為錯誤寫法
select employee_id, last_name
from employees
where salary =
(select min(salary)
from employees
group by department_id);
子查詢中的空值問題
select last_name, job_id from employees
where job_id =
(select job_id from employees
where last_name = 'haas');
多行子查詢
– 使用 ALL 或 ANY
返回多行。
使用多行比較操作符。
操作符 | 含義 |
IN | 等于列表中的任何一個值 |
ANY | 必須在=, !=, >, <, <=, >= 操作符之前使用,與列表中每個值進行比較,如果沒有返回任何行,說明計算結果為FALSE |
ALL | 必須在=, !=, >, <, <=, >=操作符之前使用,與列表中每個值進行比較,如果沒有任何行返回,說明計算結果為TRUE |
使用范例:
在多行子查詢中使用 ANY
select employee_id, last_name, job_id, salary
from employees where salary < any
(select salary
from employees
where job_id = 'IT_PROG')
and job_id < > 'IT_PROG';
在多行子查詢中使用 ALL 操作符
select employee_id, last_name, job_id, salary
from employees
where salary < all
(select salary
from employees
where job_id = 'IT_PROG')
and job_id <> 'IT_PROG';
子查詢中的空值
select emp.last_name
from employees emp
where emp.employee_id not in
(select mgr.manager_id
from employees mgr);
1、HR 部門的同事想要你幫忙寫一個 SQL 語句,該 SQL 語句可以傳入一個值(員工的 last_name),然后返回結果是該員工同一部門同事的 last_name 和 hire_date,且要求該員工不在返回結果中。
舉個例子,如果用戶輸入”Zlotkey”,結果就會返回除了 Zlotkey 之外的同一部門的其他同事的
last_name 和 hire_date.
select last_name,hire_date
from employees
where department_id =(select department_id from employees
where last_name= '&&enter_name')
and last_name < > '&enter_name';
2、請查詢出所有高于平均工資的員工的 employee_id,last_name,salary,并將最終結果根據salary 降序排列。
select employee_id,last_name,salary
from employees
where salary > (select avg(salary)
from employees)
order by salary;
3、請寫一條 SQL 語句,要求查詢出那些同一部門員工 last_name 里面包含字母”u”的員工的employee_id,last_name。
select employee_id,last_name from employees where department_id in (select department_id from employees where last_name like '%u%');
4、請幫助HR部門的同事查出所有部門location_id是1700的員工的last_name,department_id,job_id。
select last_name,department_id,job_id
from employees
where department_id in(select department_id
from departments
where location_id=1700);
讓用戶可以選擇輸入一個 location_id,然后輸出結果。
select last_name,department_id,job_id
from employees
where department_id in(select department_id
from departments
where location_id=&enter_location);
5、請查出所有需要向 King 匯報的員工的 last_name 以及 salary
select last_name,salary,manager_id
from employees
where manager_id = (select employee_id
from employees
where last_name like 'King' and manager_id is null);
6、請查出所有是執行部(Executive)的員工的 department_id,last_name,job_id
select department_id,last_name,job_id
from employees
where department_id in(select department_id
from departments
where department_name like 'Executive');
7、請查出比 department_id 是 60 的任何員工薪水高的所有的員工的 last_name。
select department_id,last_name,salary from employees
where salary > any
(select salary from employees
where department_id=60);
8、查詢所有高于平均工資,并且同一部門員工 last_name 里面包含字母”u”的員工的 employee_id,last_name,salary。
select employee_id,last_name,salary
from employees
where department_id in(select department_id
from employees
where last_name like '%u%')
and salary > (select avg(salary) from employees);
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。