MySql中DQL子查询介绍

DQL子查询介绍

按结果集行列数不同:

  • 标量子查询(结果为一列一行)
  • 列子查询(结果为一列多行)
  • 行子查询(结果为一行多列)
  • 表子查询(结果为多行多列)

按子查询位置不同:

  • select后面(标量子查询)
  • from后面(表子查询)
  • where或者having后面(标量子查询、列子查询、行子查询)
  • exists后面(表子查询)

子查询放在小括号内部

子查询一般放在条件的右侧

标量子查询,一般配合单行操作符使用 > < >= <= = <>

列子查询,一般搭配多行子查询使用IN ANY/SOME ALL

放在where和having后面

标量子查询

在这里插入图片描述

# 第一步我们要查询Abel的工资
SELECT *
FROM employees
WHERE last_name = 'Abel'

在这里插入图片描述

# 第二步在第一部基础上查询
SELECT *
FROM employees
WHERE salary > (
	SELECT salary
	FROM employees
	WHERE last_name = 'Abel'
);

在这里插入图片描述

PS:注意标量子查询结果只能是一列一行的

在这里插入图片描述

列子查询
  • IN:等于列表中任意一个
  • ANY/SOME 和子查询返回值某一值比较(a > ANY(10,20,30) <==> a> MIN(10,20,30))
  • ALL 和子查询返回的所有值比较(a > ANY(10,20,30) <==> a> MAX(10,20,30))

在这里插入图片描述

# 查询location_id 为1400或者1700的部门
SELECT *
FROM departments
WHERE location_id IN(1400,1700)

在这里插入图片描述

# 查询location_id为1400或者1700员工
SELECT *
FROM employees
WHERE department_id IN (
	SELECT department_id
	FROM departments
	WHERE location_id IN (1400,1700)
)

在这里插入图片描述

在这里插入图片描述

行子查询(了解)

在这里插入图片描述

非行子查询写法

# 查询员工编号最小的人
SELECT MIN(employee_id)
FROM employees
# 查询员工工资最高的人
SELECT MAX(salary)
FROM employees
# 查询同时符合这两个条件的人
SELECT *
FROM employees
WHERE salary = (
	SELECT MAX(salary)
	FROM employees

)
AND employee_id = (
	SELECT MIN(employee_id)
	FROM employees
)

在这里插入图片描述

在这里插入图片描述

行子查询写法

SELECT *
FROM employees
WHERE (employee_id,salary) = (
	SELECT MIN(employee_id),MAX(salary)
	FROM employees
)

在这里插入图片描述

在这里插入图片描述

放在select后面

标量子查询

在这里插入图片描述

在这里插入图片描述

SELECT departments.*,(
	SELECT COUNT(*) 
	FROM employees
	WHERE departments.department_id = employees.department_id
) 个数
FROM departments

在这里插入图片描述

放在from后面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

SELECT *
FROM (
	SELECT MIN(salary) 最低工资,department_id FROM employees GROUP BY department_id
) AS 表1,job_grades AS 表2
WHERE 表1.最低工资 BETWEEN 表2.lowest_sal AND highest_sal

在这里插入图片描述

放在exists后面

相关子查询
SELECT EXISTS(SELECT * FROM employees)
SELECT EXISTS(SELECT * FROM employees WHERE salary = 30000)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值