mysql对标准sql的扩展_mysql对标准sql的goup by进行了扩展
标准SQL语法中,对SELECT语句执行GROUP BY操作的话,SELECT选择的列必须出现在GROUP BY子句中,也就是说先要明确根据什么分组,然后才能选择分没分组。不过MySQL数据库不完全是这样,只要MySQL数据库不是运行在ANSI模式下(什么是运行模式,简单讲就是指支持
标准SQL语法中,对SELECT语句执行GROUP BY操作的话,SELECT选择的列必须出现在GROUP BY子句中,也就是说先要明确根据什么分组,然后才能选择分没分组。不过MySQL数据库不完全是这样,只要MySQL数据库不是运行在ANSI模式下(什么是运行模式,简单讲就是指支持的SQL语法,运行模式是在启动mysql服务时以--sql-mode设置,默认应为空,ANSI是一套通行的标准SQL语法体系),就可以简化GROUP BY操作时的选择列。
出现在GROUP BY子句,但没有出现在SELECT的选择列中,这我们可以理解对吧,不过如果是SELECT选择了列,但该列却并没有出现在GROUP BY子句中,这样的SQL能执行吗?MySQL中是可以的,举个例子:
mysql> create table j1 (id int,vl varchar(20));
Query OK, 0 rows affected (0.02 sec)
mysql> insert into j1 values (1,'a');
Query OK, 1 row affected (0.00 sec)
mysql> insert into j1 values (1,'b');
Query OK, 1 row affected (0.00 sec)
mysql> insert into j1 values (2,'c');
Query OK, 1 row affected (0.00 sec)
mysql> insert into j1 values (3,'d');
Query OK, 1 row affected (0.00 sec)
我们要按id分组,查询不同组的数量及其vl值,在mysql中会怎么写呢,看好了:
mysql> select vl,count(0) from j1 group by id;
+------+----------+
| vl | count(0) |
+------+----------+
| a | 2 |
| c | 1 |
| d | 1 |
+------+----------+
3 rows in set (0.00 sec)
标准SQL中,要查询vl列则vl必须在GROUP BY子句中,而MySQL数据库中,vl可被忽略,这种写法按照官方文档中的说法是为了提高性能,避免不必要的排序和分组。
但是,要注意了,在这种设定下,一定要明确自己想要的结果到底是什么,以及实际执行的SQL语句返回结果,是否符合自己的预期。
MySQL在执行这类查询语句时,它会默认理解为,没写到GROUP BY子句的列,其列值是唯一的,如果GROUP BY省略的列值其实并不唯一,那么最好不要使用这项功能,仍以前面的示例来说明,id为1的记录实际有两条,分别对应vl in('a','b'),但实际查询的结果集则只有a对应的数量,vl=b的记录量被忽略了,这种情况就不一定是我们想要的结果了,在实际应用时需要特别注意。
本文原创发布php中文网,转载请注明出处,感谢您的尊重!
mysql对标准sql的扩展_mysql对标准sql的goup by进行了扩展相关推荐
- mysql不具有的特征是_MySQL中的SQL特征(转)
MySQL中的SQL特征: 为了与MySQL服务器进行通信,必须熟练掌握SQL.例如,在使用诸如mysql客户机这样的程序时,其功能首先是作为一种发送SQL 语句给服务器执行的工具.而且,如果编写使用 ...
- mysql中sql插入时间_mysql中使用sql语句插入日期时间类型的写法
[例子如下: select * from ( select rownumber() over() as rownumber, id from associate ) as temp where row ...
- mysql sql 语句事务_MySQL: 3、SQL语言 ②约束、事务
一.SQL 约束 1.约束的作用: 对表中的数据进行进一步的限制,从而保证数据的正确性.有效性.完整性.违反约束的不正确数据将无法插入到表中 2.常见的约束: 3.主键约束: -- 特点: 不可重复. ...
- mysql oracle sql区别吗_mysql数据库的SQL语句和oracle的有什么区别?详细点
匿名用户 1级 2017-08-20 回答 区别如下: 1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Or ...
- centos写mysql光标移到上一行_mysql:一条SQL更新语句(update)是如何执行的
一条更新语句的执行流程又是怎样的呢? 之前你可能经常听DBA同事说,MySQL可以恢复到半个月内任意一秒的状态,惊叹的同时,你是不是心中也会不免会好奇,这是怎样做到的呢? 我们还是从一个表的一条更新语 ...
- mysql 查询一个月的时间_mysql日期查询sql语句总结(查询一天,查询一周,查询一个月的数据)...
我的日期 首先我们获取到的日期格式是这样的:2009-2-12或者2009-3-3或者2009-10-12,我们在组合sql语句的时候可以这样:(分了三个例子) 代码如下 @1select * fro ...
- mysql怎么添加查询时间限制_mysql如何限制sql查询时间,
mysql如何限制sql查询时间MySQL如何限制结构化查询语言查询时间,关系型数据库限制结构化查询语言查询时间的方法:1.查询今天,代码为[选择*表名where to_days(时间字段名)=to ...
- mysql日期sql语句大全_mysql日期查找sql语句大全
经常会遇到这样的情况,本月阅读排行榜,本周排行榜等等.那么这样的sql怎么写呢,小班收集了一些这样的时间函数给大家参考,希望大家在自己网站项目中可以用的到 在mysql中对时间日期操作的函数有很多,有 ...
- mysql 修改字段长度 合并语句_mysql中利用sql语句修改字段名称,字段长度等操作...
1.修改字段的长度 语法: ALTER TABLE 表名 MODIFY COLUMN 字段名 数据类型(修改后的长度) 例子: 将字段的长度由10改为20 ALTER TABLE attence M ...
最新文章
- [Luogu 1196] NOI2002 银河英雄传说
- 中国大学单身 (民间)排行榜!你上榜了没
- 能在微软的网站找到IeWebcontrols的安装文件吗
- MonoRail学习笔记十一:页面控件的填充和验证
- 数据库加一列,cursor:pointer
- C# 海康DVR客户端开发系列(3)—— 连接DVR和图像预览
- skywalking调研相关资料整理
- bbs.php168,PHP168 下载安装教程
- 科研_今天,我们怎么做科研?
- 安装,激活(不更新升级)Navicat premium12.0.24(12.0.18)
- 电脑蓝牙打电话-总结(篇外、虚拟声卡选型)
- Android蓝牙完全学习手册
- 自定义UI控件:弹出键盘添加“完了”按钮
- 用Python爬取京东手机评论
- [论文] Feature Squeezing:Detecting Adversarial Examples in Deep Neural Networks
- 5月27日股市趋势追踪策略分析
- 个人公众号如何运营?可以从哪些方向突破?
- 鸿蒙系统一直重启怎么办,我的电脑能开机随后就是进不了系统一直黑在那边,时间长了就自动重启...
- 2021-08-05,虾皮API,seller_info - 获得shopee店铺详情
- OpenCV基础(7)OpenCV中的颜色空间
热门文章
- 华为ensp模拟器配置无线网络
- 【OA办公】OA流程审批大揭秘,带你看遍所有基础流程
- 360路由器远程连接服务器,“怎样用动态域名实现路由器的远程配置”的解决方案...
- 在线图片转成html,在线将JPEG 转换成HTML。 免费将.jpeg 转换成.html。
- 热烈庆祝龙智高级咨询顾问叶燕秀获得“Atlassian认证专家”称号
- Installing, this may take a few minutes... WslRegisterDistribution failed with error: 0x8007019e
- 冲压模具设计及制造概述,值得了解学习
- 高等代数_第5章:矩阵的相抵与相似
- 敏感性、特异性(sensitivity and specificity)| 假阳性、假阴性 | FDR | 第一类错误、第二类错误 | ROC | AUC...
- 配色软件 ColorKey Xp