1. 子查询
- 描述:出现在其他语句后面的select语句称为子查询或内查询,外部查询称为主查询或外查询
- 分类:
- 按结果集的行列数不同划分
- 标量子查询:结果集一行一列
- 列子查询:结果集一列多行
- 行子查询:结果集一行多列
- 表子查询:结果集多行多列
- 按出现位置不同划分
- select子查询:标量子查询
- from子查询:表子查询
- where和having子查询:标量子查询、列子查询、行子查询
- exists子查询:表子查询
- 特点:
- 子查询放在小括号内
- 子查询一般放在条件右侧
- 标量子查询一般搭配单行操作符(>,<,>=,<=,!=,=,<>,<=>)使用,列子查询一般搭配多行操作符(in,any|some,all)使用
- 子查询的执行优先于主查询,主查询的条件用到子查询的结果集
2. SELECT子查询------标量子查询
SELECT (SELECT COUNT(*) FROM `bill`);
3. FROM子查询-----表子查询
SELECT t1.`pk_id`,t1.`username` FROM (SELECT `pk_id`,`username`,`password` FROM `user`) t1;
4. WHERE和HAVING子查询------标量子查询
# 查询订单表支付金额大于平均支付金额的产品名称、产品描述、订单价格
SELECT
`b_name` 产品名称,
`b_desc` 产品描述,
`b_price` 订单价格
FROM
`bill`
WHERE
`b_price` > (SELECT AVG(`b_price`) FROM `bill`);
5. WHERE和HAVING子查询------列子查询
SELECT
`b_name`,
`b_price`
FROM
`bill`
WHERE
`b_price` IN (SELECT `b_pric` FROM `bill` WHERE `b_price` > 20000);
6. WHERE和HAVING子查询------行子查询
SELECT
`b_name`,
`b_price`
FROM
`bill`
WHERE
(`b_name`,`b_price`) IN (SELECT `b_name`,`b_price` FROM `bill `WHERE `b_price` > 20000);
7. EXISTS子查询------表子查询
SELECT EXISTS(SELECT * FROM `bill`);