MySQL 6.子查询

子查询:

  • 子查询指嵌套在查询内部,且必须始终出现在圆括号内
  • 子查询可以包含多个关键字或条件,如DISTINCT、GROUP BY 、ORDER BY、LIMIT、函数等
  • 子查询的外层查询可以是我们所知道的所有的SQL命令的统称。

一下Demo基于此表结构,具体信息就不做展示:

1 CREATE TABLE tdb_goods(
2     goods_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
3     goods_name VARCHAR(150) NOT NULL,
4     goods_cate VARCHAR(40) NOT NULL,
5     brand_name VARCHAR(40) NOT NULL,
6     goods_price DECIMAL(15,3) UNSIGNED NOT NULL DEFAULT 0,
7     is_show BOOLEAN NOT NULL DEFAULT 1,
8     is_saleoff BOOLEAN NOT NULL DEFAULT 0
9 );
View Code

SQL又叫结构化查询语言

下面例子中SELECT * FROM table1称为Outer Query/ Out Statement

SELECT col2 FROM table2 称为 SubQuery

1 SELECT * FROM tdb_goods WHERE brand_name = (SELECT brand_name FROM tdb_goods);

子查询可以返回标量、一行、一列或子查询

 子查询产生的情况比较多但总共分为三类

  • 1.使用比较运算符的子查询(=、>、<、>=、<=、!=、<>、<=>)

ROUND(AVG(goods_price),2):求goods_price的平均数,并将其四舍五入保留小数点的两位

1 SELECT goods_id, goods_name, goods_price FROM tdb_goods WHERE goods_price >= (SELECT ROUND(AVG(goods_price),2) FROM tdb_goods);
子查询Demo

ANY、SOME、ALL:ANY和SOME等价相当于任何一个即可,ALL则是所有的

Demo:查找出价格大于所有超级本的商品

1 SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price > ALL (SELECT goods_price FROM tdb_goods WHERE goods_cate='超级本');
  • 2.使用NOT IN 与 IN 的子查询

=ANY运算符与IN等效

!=ALL与NOT IN 等效

  • 3.使用EXISTS产生的子查询(如果子查询返回任何行,EXISTS将返回TRUE,否则返回FALSE)此种方法不常用
posted @ 2015-11-07 16:48  坚持坚持再坚持  阅读(209)  评论(0编辑  收藏  举报