MySQL数据处理(数据的查询之子查询复查询)
Posted 阿呆小记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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小于最小
> 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是将相同的去掉了。
> select a.ISBN编号,a.图书名称,b.出版社名称 from 图书信息 a join 出版社 b on a.出版社=b.出版社ID and 价格>30;
+---------------+--以上是关于MySQL数据处理(数据的查询之子查询复查询)的主要内容,如果未能解决你的问题,请参考以下文章