1. 程式人生 > 其它 >MySQL-sql99-子查詢

MySQL-sql99-子查詢

標量子查詢

案例:誰的工資比Abel高?

# ①查詢Abel的工資
SELECT `salary`
FROM `employees`
WHERE `last_name`='Abel';

發現是一行一列 為標量子查詢

# ②查詢員工的資訊,滿足salary>①結果
SELECT *
FROM `employees`
WHERE `salary`>(
	SELECT `salary`
	FROM `employees`
	WHERE `last_name`='Abel'
);

整道題的結果就出來啦

案例:返回job_id與141號員工相同,salary比143號員工多的員工 姓名,job_id和工資

# 案例:返回job_id與141號員工相同,salary比143號員工多的員工 姓名,job_id和工資
# ①查詢141號員工的job_id
SELECT `job_id`
FROM `employees`
WHERE `employee_id`=141;

# ②查詢員工的salary
SELECT `salary`
FROM `employees`
WHERE `employee_id`=143;

# ③返回job_id與141號員工相同,salary比143號員工多的員工 姓名,job_id和工資
SELECT `first_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
);

在子查詢中運用分組函式

案例:返回公司工資最少的員工的last_name,job_id和salary

# 案例:返回公司工資最少的員工的last_name,job_id和salary
# ①查詢公司的最低工資
SELECT MIN(`salary`)
FROM `employees`;

# ②查詢last_name,job_id和salary,要求salary=①
SELECT `last_name`,`job_id`,`salary`
FROM `employees`
WHERE `salary`=(
	SELECT MIN(`salary`)
	FROM `employees`
);

在having後面用子查詢

案例:查詢最低工資大於50號部門最低工資的部門id和其最低工資

# 案例:查詢最低工資大於50號部門最低工資的部門id和其最低工資

# ①查詢50號部門的最低工資
SELECT MIN(`salary`)
FROM `employees`
WHERE `department_id`=50;

# ②查詢每個部門的最低工資
SELECT MIN(`salary`),`department_id`
FROM `employees`
GROUP BY `department_id`;

# ③篩選②,滿足MIN(`salary`)>①
SELECT MIN(`salary`),`department_id`
FROM `employees`
GROUP BY `department_id`
HAVING MIN(`salary`)>(
	SELECT MIN(`salary`)
	FROM `employees`
	WHERE `department_id`=50
);