数据库-MySQL-子查询和合并查询
子查询
1 带 In 关键字的子查询:
一个查询语句的条件可能落在另一个 SELECT 语句的查询结果中
eg:
SELECT id FROM t_bookType
它的结果是:
然后将其作为另外一个查询的子查询:
SELECT * FROM t_book WHERE bookTypeID NOT IN (SELECT id FROM t_bookType) ;
当然也可以在 IN 前面加 NOT
2 带比较运算符的子查询
子查询可以使用比较运算符。
eg:
SELECT price FROM t_pricelevel WHERE priceLevel = 1;
然后将其作为另外一个查询的子查询:
SELECT * FROM t_book WHERE price >= (SELECT price FROM t_pricelevel WHERE priceLevel = 1);
3 带 Exists 关键字的子查询
假如子查询查询到记录,则进行外层查询,否则,不执行外层查寻
eg:
SELECT * FROM t_bookType
然后将其作为另外一个查询的子查询,如果该查询有查询结果,那么外层查询就执行,否则则不执行
SELECT * FROM t_book WHERE EXISTS (SELECT * FROM t_bookType);
4 带 Any 关键字的子查询
ANY 关键字表示满足其中任一条件则执行外层查询
eg:
SELECT price FROM t_pricelevel WHERE pricelevel >= 2;
然后将其作为另外一个查询的子查询:
SELECT * FROM t_book WHERE price <= ANY (SELECT price FROM t_pricelevel WHERE pricelevel >= 2);
因为后面是一个集合,没有 ANY 是会报错的
5 带 All 关键字的子查询
ALL 关键字表示满足所有条件;与ANY相反
合并查询
1 UNION
使用 UNION 关键字是,数据库系统会将所有的查询结果合并到一起,然后去除掉相同的记录;
eg:
这是查询两个表的id
SELECT id FROM t_book
LL SELECT id FROM t_bookType
用关键字 NUION 合并
SELECT id FROM t_book UNION ALL SELECT id FROM t_bookType;
- UNION ALL
使用 UNION ALL,不会去除掉系统的记录;
另外说一下给表和字段取别名
1 为表取别名
格式: 表名 表的别名
2 为字段取别名
格式: 属性名 [AS] 别名 (as可加可不加 0.0)