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 );
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);
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)此种方法不常用