SQL子查询

1.子查询

在查询语句中包含着有另外一条查询语句,被包含的查询语句称为子查询,包含着子查询的查询就称为父查询。总之,子查询就是在查询语句里嵌套一条或者多条查询语句。
子查询也可以称为内部查询或内部选择,而包含子查询的语句称为外部查询或者外部选择
1.1子查询的语法规则:
子查询的select查询总使用圆括号括起来
不能包括compute或for browse子句
如果同时指定top子句,则可能只包括order by子句
子查询最多嵌套32层,个别查询可能会不支持32层嵌套
任何可以使用表达式的地方都可以使用子查询,主要它返回的是单个值
如果某个表只出现在子查询中而不出现在外部查询中,那么该表中的列就无法包含在输出中
1.2 语法格式:bcff25049c1d47419e62d17e2c9f2252.jpg
where 查询表达式 [not] in(子查询)
where 查询表达式 比较运算符 [any|all] (子查询)
where [not] exists (子查询)

 

假设Books表如下:a9f2611a1ad3491691b0c21ec45effbc.jpg

 


然后显示单条数据的情况,这个是高于平均价格的数据


2、嵌套查询
嵌套查询是指将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询。嵌套查询中上层的查询块称为外侧查询或父查询,下层查询块称为内层查询或子查询。SQL语言允许多层嵌套,但是在子查询中不允许出现order by子句,order by子句只能用在最外层的查询中。
嵌套查询的处理方法是:先处理最内侧的子查询,然后一层一层地向上处理,直到最外层的查询块。
2.1简单的运算符有=、<>、<、>、<= 、>=
举一个简单的例子f94844aab0d440d18cfcea81fea2c7f3.jpg

 


带IN的嵌套查询fb8c27dd20644aaeb2c96690e67ced78.jpg

 


带EXISTS2f08fcf264d94b8a83231132c07879a5.jpg

 


2、Any 是一个逻辑运算符 ,它将标量值与子查询返回的单列值集进行比较。它将值与子查询返回的一组进行比较。any运算符必须要结合比较运算符使用,虽然说我也没用过
条件 含义
C=ANY(…) c列中的值必须与集合中的一个或多个值匹配,以评估为true。
c!=ANY(…) c列中的值不能与集合中的一个或多个值匹配以评估为true。
C>ANY(…) c列中的值必须大于要评估为true的集合中的最小值。
c<ANY(…) c列中的值必须小于要评估为true的集合中的最大值。
C>=ANY(…) c列中的值必须大于或等于要评估为true的集合中的最小值。
C<=ANY(…) c列中的值必须小于或等于要评估为true的集合中的最大值。
2、ALL运算符是一个逻辑运算符,它将标量值与子查询返回的单列值列表进行比较。
他和ANY是不一样的。他们是区别是:
All:只有当其所有数据都满足条件时,条件才成立
Any:只要有一条数据满足条件,条件就成立
以下是SQL ALL运算符的语法:
WHERE column_name comparison_operator ALL (subquery)
SQL ALL运算符必须以比较运算符开头,例如:>,>=,<,<=,<>,=,后跟子查询。 某些数据库系统(如Oracle)允许使用文字值列表而不是子查询。这个all我也没用过,就是老师给的文档中的东西!
ALL的基本含义:
条件 描述
c > ALL(…) c列中的值必须大于要评估为true的集合中的最大值。
c >= ALL(…) c列中的值必须大于或等于要评估为true的集合中的最大值。
c < ALL(…) c列中的值必须小于要评估为true的集合中的最小值。
c <= ALL(…) c列中的值必须小于或等于要评估为true的集合中的最小值。
c <> ALL(…) c列中的值不得等于要评估为true的集合中的任何值。
c = ALL(…) c列中的值必须等于要评估为true的集合中的任何值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值