子查询

在開始了解子查询之前,首先做下准备工作,建立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');

最后三个表的内容截图例如以下:

子查询

前面我们所学的东西都是简单的查询,即从单个数据库表中检索数据的单条语句。

究竟什么是子查询呢?通过以下这个样例,相信我们就更好的理解了。

上面我们建了三个表,分别为customers/orders/ordersitems.

如今,假如,我们想看下订购了物品 apple的全部客户信息,应该如何检索呢?

以下列出详细的步骤:

  • 第一步:在ordersitems表中找出包含有apple的订单号order_id.
  • 第二步:依据上一步查找的结果,找出订单号为order_id的客户ID(cust_id).
  • 最后:依据上一步查找的结果,在customers表中依据客户ID(cust_id)找出客户信息。

如今我们依照步骤来查询下,观察下结果:

从上面能够看出,我们就是依照步骤,将第一步的结果当做第二步的条件来进行查询。将第二步的结果直接作为第三步的条件来进行查询,最后得到终于的结果。

如今,我们分别把第一个子查询(返回订单号的那一个)变为子查询组合到第二个查询中。

第一个查询的代码例如以下:

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'
);

结果例如以下,从结果能够看出。与我们单个查询的结果是一致的:

如今。我们就把上面的查询作为子查询组合到第三个查询中。代码例如以下:

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语句难以阅读和调试。特别是他们较为复杂时。如上所看到的把子查询分解为多行而且适当地进行缩进,能极大地简化子查询的使用。

在where子句中使用子查询能够编写出功能非常强而且非常灵活的SQL语句。对于能嵌套的子查询的数目没有限制,只是在实际使用时因为性能的限制,不能嵌套太多的子查询。

注意:在子查询中。列必须匹配

作为计算字段使用子查询

上面介绍的都是作为条件使用子查询。以下就介绍下作为计算字段使用子查询。

还是以一个样例来进行说明。

假如须要显示customers表中每一个客户的订单总数。

为运行这个操作,过程例如以下:

  • 从customers表中检索客户列表
  • 对于检索出的每一个客户。统计其在orders表中的订单数目。

比如:查询客户id=1的订单数的命令例如以下:

select count(*) as order_total from orders where cust_id=1;

将上面的命令作为字段的子查询的代码例如以下:

select cust_name,cust_tel,(select count(*) from orders where orders.cust_id==customers.cust_id) from customers ;

小结

子查询能够理解为嵌套,这里方便理解一点。可是在我们使用子查询的过程中。要先分步骤来完毕,然后将子查询一个一个的组合起来,直到这个子查询增加之后得到的结果是符合要求的。然后继续将下一个子查询组合进行直至完毕全部的子查询都全部正确的增加。

《MySQL必知必会学习笔记》:子查询的更多相关文章

  1. 《MySQL必知必会》学习笔记——前言

    前言 MySQL已经成为世界上最受欢迎的数据库管理系统之一.无论是用在小型开发项目上,还是用来构建那些声名显赫的网站,MySQL都证明了自己是个稳定.可靠.快速.可信的系统,足以胜任任何数据存储业务的 ...

  2. 《MySQL必知必会》学习笔记整理

    简介 此笔记只包含<MySQL必知必会>中部分章节的整理笔记.这部分章节主要是一些在<SQL必知必会>中并未讲解的独属于 MySQL 数据库的一些特性,如正则表达式.全文本搜索 ...

  3. MySQL必知必会(第4版)整理笔记

    参考书籍: BookName:<SQL必知必会(第4版)> BookName:<Mysql必知必会(第4版)> Author: Ben Forta 说明:本书学习笔记 1.了解 ...

  4. MySQL必知必会1-20章读书笔记

    MySQL备忘 目录 目录 使用MySQL 检索数据 排序检索数据 过滤数据 数据过滤 用通配符进行过滤 用正则表达式进行搜索 创建计算字段 使用数据处理函数 数值处理函数 汇总数据 分组数据 使用子 ...

  5. 《SQL必知必会》学习笔记二)

    <SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...

  6. 《mysql必知必会》读书笔记--存储过程的使用

    以前对mysql的认识与应用只是停留在增删改查的阶段,最近正好在学习mysql相关内容,看了一本书叫做<MySQL必知必会>,看了之后对MySQL的高级用法有了一定的了解.以下内容只当读书 ...

  7. 《SQL必知必会》学习笔记整理

    简介 本笔记目前已包含 <SQL必知必会>中的所有章节. 我在整理笔记时所考虑的是:在笔记记完后,当我需要查找某个知识点时,不需要到书中去找,只需查看笔记即可找到相关知识点.因此在整理笔记 ...

  8. MySQL必知必会复习笔记(1)

    MySQL必知必会笔记(一) MySQL必知必会是一本很优秀的MySQL教程书,并且相当精简,在日常中甚至能当成一本工作手册来查看.本系列笔记记录的是:1.自己记得不够牢的代码:2.自己觉得很重要的代 ...

  9. mysql学习--mysql必知必会1

     例如以下为mysql必知必会第九章開始: 正則表達式用于匹配特殊的字符集合.mysql通过where子句对正則表達式提供初步的支持. keywordregexp用来表示后面跟的东西作为正則表達式 ...

  10. mysql学习--mysql必知必会

      上图为数据库操作分类:     下面的操作參考(mysql必知必会) 创建数据库 运行脚本建表: mysql> create database mytest; Query OK, 1 row ...

随机推荐

  1. hdu 1250 树形DP

    Anniversary party Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  2. java8 函数式接口——Function/Predict/Supplier/Consumer

    Function 我们知道Java8的最大特性就是函数式接口.所有标注了@FunctionalInterface注解的接口都是函数式接口,具体来说,所有标注了该注解的接口都将能用在lambda表达式上 ...

  3. 【CF645D】 Robot Rapping Results Report(拓扑排序,二分)

    题意:有一张N点M边的有向图,求最小的K使根据前K条边就能够确定图是否有唯一的拓扑序, 若没有唯一拓扑序输出-1 思路:二分答案再拓扑排序,以入度为0的节点作为新的一层,若某一层的节点个数<&g ...

  4. SQL2005:已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行.

    原文发布时间为:2008-08-04 -- 来源于本人的百度文章 [由搬家工具导入] 最近使用sql server2005,已经不止一次的发生了这样的错误.具体是怎么出来的我不清楚,其表现为:数据库中 ...

  5. 开发使用mysql的一些必备知识点整理(四)与python交互

    与python交互 在熟练使用sql语句的基础上,开始使用python语言提供的模块与mysql进行交互 这是我们在工作中大事要做的事 先学会sql是基础,一定要熟练编写sql语句 安装引入模块 安装 ...

  6. 微信小程序 wx.navigateTo()传参及多个参数方法

    var workModeAndPriceList = res.data.data.workModeAndPriceList; //var result = JSON.stringify(workMod ...

  7. LA 2995 Image Is Everything

    题目链接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show ...

  8. SD-WAN用户实践分享:老网工趟出的SD-WAN成功路

    在这个离开“人大物云”(人-人工智能.大-大数据.物-物联网.云-云计算)话题都张不开嘴的年代,在这个在咖啡店谈生意都不好意思低于1个亿的年代,反思我的老本行——网络,正在以一种全新的.更加重要的姿态 ...

  9. Socks5代理Socks5 Proxy

    Socks5代理Socks5 Proxy   Socks5代理是基于Socks协议的一种代理模式.其中,5表示该协议的版本号.它可以让局域网的计算机通过socks5代理服务器,访问外网的内容.由于它工 ...

  10. [转载]中情局数千份机密文档泄露:各种0day工具、恶意程序应有尽有

    转载:http://www.freebuf.com/news/128802.html 维基解密最近再度获取到了数千份文件——据说这些文件是来自CIA(中央情报局),文件细数了CIA所用的网络入侵工具及 ...