SQL基础9—子查询

本文介绍了SQL中的子查询,包括子查询的概念、分类、特点以及标量子查询和关联子查询的使用。子查询可以作为条件出现在其他SQL语句中,执行顺序先于主查询。重点讲解了标量子查询在WHERE和FROM子句中的应用,以及关联子查询在筛选特定条件数据时的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

1.概念:

  • 出现在其他语句的内部的select语句,称为子查询或内查询
  • 里面嵌套其他select语句的查询语句,称为主查询或外查询

子查询不一定必须出现在select语句内部,只是出现在select语句内部的时候较多!

2.注意事项:

  • 1)原则上,子查询必须设定名称;

  • 2)子查询执行顺序先于父查询:一般来讲,主查询会用到子查询的结果

  • 3)子查询语句需要放在小括号内,提高代码的阅读性

  • 4)如果子查询放在条件中,一般来讲,子查询需要放在条件的右侧

    示例:where job_id>(子查询)
    不能写成:where (子查询)<job_id

  • 5)单行子查询对应的使用单行操作符:> < >= <= = <>

  • 6)多行子查询对应的使用多行操作符:IN 、ANY 、ALL

1.子查询分类

1.按查询结果分类:

  • 单行子查询:子查询的结果集只有一行一列
  • 多行子查询:子查询的结果集有多行一列

2.按出现在select语句的位置进行分类:

select子句中:
	子查询的结果集只能是一列 (标量子查询)

from子句中
	子查询的结果集可以为多行多列(表子查询)

wherehaving子句中 ★
	子查询的结果集可以是:
		单行子查询(标量子查询):一列一行
		多行子查询:一列多行

exist子句
	子查询的结果集可以为多行多列(相关子查询)

案例:select子句中:

SELECT (SELECT COUNT(*) FROM departments);

2.子查询特点

1、子查询最好放在小括号中,提高代码的阅读性

2、子查询的执行优先于主查询

3、子查询如果当条件,一般放在条件的右侧

3.标量子查询:

1.WHERE 子句中:

	SELECT `last_name`,`employee_id`,`salary`
	FROM `employees`
	WHERE `salary` > (
		SELECT AVG(salary)
		FROM employees
	);

2.FROM 子句中:

1)只返回一行一列的结果的子查询

2)常用方法: 用于WHERE子句中,因为WHERE子句不可以使用聚合函数;

3)使用位置:任意可以使用单一值的位置都可使用(所有地方)

4)执行顺序: 先执行标量子查询,后将唯一结果带入外层查询进行执行

5)注意事项:绝对不能返回多个结果

4.关联子查询

关联子查询:只会返回单一值,其结合条件写在子查询中。

案例:

1.筛选,每类产品中,大于该类产品均价的商品的相关信息

SELECT  product_type,product_name,sale_price
FROM product AS P1
WHERE sale_price > (
	SELECT avg(sale_price)			/*关联子查询,只会返回单一值*/
	FROM product AS P2
	WHERE P2.product_type = P1.product_type  /*结合条件一定要写在子查询中*/
);

2.如果使用标量子查询,不满足查询需求;
如:子查询使用分组,则语法错误:

SELECT  product_type,product_name,sale_price
FROM product AS P1
WHERE sale_price > (
	SELECT avg(sale_price)			/*子查询,返回多个值,错误*/
	FROM product AS P2
	GROUP BY product_type
);

注意:关联子查询的结合条件一定要写在子查询中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值