时间:2021-07-01 10:21:17 帮助过:36人阅读
一: 前言 数据仍然采用上一章采用的数据,并且在db_book2额外添加一张表 MysqlCREATE TABLE t_pricelevel( id INT PRIMARY KEY AUTO_INCREMENT, pricelevel INT, price FLOAT, description VARCHAR(50) ); MysqlINSERT INTO t_pricelevel VALUES(NULL,1,80.00
一: 前言
数据仍然采用上一章采用的数据,并且在db_book2额外添加一张表
Mysql>CREATE TABLE t_pricelevel(
id INT PRIMARY KEY AUTO_INCREMENT,
pricelevel INT,
price FLOAT,
description VARCHAR(50)
);
Mysql>INSERT INTO t_pricelevel VALUES(NULL,1,80.00,'价格贵的书'),(NULL,2,60.00,'价格适中的书'),(NULL,3,40.00,'价格便宜的书');
乱码问题请参考http://blog.csdn.net/a672489861/article/details/16330821
二: 子查询
2.1 带In 关键字的子查询
一个查询语句的条件可能落在另一个SELECT 语句的查询结果中。
例: 查询t_book表中booktypeid在t_booktype表中存在的记录
Mysql>SELECT * FROM t_book WHERE booktypeid IN(
SELECT id FROM t_booktype
);
Mysql>SELECT * FROM t_book WHERE booktypeid NOT IN(
SELECT id FROM t_booktype
);
2.2 带比较运算符的子查询
子查询可以使用比较运算符。
例: 查询t_pricelevel表中价格比平均价格高的记录
Mysql>SELECT * FROM t_pricelevel WHERE price>(
SELECT AVG(price) FROM t_pricelevel
);
2.3 带Exists 关键字的子查询
假如子查询查询到记录,则进行外层查询,否则,不执行外层查询。
Mysql>SELECT * FROM t_book WHERE EXISTS(
SELECT * FROM t_booktype
);
2.4 带Any 关键字的子查询
ANY 关键字表示满足其中任一条件。
例: 查询t_book表中价格大于t_pricelevel的任意一个的记录
Mysql>SELECT * FROM t_book WHERE price>ANY(
SELECT price FROM t_pricelevel
);
2.5 带All 关键字的子查询
ALL 关键字表示满足所有条件
例: 查询t_book表中价格大于t_pricelevel的所有价格的记录
Mysql>SELECT * FROM t_book WHERE price>ALL(
SELECT price FROM t_pricelevel
);
2.6 综合练习
例: 查询t_book表中价格大于t_booktype表中最低价格的记录
Mysql>SELECT * FROM t_book WHERE price>(
SELECT MIN(price) FROM t_pricelevel
);
例: 查询t_book表中价格大于t_pricelevel表的平均价格的相关t_booktype的信息
Mysql>SELECT * FROM t_booktype WHERE id IN(
SELECT booktypeid FROM t_book WHERE price>(
SELECT AVG(price) FROM t_pricelevel
)
);
三: 总结
今天为大家带来了子查询的相关内容,大家消化一下,下节为大家带来合并记录以及别名的知识,谢谢大家!