前端学数据库之子查询

  查询数据库,当查询条件比较复杂时,常常需要用到子查询。子查询(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);

  查询类型为“超记本”的商品价格

  查询价格大于或等于"超级本"价格的商品

  系统提示错误,子查询返回的多于一行,因为子查询有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

存储查询结果

  我们可以把查询结果统一存储到一个新的数据表中,而不需要一条一条地录入

  下面,先创建一个“商品分类”空表

  然后,查询tdb_goods表的所有记录,并且按"类别"分组

  将分组结果写入到“商品分类”数据表中

INSERT [INTO] tbl_name [(col_name),...)] SELECT...;

-转载

时间: 2024-10-24 08:15:06

前端学数据库之子查询的相关文章

前端学习数据库之子元素

x 查询数据库,当查询条件比较复杂时,常常需要用到子查询.子查询(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,称为子查询(

前端学数据库之多表操作

× 目录 [1]准备工作 [2]多表更新 [3]两步更新[4]连接[5]无限级表 前面的话 上一篇博文中介绍了子查询的相关内容,最后我们将查询结果存储到一个新的数据表中.下面我们将接着子查询的案例,详细介绍数据库中的多表操作 准备工作 在上一篇博文,我们将详细数据存储到tdb_goods数据表中,将详细数据中的类别信息存储到tdb_goods_cates数据表中 接下来,我们要研究如何通过tdb_goods_cates数据表来更新tdb_goods表 多表更新 多表更新类似于单表更新 UPDAT

前端学数据库之记录操作

× 目录 [1]插入记录 [2]更新记录 [3]删除记录[4]查询表达式[5]结果处理 前面的话 本文将详细介绍mysql关于记录的增删改查 插入记录 INSERT [INTO] tbl_name [(col_name,...)] {VALUES|VALUE} ({expr|DEFAULT},...),(...),... 首先,创建一个简单的数据表 如果省略col_name,则意味着所有的字段按照顺序依次赋值.因为id字段是自动编号的,该字段可以赋值为NULL或DEFAULT 通过逗号分隔,可以

数据库之子查询和事务隔离级别

数据库大的知识点,特此补上.看的还是<漫画数据库>. 一.查询 如果要从一个数据库里面检索出某一字段为最大的数据项,那用什么方法呢?--其实用子查询就可以查到. 1)子查询是查询里面再嵌套查询. people表: 如果我要查询年龄最大的那一行数据项.就可以使用子查询. select * from people where age = (select max(age) from people); 选出people里面的最大年龄,再选出年龄等于最大值的数据. 当然,还有另外一种方法. select

11-03C#基础--数据库之子查询语句

一.子查询--查询的嵌套(重点记忆) select bumen,COUNT(*) from haha group by bumen having COUNT(*)>=5 select MAX(age)from haha where bumen='销售部' select*from haha where bumen='销售部'and age =35 --汇总-- select MAX(age)from haha where bumen in ( select bumen from haha grou

MySql数据库之子查询和高级应用

MySql数据库中的子查询: 子查询:在一条select查询语句中嵌套另一条select语句,其主要作用是充当查询条件或确定数据源. 代码案例如下: 例1. 查询大于平均年龄的学生: select * from students where age > (select avg(age) from students); 例2. 查询学生在班的所有班级名字: select name from classes where id in (select cls_id from students where

数据库(子查询、主键、外键)

-------子查询------------select bumen,COUNT(*)as 人数 from haha group by bumen having COUNT(*)>=5select MAX(nianling) from haha where bumen='销售部'select *from haha where bumen='销售部'and nianling=56--汇总select *from haha where nianling = (select MAX(nianling)

MySQL数据库8 -子查询,联合查询

一 使用IN关键字的子查询 问题: 查询游戏类型是'棋牌类' 的游戏的分数信息 - 游戏分数表中并未包含游戏类型信息 思路一:采用链接查询 思路二: 分两步进行,首先找到所以'棋牌类'游戏的编号,再以这一组编号为查询依据完成查询 select * from scores where gno in (select gno from games where gtype ='棋牌') 例:查询没有参与5号游戏的玩家QQ select user_qq from users where user_qq n

前端学数据库之存储

× 目录 [1]存储过程 [2]存储引擎 前面的话 我们经常会对数据表进行插入.删除.更新及查找的工作,即我们常说的CURD.其实,当我们输入命令时,mysql引擎会按照下图进行操作 如果我们省略了分析和编译的环节,那么执行效率将大大提高.这就需要下面介绍的存储来实现 存储过程 存储过程是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理.存储过程存储在数据库内,可以由应用程序调用执行,允许用户声明明变量以及进行流程控制.存储过程可以接收参数(输入类型参数.输出类型参数),可以存