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的集合中的任何值。
|