前端学数据库之子查询
2016-12-02 20:08
316 查看
目录 [1]定义 [2]比较运算符 [3]修饰关键字[4][NOT]IN[5]存储查询结果 前面的话
查询数据库,http://weishi.qq.com/u/54122517当查询条件比较复杂时,常常需要用到子查询。子查询(Subquery)是指出现在其他SQL语句内的SELECT子句。本文将详细介绍子查询
定义
子查询(Subquery)是指出现在其他SQL语句内的SELECT子句
SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2);
复制代码
其中,SELECT * FROM t1,称为外层查询(Outer Query/Outer Statement),SELECT col2 FROM t2,称为子查询(SubQuery)
在使用子查询时,需要注意的是
1、子查询指嵌套在查询内部,且必须始终出现在圆括号内
2、子查询语句中可以包含多个关键字或条件,如DISTINCT、GROUP BY、ORDER BY、LIMIT、函数等
3、子查询的外层查询可以是:SELECT、INSERT、UPDATE、SET或DO
4、子查询可以返回值:标量、一行、一列或者子查询
比较运算符
使用比较符是其中一类子查询
operand comparison_operator subquery
复制代码
比较运算符包括=、!=、<>、<=> 、>、<、>=、<=
数据准备
下载数据文件,建立数据库,数据表,并存入相应记录
求所有电脑产品的平均价格,并且保留两位小数,AVG、MAX、MIN、COUNT、SUM为聚合函数
[注意]AVG()是一个用来求平均值的函数
查询所有价格大于平均价格的商品
SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price > 5391.30;
复制代码
通过子查询来实现相同的需求
SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price > (SELECT ROUND(AVG(goods_price),2) FROM tdb_goods);
复制代码
查询类型为“超记本”的商品价格
查询价格大于或等于"超级本"价格的商品
系统提示错误,子查询返回的多于一行,http://www.weishi.com/u/54122527因为子查询有3条结果,SELECT无法知道要大于子查询中3条结果中的哪一个。所以,这时就需要用到接下来要介绍的修饰关键字
修饰关键字
修饰关键字包括ANY、some、all三个,如果子查询返回多个值时,可以使用它们
operand comparison_operator ANY(子查询)
operand comparison_operator SOME(子查询)
operand comparison_operator ALL(子查询)
复制代码
情况处理
1、运算符为>或>=,使用ANY关键字时,表示大于子查询结果中的最小值
SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price > ANY (SELECT goods_price FROM tdb_goods WHERE goods_cate = '超级本');
复制代码
由结果可知,返回的都大于4299的值,即最小值
2、运算符为>或>=,使用ALL关键字时,表示大于子查询结果中的最大值
3、运算符为<或<=,使用ANY或SOME关键字时,表示小于子查询结果中的最大值;使用ALL关键字时,表示小于子查询结果中的最小值
4、运算符为=,使用ANY或SOME关键字时,表示等于子查询结果中的任意值;使用ALL关键字时,则返回空
[NOT]IN
operand comparison_operator [NOT] IN (subquery)
复制代码
第二种子查询是由IN 或 NOT IN引发的子查询,与比较运算符使用的方法基本相同
其中,= ANY 运算符与 IN 等效,!= ALL或 <> ALL运算符与 NOT IN 等效
复制代码
[NOT] EXISTS
第三种子查询是由EXISTS 或 NOT EXISTS引发的子查询。如果子查询返回任何行,EXISTS将返回TRUE;否则返回FALSE
存储查询结果
我们可以把查询结果统一存http://www.weishi.com/u/58136559储到一个新的数据表中,而不需要一条一条地录入
下面,先创建一个“商品分类”空表
然后,查询tdb_goods表的所有记录,并且按"类别"分组
将分组结果写入到“商品分类”数据表中
INSERT [INTO] tbl_name [(col_name),...)] SELECT...;
复制代码
查询数据库,http://weishi.qq.com/u/54122517当查询条件比较复杂时,常常需要用到子查询。子查询(Subquery)是指出现在其他SQL语句内的SELECT子句。本文将详细介绍子查询
定义
子查询(Subquery)是指出现在其他SQL语句内的SELECT子句
SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2);
复制代码
其中,SELECT * FROM t1,称为外层查询(Outer Query/Outer Statement),SELECT col2 FROM t2,称为子查询(SubQuery)
在使用子查询时,需要注意的是
1、子查询指嵌套在查询内部,且必须始终出现在圆括号内
2、子查询语句中可以包含多个关键字或条件,如DISTINCT、GROUP BY、ORDER BY、LIMIT、函数等
3、子查询的外层查询可以是:SELECT、INSERT、UPDATE、SET或DO
4、子查询可以返回值:标量、一行、一列或者子查询
比较运算符
使用比较符是其中一类子查询
operand comparison_operator subquery
复制代码
比较运算符包括=、!=、<>、<=> 、>、<、>=、<=
数据准备
下载数据文件,建立数据库,数据表,并存入相应记录
求所有电脑产品的平均价格,并且保留两位小数,AVG、MAX、MIN、COUNT、SUM为聚合函数
[注意]AVG()是一个用来求平均值的函数
查询所有价格大于平均价格的商品
SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price > 5391.30;
复制代码
通过子查询来实现相同的需求
SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price > (SELECT ROUND(AVG(goods_price),2) FROM tdb_goods);
复制代码
查询类型为“超记本”的商品价格
查询价格大于或等于"超级本"价格的商品
系统提示错误,子查询返回的多于一行,http://www.weishi.com/u/54122527因为子查询有3条结果,SELECT无法知道要大于子查询中3条结果中的哪一个。所以,这时就需要用到接下来要介绍的修饰关键字
修饰关键字
修饰关键字包括ANY、some、all三个,如果子查询返回多个值时,可以使用它们
operand comparison_operator ANY(子查询)
operand comparison_operator SOME(子查询)
operand comparison_operator ALL(子查询)
复制代码
情况处理
1、运算符为>或>=,使用ANY关键字时,表示大于子查询结果中的最小值
SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price > ANY (SELECT goods_price FROM tdb_goods WHERE goods_cate = '超级本');
复制代码
由结果可知,返回的都大于4299的值,即最小值
2、运算符为>或>=,使用ALL关键字时,表示大于子查询结果中的最大值
3、运算符为<或<=,使用ANY或SOME关键字时,表示小于子查询结果中的最大值;使用ALL关键字时,表示小于子查询结果中的最小值
4、运算符为=,使用ANY或SOME关键字时,表示等于子查询结果中的任意值;使用ALL关键字时,则返回空
[NOT]IN
operand comparison_operator [NOT] IN (subquery)
复制代码
第二种子查询是由IN 或 NOT IN引发的子查询,与比较运算符使用的方法基本相同
其中,= ANY 运算符与 IN 等效,!= ALL或 <> ALL运算符与 NOT IN 等效
复制代码
[NOT] EXISTS
第三种子查询是由EXISTS 或 NOT EXISTS引发的子查询。如果子查询返回任何行,EXISTS将返回TRUE;否则返回FALSE
存储查询结果
我们可以把查询结果统一存http://www.weishi.com/u/58136559储到一个新的数据表中,而不需要一条一条地录入
下面,先创建一个“商品分类”空表
然后,查询tdb_goods表的所有记录,并且按"类别"分组
将分组结果写入到“商品分类”数据表中
INSERT [INTO] tbl_name [(col_name),...)] SELECT...;
复制代码
相关文章推荐
- FCC的javascript初级算法题解答
- 那些我在jsp自定义标签中犯过的拼写错误
- js与jquery实时监听输入框值的oninput与onpropertychange方法
- 使用CSS3实现一个3D相册
- js-获取JSON数组的长度
- jquery的prop()方法
- js金额格式化
- CSS style和HTML style有什么区别?
- html——语义
- js函数和变量
- showBo.js免费下载模态框对话框Jquery
- JavaScript拖动效果
- 前端基础
- sass笔记-2|Sass基础语法之让样式表更具条理性和可读性
- Jquery中attr和prop的区别
- HTML5 canvas实时绘画摄像头数据
- 【Json】SimpleJson在项目中的使用
- react webpack 按需加载初试
- BZOJ 3940 [Usaco2015 Feb]Censoring
- CSS 概念 & 作用