【MySQL】数据处理(数据的查询之子查询、复查询)

MySQL.数据处理(数据的查询之子查询、复查询)

子查询

通过添加(select…)搜索进行;

mysql> select*from 图书信息;
+---------------+---------------------------------+--------+------+--------+------------+----------+----------+
| ISBN编号      | 图书名称                        | 作者   | 价格 | 出版社 | 出版日期   | 图书类型 | 封面图片 |
+---------------+---------------------------------+--------+------+--------+------------+----------+----------+
| 9787121204147 | oracle11g数据库应用、设计与管理 | 陈承欢 | 38   | 4      | 2014-07-01 | T        | 汪涛     |
| 9787040393293 | 实用工具软件任务驱动式教程      | 陈承欢 | 26   | 1      | 2014-11-01 | T        | NULL     |
| 9787040393293 | 网页美化与布局                  | 陈承欢 | 39   | 1      | 2015-08-01 | T        | NULL     |
| 9787115374035 | 跨平台的移动Web开发实战         | 陈承欢 | 29   | 2      | 2015-03-01 | T        | NULL     |
| 9787121052347 | 数据库应用基础实例教程          | 陈承欢 | 229  | 4      | 2008-12-30 | T        | 高成和   |
| 9787121052348 | JAVA编程教学                    | 赵天逸 | 33   | 5      | 2008-12-29 | T        | NULL     |
| 9787121052349 | MYSQL基础教学                   | 赵天逸 | 30   | 3      | 2009-12-29 | T        | NULL     |
| 9787121052350 | 计算机基础教程                  | 赵天宇 | 45   | 1      | 2000-12-29 | S        | 徐松涛   |
| 9787121052352 | 网络技术与应用                  | 张泽段 | 100  | 4      | 2020-11-11 | M        | 张思杰   |
| 9787121052351 | 计算机基础                      | 赵天宇 | 45   |        | 2000-12-29 |          | NULL     |
| 9787121052358 | 计算机教程                      | 马宇   | 50   | 1      | 2000-12-29 |          | NULL     |
| 9787121052338 | 计算机教程                      | 马宇   | 42   | 2      | 2000-12-13 | F        | NULL     |
+---------------+---------------------------------+--------+------+--------+------------+----------+----------+
12 rows in set (0.09 sec)

单值嵌套式
mysql> select  图书名称,价格 from 图书信息 where 作者=(select 作者 from 图书信息 where 作者='张泽段');
+----------------+------+
| 图书名称       | 价格 |
+----------------+------+
| 网络技术与应用 | 100  |
+----------------+------+
1 row in set (0.06 sec)

在这里只是子查询的一种,属于单值嵌套式。即后面的select语句查询结果为但一值时,用“=”。下面几类属于多值嵌套:

1.any

(<)any 比中间的任何一个大(小) ,只要比最小(大)的大(小)==

mysql> select  图书名称,价格 from 图书信息 where 价格>any(select 价格 from 图书信息 where 图书名称='网页美化与布局');
+----------------+------+
| 图书名称       | 价格 |
+----------------+------+
| 网页美化与布局 | 39   |
| 计算机基础教程 | 45   |
| 网络技术与应用 | 100  |
| 计算机基础     | 45   |
| 计算机教程     | 45   |
+----------------+------+
5 rows in set

mysql> select  图书名称,价格 from 图书信息 where 价格>(select min(价格) from 图书信息 where 图书名称='网页美化与布局');
+----------------+------+
| 图书名称       | 价格 |
+----------------+------+
| 网页美化与布局 | 39   |
| 计算机基础教程 | 45   |
| 网络技术与应用 | 100  |
| 计算机基础     | 45   |
| 计算机教程     | 45   |
+----------------+------+
5 rows in set
mysql> select  图书名称,价格 from 图书信息 where 价格<any(select 价格 from 图书信息 where 图书名称='网页美化与布局');
+----------------------------+------+
| 图书名称                   | 价格 |
+----------------------------+------+
| 实用工具软件任务驱动式教程 | 26   |
| 跨平台的移动Web开发实战    | 29   |
| 数据库应用基础实例教程     | 29   |
| JAVA编程教学               | 33   |
| MYSQL基础教学              | 30   |
| 网页美化与布局             | 36   |
+----------------------------+------+
6 rows in set

mysql> select  图书名称,价格 from 图书信息 where 价格<(select max(价格) from 图书信息 where 图书名称='网页美化与布局');
+----------------------------+------+
| 图书名称                   | 价格 |
+----------------------------+------+
| 实用工具软件任务驱动式教程 | 26   |
| 跨平台的移动Web开发实战    | 29   |
| 数据库应用基础实例教程     | 29   |
| JAVA编程教学               | 33   |
| MYSQL基础教学              | 30   |
| 网页美化与布局             | 36   |
+----------------------------+------+
6 rows in set

2.in
表示符合在后一个select查询的结果之中

mysql> select  图书名称,价格 from 图书信息 where 出版社 in (select 出版社 from 图书信息 where 图书名称='网页美化与布局');
+----------------------------+------+
| 图书名称                   | 价格 |
+----------------------------+------+
| 实用工具软件任务驱动式教程 | 26   |
| 网页美化与布局             | 39   |
| 数据库应用基础实例教程     | 29   |
| 计算机基础教程             | 45   |
| 网络技术与应用             | 100  |
| 计算机教程                 | 45   |
| 网页美化与布局             | 36   |
+----------------------------+------+
7 rows in set

in的用法等同于=all

mysql> select  图书名称,价格 from 图书信息 where 价格=any(select 价格 from 图书信息 where 图书名称='网页美化与布局');
+----------------+------+
| 图书名称       | 价格 |
+----------------+------+
| 网页美化与布局 | 39   |
+----------------+------+
1 row in set (0.10 sec)

mysql> select  图书名称,价格 from 图书信息 where 价格 in(select 价格 from 图书信息 where 图书名称='网页美化与布局');
+----------------+------+
| 图书名称       | 价格 |
+----------------+------+
| 网页美化与布局 | 39   |
+----------------+------+
1 row in set (0.10 sec)

3.all
>all大于最大,<all小于最小


mysql> select  图书名称,价格 from 图书信息 where 价格>all(select 价格 from 图书信息 where 图书名称='网页美化与布局');
+----------------+------+
| 图书名称       | 价格 |
+----------------+------+
| 计算机基础教程 | 45   |
| 网络技术与应用 | 100  |
| 计算机基础     | 45   |
| 计算机教程     | 45   |
+----------------+------+
4 rows in set

mysql> select  图书名称,价格 from 图书信息 where 价格>(select max(价格) from 图书信息 where 图书名称='网页美化与布局');
+----------------+------+
| 图书名称       | 价格 |
+----------------+------+
| 计算机基础教程 | 45   |
| 网络技术与应用 | 100  |
| 计算机基础     | 45   |
| 计算机教程     | 45   |
+----------------+------+
4 rows in set


复查询:

即将前部查询结果的表作为后部查询的基本表进行后一个select查询语句。

搜索出价格大于该出版社书平均价格的书:

mysql>  select 图书名称,价格,出版社 from 图书信息 a where a.价格>(select avg(价格) from 图书信息 b where a.出版社=b.出版社);
+-------------------------+------+--------+
| 图书名称                | 价格 | 出版社 |
+-------------------------+------+--------+
| 跨平台的移动Web开发实战 | 29   | 2      |
| 计算机基础教程          | 45   | 3      |
| 网络技术与应用          | 100  | 4      |
| 计算机基础              | 45   | 5      |
| 计算机教程              | 45   | 1      |
+-------------------------+------+--------+
5 rows in set

查询有出版图书的出版社名称:
exists 判断有无的,不管多少

mysql> select  出版社名称,出版社ID from 出版社 a where exists(select*from 图书信息 b where a.出版社ID=b.出版社);
+----------------+----------+
| 出版社名称     | 出版社ID |
+----------------+----------+
| 高等教育出版社 | 1        |
| 人民邮电出版社 | 2        |
| 清华大学出版社 | 3        |
| 电子工业出版社 | 4        |
| 机械工业出版社 | 5        |
+----------------+----------+
5 rows in set

Union(all):

1.不属于子查询
2.将多个查询的结果联合在一起
3.结果集的列必须一样
4.对数据的类型无要求,但没意义
5.union 没有all是将相同的去掉了。


mysql> select  a.ISBN编号,a.图书名称,b.出版社名称 from 图书信息 a join 出版社 b on a.出版社=b.出版社ID and 价格>30;
+---------------+----------------+----------------+
| ISBN编号      | 图书名称       | 出版社名称     |
+---------------+----------------+----------------+
| 9787121052348 | JAVA编程教学   | 机械工业出版社 |
| 9787121052350 | 计算机基础教程 | 清华大学出版社 |
| 9787121052352 | 网络技术与应用 | 电子工业出版社 |
| 9787121052351 | 计算机基础     | 机械工业出版社 |
| 9787121052358 | 计算机教程     | 高等教育出版社 |
| 9787040393293 | 网页美化与布局 | 高等教育出版社 |
+---------------+----------------+----------------+
6 rows in set

mysql> select  a.ISBN编号,a.图书名称,b.出版社名称 from 图书信息 a join 出版社 b on a.出版社=b.出版社ID and b.出版社名称='清华大学出版社';
+---------------+----------------+----------------+
| ISBN编号      | 图书名称       | 出版社名称     |
+---------------+----------------+----------------+
| 9787121052349 | MYSQL基础教学  | 清华大学出版社 |
| 9787121052350 | 计算机基础教程 | 清华大学出版社 |
+---------------+----------------+----------------+
2 rows in set

mysql> select  a.ISBN编号,a.图书名称,b.出版社名称 from 图书信息 a join 出版社 b on a.出版社=b.出版社ID and 价格>30
    -> union all
    -> select  a.ISBN编号,a.图书名称,b.出版社名称 from 图书信息 a join 出版社 b on a.出版社=b.出版社ID and b.出版社名称='清华大学出版社';
+---------------+----------------+----------------+
| ISBN编号      | 图书名称       | 出版社名称     |
+---------------+----------------+----------------+
| 9787121052348 | JAVA编程教学   | 机械工业出版社 |
| 9787121052350 | 计算机基础教程 | 清华大学出版社 |
| 9787121052352 | 网络技术与应用 | 电子工业出版社 |
| 9787121052351 | 计算机基础     | 机械工业出版社 |
| 9787121052358 | 计算机教程     | 高等教育出版社 |
| 9787040393293 | 网页美化与布局 | 高等教育出版社 |
| 9787121052349 | MYSQL基础教学  | 清华大学出版社 |
| 9787121052350 | 计算机基础教程 | 清华大学出版社 |
+---------------+----------------+----------------+
8 rows in set

mysql> select  a.ISBN编号,a.图书名称,b.出版社名称 from 图书信息 a join 出版社 b on a.出版社=b.出版社ID and 价格>30
    -> union 
    -> select  a.ISBN编号,a.图书名称,b.出版社名称 from 图书信息 a join 出版社 b on a.出版社=b.出版社ID and b.出版社名称='清华大学出版社';
+---------------+----------------+----------------+
| ISBN编号      | 图书名称       | 出版社名称     |
+---------------+----------------+----------------+
| 9787121052348 | JAVA编程教学   | 机械工业出版社 |
| 9787121052350 | 计算机基础教程 | 清华大学出版社 |
| 9787121052352 | 网络技术与应用 | 电子工业出版社 |
| 9787121052351 | 计算机基础     | 机械工业出版社 |
| 9787121052358 | 计算机教程     | 高等教育出版社 |
| 9787040393293 | 网页美化与布局 | 高等教育出版社 |
| 9787121052349 | MYSQL基础教学  | 清华大学出版社 |
+---------------+----------------+----------------+
7 rows in set


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑着蜗牛ひ追导弹'

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值