一.子查询
先创建一张商品表,后续对其进行操作。
# 创建一个商品表,商品id:goods_id 商品名称:goods_name 商品分类:goods_cate
# 商品品牌:brand_name 商品价格:goods_price 是否上架:is_show 是否已售空:is_saleoff
CREATE TABLE IF NOT EXISTS tbl_goods(
goods_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
goods_name VARCHAR(150) NOT NULL,
goods_cate VARCHAR(40) NOT NULL,
brand_name VARCHAR(40) NOT NULL,
goods_price DECIMAL(15,3) UNSIGNED NOT NULL DEFAULT 0,
is_show BOOLEAN NOT NULL DEFAULT 1,
is_saleoff BOOLEAN NOT NULL DEFAULT 0
);
1.子查询定义
(1) 定义:
子查询(Sbuquery)是指出现在其他SQL语句内的SELECT子句。
语法: SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2);
其中SELECT * FROM t1,称为Outer Query/Outer Statement
SELECT col2 FROM t2,称为SubQuery
(2)要求:
子查询指嵌套在查询内部,且必须始终出现在圆括号内;
子查询可以包含多个关键字或条件,如DISTINCT,GROUP BY,ORDER BY,LIMIT,函数等。
子查询的外层查询可以是:SELECT,INSERT,UPDATE,SET或DO。
(3)返回值:
子查询可以返回标量,一行,一列或子查询。
2.使用比较运算符的子查询
使用比较运算符的子查询如=,>,<.>=,<=,<>,!=,<=>
(1) 语法:operand comparison_operator subquery
# 查商品表的平均价格
SELECT AVG(goods_price) FROM tbl_goods;
# 查商品表的平均价格,四舍五入保留两位小数
SELECT ROUND(AVG(goods_price),2) FROM tbl_goods;
# 上一步算出商品表商品平均价格为5845.10;查商品表价格大于平均水平的商品
SELECT * FROM tbl_goods WHERE goods_price >= 5845.10;
# 使用子查询查商品表价格大于平均水平的商品,比较运算可以产生子查询
SELECT * FROM tbl_goods WHERE goods_price >= (SELECT ROUND(AVG(goods_price),2) FROM tbl_goods);
(2)用ANY,SOME或ALL修饰的比较运算符
语法:operand comparison_operator ANY (subquery)
operand comparison_operator SOME (subquery)
operand c