• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > mysql创建计算字段使用子查询教程

mysql创建计算字段使用子查询教程

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了mysql,创建,计算字段,子查询等相关知识,希望本文的分享对您有所帮助
作为计算字段使用子查询

使用子查询的另一方法是创建计算字段。假如需要显示 customers表中每个客户的订单总数。订单与相应的客户ID存储在 orders 表中。

为了执行这个操作,遵循下面的步骤。

(1) 从 customers 表中检索客户列表。

(2) 对于检索出的每个客户,统计其在 orders 表中的订单数目。

正如前两章所述,可使用 SELECT COUNT ( *) 对表中的行进行计数,并且通过提供一条 WHERE 子句来过滤某个特定的客户ID,可仅对该客户的订单进行计数。例如,下面的代码对客户 10001 的订单进行计数:

输入:

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

为了对每个客户执行 COUNT(*) 计算,应该将 COUNT(*) 作为一个子查询。请看下面的代码:

输入:

select cust_name,cust_state,(select count(*) from orders where orders.cust_id = customers.cust_id) as orders from customers order by cust_name;

输出:

QQ截图20170510101615.png

分析:这 条 SELECT 语 句 对 customers 表 中 每 个 客 户 返 回 3 列 :cust_name 、 cust_state 和 orders 。 orders 是一个计算字段,它是由圆括号中的子查询建立的。该子查询对检索出的每个客户执行一次。在此例子中,该子查询执行了5次,因为检索出了5个客户。

子查询中的 WHERE 子句与前面使用的 WHERE 子句稍有不同,因为它使用了完全限定列名(在第4章中首次提到)。下面的语句告诉SQL比较orders 表中的 cust_id 与当前正从 customers 表中检索的 cust_id :

where orders.cust_id = customers.cust_id

相关子查询(correlated subquery) 涉及外部查询的子查询。这种类型的子查询称为相关子查询。任何时候只要列名可能有多义性,就必须使用这种语法(表名和列名由一个句点分隔)。为什么这样?

我们来看看如果不使用完全限定的列名会发生什么情况:

输入:

select cust_name,cust_state,(select count(*) from orders where cust_id = cust_id) as orders from customers order by cust_name;

输出:

QQ截图20170510102225.png

分析:显然,返回的结果不正确(请比较前面的结果),那么,为什么会这样呢?有两个 cust_id 列,一个在 customers 中,另一个在orders 中,需要比较这两个列以正确地把订单与它们相应的顾客匹配。如果不完全限定列名,MySQL将假定你是对 orders 表中的 cust_id 进行自身比较。而 SELECT COUNT(*) FROM orders WHERE cust_id = cust_id;总是返回 orders 表中的订单总数(因为MySQL查看每个订单的 cust_id是否与本身匹配,当然,它们总是匹配的)。

虽然子查询在构造这种 SELECT 语句时极有用,但必须注意限制有歧义性的列名。

不止一种解决方案 正如本章前面所述,虽然这里给出的样例代码运行良好,但它并不是解决这种数据检索的最有效的方法。在后面的章节中我们还要遇到这个例子。

逐渐增加子查询来建立查询 用子查询测试和调试查询很有技巧性,特别是在这些语句的复杂性不断增加的情况下更是如此。用子查询建立(和测试)查询的最可靠的方法是逐渐进行,这与MySQL处理它们的方法非常相同。首先,建立和测试最内层的查询。然后,用硬编码数据建立和测试外层查询,并且仅在确认它正常后才嵌入子查询。这时,再次测试它。对于要增加的每个查询,重复这些步骤。这样做仅给构造查询增加了一点点时间,但节省了以后(找出查询为什么不正常)的大量时间,并且极大地提高了查询一开始就正常工作的可能性。

【相关推荐】

1.什么是mysql子查询?如何利用子查询进行过滤?

2.mysql中什么是联结和关系表?

3.为什么使用联结和如何创建联结

4.MySQL中WHERE子句重要性和如何联结多个表

以上就是mysql创建计算字段使用子查询教程的详细内容,更多请关注微课江湖其它相关文章!

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 分享下mysql各个主要版本之间的差异
  • MySQL essential版本和普通版本有什么区别?
  • redhat 5.4下安装MYSQL全过程
  • 如何用SQL命令查看Mysql数据库大小
  • 解析mysql中如何获得数据库的大小
  • 解析mysql修改为utf8后仍然有乱码的问题
  • 5个常用的MySQL数据库管理工具详细介绍
  • 解析在MySQL里创建外键时ERROR 1005的解决办法
  • 解析远程连接管理其他机器上的MYSQL数据库
  • mysql 精简过程(删除一些文件)

相关文章

  • 2017-05-11linux下mysql自动备份数据库与自动删除临时文件
  • 2017-05-11UCenter info: MySQL Query Error SQL:SELECT value FROM [Table]vars WHERE noteexists
  • 2018-12-05Oracle8i和Microsoft SQL Server比较
  • 2018-12-05pl/sql对采用数字格式的日期进行日期的转换
  • 2018-12-0521个优化MySQL的建议
  • 2018-12-05Mysql学习总结(17)MySQL数据库表设计优化_MySQL
  • 2017-05-11MySql事务无法回滚的原因有哪些
  • 2017-05-11如何恢复Mysql数据库的详细介绍
  • 2017-05-11Can’t open file:'[Table]mytable.MYI'
  • 2018-12-05Oracle 11g Release (11.1) 索引底层的数据结构

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • 一个简单的SQL 行列转换语句
    • 一段压缩MS SQLServer日志的语句
    • mysql基础:mysqld_safe 启动执行流程详解
    • mysql删除重复记录语句的方法
    • 实例详解Mysql中Join的应用
    • sqlserver数据库中的表、字段sql语句
    • Mysql中JDBC如何实现自动重连机制的实例
    • 深入理解MySQL进阶漂流记(二)
    • oracle 彻底删除方法
    • 介绍一个针对C++程序的MySQL访问库soci

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有