前言

之所以去纠那么细节的问题,是因为之前有过一个这样的场景:

有个同学,给了一条数据库的语句给我,问,为啥这样子的语句在oracle语句下执行不了。

  1. select * from xx where xxx is not null group by yy;

拿到这条语句的第一时间,其实,我也并没有看出是什么错。仔细一想之后才想起,在基础的SQL中包含该group by的select语句,select语句部分是有限制的,一般是聚合函数和group by 的字段。随后,我就告诉他,这条语句本身是有错的。

然而,我同学却反驳说,这条语句他在其他数据库中是能运行的。然后,就有了这篇博客

细说

为了询证,我询问了同学他说能运行的数据库是什么数据库。结果同学说是mysql。

如图所示,相同类型的语句,在oracle和mysql执行,一个是可以正常运行的,而在oracle上,却是没能通过语句的校验。为啥呢?

回过头看看,现在市场上的关系型数据库可谓不少,其实他们都在SQL语句的解析上,都遵循着SQL国际标准,只是各自遵循的严格程度不同而已,同时,各个数据库也在SQL标准上扩展开了,有了自己支持的特色的数据库语句,如mysql的limit。也就是这样,才有了上述情况。SQL标准中,其实在包含group by 的 select 语句能查询的数据是有限制的。Oracle比较严格的遵守了这一限制,而mysql 则并没有,这样才使得使用惯了mysql的朋友在刚开始的时候有这样的错觉,觉得明明正确的语句为啥就是执行不了。

思考

在标准这方面,要论对错,其实是没必要的。很多时候,标准制定出来,只是一种美好的期望而已。然而,作为技术,其实应该的更多的是回归本质,更多的了解原理,就不会因为某个工具并没严格要求的东西,养成不良的习惯。

此博文同步更新于 http://blog.e65535.com/2016/05/26/mysql-oracle-groupby/

mysql与oracle在groupby语句上的细节差异的更多相关文章

  1. Springboot2.0(Spring5.0)中个性化配置项目上的细节差异

    在一般的项目中,如果Spring Boot提供的Sping MVC不符合要求,则可以通过一个配置类(@Configuration)加上@EnableWebMvc注解来实现完全自己控制的MVC配置.但此 ...

  2. 【Mysql】MySQL与Oracle的大小写问题

    转载来源:http://aofengblog.blog.163.com/blog/static/63170212010101065030136/ MySQL与Oracle在大小写处理上的区别: 1MY ...

  3. 开发中mysql和oracle的区别

    首先就不描述mysql与oracle在整个数据库系统上的区别了,仅从程序员开发的角度来说: 1.主键: mysql一般会用到一个自增的属性,例如设置一个id字段,类型设置为auto increment ...

  4. MySQL与Oracle 差异比较之四条件循环语句

    循环语句 编号 类别 ORACLE MYSQL 注释 1 IF语句使用不同 IF iv_weekly_day = 'MON' THEN       ii_weekly_day := 'MON';ELS ...

  5. Linq Mysql GroupBy语句的问题处理

    语句如下: var resumeList = db.ChannelResume.Where(model); var groupValues = resumeList.GroupBy(t => n ...

  6. MySQL、Oracle和SQL Server的分页查询语句

    假设当前是第PageNo页,每页有PageSize条记录,现在分别用Mysql.Oracle和SQL Server分页查询student表. 1.Mysql的分页查询: SELECT * FROM s ...

  7. MySql类似Oracle的dual虚拟表

    在mysql里也存在和oracle里类似的dual虚拟表:官方声明纯粹是为了满足select ... from...这一习惯问题,mysql会忽略对该表的引用. 你可千万注意了: select * f ...

  8. MySQL与Oracle的主要区别

    Mysql与Oracle区别 1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高. 2. ...

  9. 数据库MySQL与Oracle的一些去O注意项

    一.oracle递归查询语句start with ...connect by prior ① 给你一张表,表里面有主键id,以及该项的父节点parent_id,查询出该表中所有的父子关系节点树? Or ...

随机推荐

  1. asp.net mvc部署

    GAC 目录: 在运行窗口中输入:C:\WINDOWS\assembly\GAC NET 2.0,3.0 GAC: c:\windows\assembly (32bit and 64bit?) .NE ...

  2. CPU 硬盘性能

    CPU 硬盘性能到底相差多少 本文以一个现代的.实际的个人电脑为对象,分析其中CPU(Intel Core 2 Duo 3.0GHz)以及各类子系统的运行速度——延迟和数据吞吐量.通过粗略的估算PC各 ...

  3. z-index 解析

    很多人对z-index的认识仅止于:z-index是控制元素在页面中的堆叠顺序,z-index值高的元素显示在z-index值低的前面.而其中的原因才很少有人去深究,直到自己在实际项目中碰到由于z-i ...

  4. c:forEach 实现换行

    Map<String,String> map = new TreeMap<String,String>(); map.put("key1", "v ...

  5. ASP.NET MVC2.0学习笔记:路由设置

    Route设置 在 <Professional in ASP.NET MVC2.0>一书的第四章,主要讲述了Route的简单设置.格式化设置.约束设置.区域路由.匹配文件.路由调试以及对R ...

  6. IL反编译的实用工具

    初识Ildasm.exe——IL反编译的实用工具   Ildasm.exe 概要: 一.前言: 微软的IL反编译实用程序——Ildasm.exe,可以对可执行文件(ex,经典的控制台Hello Wor ...

  7. Python之路2Day(基础深入)

    一,整数 1.int型 具有的功能: class int(object): (1).返回表示该数字的时占用的最少位数 def bit_length(self): 例: >>> bin ...

  8. 初识sql server 2000-数据库的连接

    这段时间主要进行学生信息管理系统的实现,所以与数据库打交道是难免的,我也是刚敲过5个数据库例子的小鸟,对数据库的理解还欠佳,不足之处大鸟飞过还请指点. 安装完sql server2000之后,首先要做 ...

  9. pipe----管道----fork

    #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h&g ...

  10. 横瓜先生关于如何利用MYSQL数据库设计CMS系统处理100亿级TB规模的数据量

    遥执乾坤(44758121)  18:21:23 mysql据说只能使用一个索引,我这里几乎所有字段都有索引. 但每个字段就算用索引,也需要扫描至少100w以上记录. 横瓜(601069289)  1 ...