[{"createTime":1735734952000,"id":1,"img":"hwy_ms_500_252.jpeg","link":"https://activity.huaweicloud.com/cps.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=201905","name":"华为云秒杀","status":9,"txt":"华为云38元秒杀","type":1,"updateTime":1735747411000,"userId":3},{"createTime":1736173885000,"id":2,"img":"txy_480_300.png","link":"https://cloud.tencent.com/act/cps/redirect?redirect=1077&cps_key=edb15096bfff75effaaa8c8bb66138bd&from=console","name":"腾讯云秒杀","status":9,"txt":"腾讯云限量秒杀","type":1,"updateTime":1736173885000,"userId":3},{"createTime":1736177492000,"id":3,"img":"aly_251_140.png","link":"https://www.aliyun.com/minisite/goods?userCode=pwp8kmv3","memo":"","name":"阿里云","status":9,"txt":"阿里云2折起","type":1,"updateTime":1736177492000,"userId":3},{"createTime":1735660800000,"id":4,"img":"vultr_560_300.png","link":"https://www.vultr.com/?ref=9603742-8H","name":"Vultr","status":9,"txt":"Vultr送$100","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":5,"img":"jdy_663_320.jpg","link":"https://3.cn/2ay1-e5t","name":"京东云","status":9,"txt":"京东云特惠专区","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":6,"img":"new_ads.png","link":"https://www.iodraw.com/ads","name":"发布广告","status":9,"txt":"发布广告","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":7,"img":"yun_910_50.png","link":"https://activity.huaweicloud.com/discount_area_v5/index.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=aXhpYW95YW5nOA===&utm_medium=cps&utm_campaign=201905","name":"底部","status":9,"txt":"高性能云服务器2折起","type":2,"updateTime":1735660800000,"userId":3}]
1、子查询
在查询语句中包含着有另外一条查询语句,被包含的查询语句称为子查询,包含着子查询的查询就称为父查询。总之,子查询就是在查询语句里嵌套一条或者多条查询语句。
子查询也可以称为内部查询或内部选择,而包含子查询的语句称为外部查询或者外部选择
1.1子查询的语法规则:
子查询的select查询总使用圆括号括起来
不能包括compute或for browse子句
如果同时指定top子句,则可能只包括order by子句
子查询最多嵌套32层,个别查询可能会不支持32层嵌套
任何可以使用表达式的地方都可以使用子查询,主要它返回的是单个值
如果某个表只出现在子查询中而不出现在外部查询中,那么该表中的列就无法包含在输出中
1.2 语法格式:
where 查询表达式 [not] in(子查询)
where 查询表达式 比较运算符 [any|all] (子查询)
where [not] exists (子查询)
假设Books表如下:
然后显示单条数据的情况,这个是高于平均价格的数据
2、嵌套查询
嵌套查询是指将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询。嵌套查询中上层的查询块称为外侧查询或父查询,下层查询块称为内层查询或子查询。SQL语言允许多层嵌套,但是在子查询中不允许出现order
by子句,order by子句只能用在最外层的查询中。
嵌套查询的处理方法是:先处理最内侧的子查询,然后一层一层地向上处理,直到最外层的查询块。
2.1简单的运算符有=、<>、<、>、<= 、>=
举一个简单的例子
带IN的嵌套查询
带EXISTS
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的集合中的任何值。