* 含義:**出現在其他語句中的select語句,稱為子查詢或內查詢;外部的查詢語句,稱為主查詢或外查詢**
* 嵌套在其他語句內部的select語句成為子查詢或內查詢
* 外面的語句可以是insert、update、delete、select等,一般select作為外面語句較多
* 外面如果為select語句,則此語句稱為外查詢或主查詢
* 分類:
* 按子查詢出現的位置:
* select后面:僅僅支持標量子查詢
* from后面:支持表子查詢
* where或having后面:支持標量子查詢,列子查詢,行子查詢(較少)
* exists后面(相關子查詢):支持表子查詢
* 按功能、結果集的行列數不同:
* 標量子查詢(結果集只有一行一列)
* 列子查詢(結果集只有一列多行)
* 行子查詢(結果集有一行多列)
* 表子查詢(結果集一般為多行多列)
#### where或having后面
* 標量子查詢(單行子查詢)
* 列子查詢(多行子查詢)
* 行子查詢(多列多行)
* 特點:
* 子查詢放在小括號內
* 子查詢一般放在條件的右側,where,having
* 標量子查詢,一般搭配著單行操作符使用(> = )
* 列子查詢,一般搭配著多行操作符使用(IN、ANY/SOME、ALL)
* 子查詢的執行優選與主查詢執行,主查詢的條件用到了子查詢的結果
##### 標量子查詢
* 案例1:查詢Ernst的工資
```sql
SELECT salary from gin_employees
WHERE last_name = 'Ernst';
```
<br>
* 案例2:查詢大于Ernst的工資的員工信息
```sql
SELECT * FROM gin_employees
WHERE salary > (
select salary from gin_employees
WHERE last_name = 'Ernst'
);
```
<br>
* 案例3:
```sql
--查詢140號員工的job_id
SELECT job_id
from gin_employees
WHERE employee_id = 140;
-- 查詢171號員工的salary
SELECT salary from gin_employees
WHERE employee_id = 171;
-- 查詢員工的姓名,job_id 和工資 要求job_id = 案例1 并且 salary>案例2
SELECT last_name,job_id,salary
from gin_employees
WHERE job_id = (
SELECT job_id
from gin_employees
WHERE employee_id = 140
) and salary > (
SELECT salary from gin_employees
WHERE employee_id = 171
);
```
<br>
* 案例4:返回公司工資最少的last_name,job_id,和salary
```sql
-- ① 查詢公司最低工資
SELECT min(salary) from gin_employees;
-- ② 查詢last_name,job_id,salary 要求salary = ①
SELECT last_name,job_id,salary
from gin_employees
WHERE salary = (
SELECT
min( salary )
FROM
gin_employees
);
```