软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 数据库 -> 《MySQL必知必会学习笔记》:子查询 -> 正文阅读

[数据库]《MySQL必知必会学习笔记》:子查询


子查询


在开始了解子查询之前,首先做下准备工作,建立3个表,
  • 一个是customers表,其中包括:客户名字、客户ID、客户Tel等。
  • 一个是orders表,其中包括:订单号、客户ID、订单时间等。
  • 一个是ordersitems表,其中包括:订单物品、订单号、物品数量。

准备工作

1、建表


建customers表的命令如下,其它的表与之类似:
create table customers(cust_name varchar(10),cust_id int(10),cust_tel varchar(10));

2、插入内容


为customers表插入内容的命令如下,其它的与子类似:
insert into customers values('wu',2,'1387234');

最后三个表的内容截图如下:
[img]http://7xknzt.com1.z0.glb.clouddn.com/MySQL_customers.PNG
[img]http://7xknzt.com1.z0.glb.clouddn.com/MySQL_orders.PNG
[img]http://7xknzt.com1.z0.glb.clouddn.com/MySQL_ordersitems.PNG

子查询


前面我们所学的东西都是简单的查询,即从单个数据库表中检索数据的单条语句。
到底什么是子查询呢?通过下面这个例子,相信我们就更好的理解了。
上面我们建了三个表,分别为customers/orders/ordersitems.
现在,假如,我们想看下订购了物品 apple的所有客户信息,应该怎样检索呢?
下面列出具体的步骤:
  • 第一步:在ordersitems表中找出包含有apple的订单号order_id.
  • 第二步:根据上一步查找的结果,找出订单号为order_id的客户ID(cust_id).
  • 最后:根据上一步查找的结果,在customers表中根据客户ID(cust_id)找出客户信息。

现在我们按照步骤来查询下,观察下结果:
[img]http://7xknzt.com1.z0.glb.clouddn.com/MySQL_simpleSelect.PNG
从上面可以看出,我们就是按照步骤,将第一步的结果当做第二步的条件来进行查询,将第二步的结果直接作为第三步的条件来进行查询,最后得到最终的结果。
现在,我们分别把第一个子查询(返回订单号的那一个)变为子查询组合到第二个查询中。
第一个查询的代码如下:
select order_id from ordersitems where content='apple';

作为子查询组合到第二个查询后的代码如下:
select cust_id from orders where order_id in (
    select order_id from ordersitems where content='apple'
);

结果如下,从结果可以看出,与我们单个查询的结果是一致的:
[img]http://7xknzt.com1.z0.glb.clouddn.com/MySQL_subSelect.PNG
现在,我们就把上面的查询作为子查询组合到第三个查询中,代码如下:
select cust_name,cust_tel from customers where cust_id in(
    select cust_id from orders where order_id in(
        select order_id from ordersitems where content='apple')
    )
);

注意:包含子查询的select语句难以阅读和调试,特别是他们较为复杂时。如上所示把子查询分解为多行并且适当地进行缩进,能极大地简化子查询的使用。
[img]http://7xknzt.com1.z0.glb.clouddn.com/MySQL_twoSubSelect.PNG
在where子句中使用子查询能够编写出功能很强并且很灵活的SQL语句。对于能嵌套的子查询的数目没有限制,不过在实际使用时由于性能的限制,不能嵌套太多的子查询。
注意:在子查询中,列必须匹配

作为计算字段使用子查询


上面介绍的都是作为条件使用子查询,下面就介绍下作为计算字段使用子查询。
还是以一个例子来进行说明。
假如需要显示customers表中每个客户的订单总数。
为执行这个操作,步骤如下:
  • 从customers表中检索客户列表
  • 对于检索出的每个客户,统计其在orders表中的订单数目。

例如:查询客户id=1的订单数的命令如下:
select count(*) as order_total from orders where cust_id=1;

[img]http://7xknzt.com1.z0.glb.clouddn.com/MySQL_countSubSelect.PNG
将上面的命令作为字段的子查询的代码如下:
select cust_name,cust_tel,(select count(*) from orders where orders.cust_id==customers.cust_id) from customers ;

[img]http://7xknzt.com1.z0.glb.clouddn.com/MySQL_countSubSelect_v1.PNG

小结


子查询可以理解为嵌套,这里方便理解一点。但是在我们使用子查询的过程中,要先分步骤来完成,然后将子查询一个一个的组合起来,直到这个子查询加入之后得到的结果是符合要求的,然后继续将下一个子查询组合进行直至完成所有的子查询都全部正确的加入。
......显示全文...
    点击查看全文


上一篇文章      下一篇文章      查看所有文章
2016-04-01 16:56:17  
数据库 最新文章
Python&MySQL&PyQt
最新用python来操作mysql完全解析
mongodb的安装详解
1.PDO简介
《MySQL必知必会学习笔记》:高级联结
【翻译自mos文章】怎么对Microsoft(Office)
MyCAT全局表描述及示例
ocp
关于SQL数据表存储过程表名前缀换成dbo代码
数据库调优教程(二)慢查询数据准备
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2018年7日历
2018-7-19 13:59:18
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --