mysql中将某个字段做计算,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;
输出:
分析:这 条 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;
输出:
分析:显然,返回的结果不正确(请比较前面的结果),那么,为什么会这样呢?有两个 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中将某个字段做计算,mysql创建计算字段使用子查询教程相关推荐
- mysql中将列动态转换为行,mysql 行转列 MySQL数据库动态行转列
想把mysql一个表的行转成列,图1是原表,想实现图2的样式SELECT MAX(CAS就是一个动态的行列转换 CREATE TABLE `c_wssb_zz` ( `aa011` varchar(1 ...
- mysql创建视图不允许子查询
不知道为什么mysql创建视图的时候,不允许包含子查询. 解决方式为,把子查询作成一个视图,然后再在想要创建的试图中,把这个视图作为一个表去写. 具体可参考: http://blog.csdn.net ...
- mysql视图子查询_mysql创建视图不能包涵子查询的解决办法。View's SELECT contains a subquery in the FROM clause...
如下查询是没问题,但要创建成视图就报View's SELECT contains a subquery in the FROM clause错误. CREATE or REPLACE VIEW `v_ ...
- mysql数据库表子查询语句_MySQL使用子查询教程
#MYSQL#这是我MyySQL教程的第四篇了,可能对于一些大神来说这些都是小儿科,但是我还是相信这些东西会对一些人有帮助的,本篇主要会介绍上面是子查询以及如何使用它们.大概会从,什么是子查询,利用子 ...
- MySQL使用IN、EXISTS、ANY、ALL关键字的子查询
子查询是SELECT查询的另一个查询的附属,MySQL 4.1可以嵌套多个查询,在外面一层的查询中使用里面一层查询产生的结果集.这样就不是执行两个(或者多个)独立的查询,而是执行包含一个(或者多个)子 ...
- mysql用if判断关联的表_mysql表连接,子查询以及if判断
创建表: CREATE TABLE emp ( ename varchar(10) DEFAULT NULL, hiredate date DEFAULT NULL, sal decimal(10,2 ...
- mysql 监控语句_做一个mysql监控系统应该掌握的一些基本语句
很多系统需要一个MYSQL的监控,查看MYSQL的一些变量配置,吞吐量,连接数,QPS, TPS,慢查询等.当然有一些开源的工具可以满足这些需求,如果是要自己做呢.下面归纳了一些常用监控的SQL语句, ...
- docker mysql 蜂巢_在网易蜂巢中创建和管理Docker容器的教程
创建容器点击左侧的导航菜单「容器管理」,进入容器管理列表页,通过点击容器列表左上角的「创建容器」按钮可进入创建容器页面,如下图所示: 其中带 * 为必填项. 选择镜像可选择的镜像分为「我的镜像」和「官 ...
- Web程序员的Mysql进阶序三之sql多表数据删除、子查询、联合查询
假设表结构如下: create table test(name varchar(10),sex varchar(10) ); create table test1(name varchar(10),s ...
最新文章
- 机器学习入门一定要避开的3个陷阱
- ML之DTRFRExtraTRGBR:基于四种算法(DT、RFR、ExtraTR、GBR)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自性能
- 使用JMH做Java微基准测试
- android IPC及原理简介
- ios-deploy out of date (1.9.4 is required). To upgrade with Brew: brew upgrade ios-deploy
- 蒙特卡洛树搜索算法(UCT): 一个程序猿进化的故事
- word转PDF(使用liberOffice插件)
- 智能优化算法:萤火虫算法-附代码
- 如何学习硬件设计——理论篇
- python图像纹理提取_python 实现 gabor 滤波器提取纹理特征 提取指静脉纹理特征 指静脉切割代码...
- baidu 地图 3d版 自定义地图样式
- 恢复视力的方法(飞行员都用)治近视的秘方!1000度近视降到只有200
- 移动端环境搭建--2
- 36周岁这年,我终于知道该怎么活了!
- SQL注入漏洞测试(参数加密)
- C语言中带负数的除法
- 牛客网SQL 进阶篇刷题
- Android Okio应用及解析
- 视频教程-快速入门Python基础教程_Python基础知识大全-Python
- 数据跨域交换成刚需 志翔科技助力企业数据安全合规
热门文章
- android 弹窗in,Android监听程序处于INACTIVITY(未操作状态)时间并作出相应的操作
- 织梦dedecms的框架的Webshell
- vulhub安装教程
- 西北大学计算机转专业,西北大学可以转专业吗,西北大学新生转专业政策
- 太古鸿蒙诀正式版v1.07,百变队长安崎:台上小辣椒,台下情歌王
- 模态对话框和全选反选
- Two.js – 为现代浏览器而生的 2D 绘图 API
- [贝聊科技]网页端「应用跳转」技术实现演变
- 写博客的这几个月,获益良多
- node.js中exports与module.exports的区别分析