Mysql中错误使用SQL语句Groupby被兼容的问题分析
这篇文章给大家分享的是有关Mysql中错误使用SQL语句Groupby被兼容的问题分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
首先创建数据库hncu,建立stud表格。
添加数据:
createtablestud(snovarchar(30)notnullprimarykey,snamevarchar(30)notnull,ageint,saddressvarchar(30));INSERTINTOstudVALUES('1001','Tom',22,'湖南益阳');INSERTINTOstudVALUES('1002','Jack',23,'益阳');INSERTINTOstudVALUES('1003','李白',22,'益阳');INSERTINTOstudVALUES('1004','王五',24,'中国北京');INSERTINTOstudVALUES('1005','张三',22,'益阳');INSERTINTOstudVALUES('1006','张四',23,'益阳');INSERTINTOstudVALUES('1007','李四',22,'湖南益阳');INSERTINTOstudVALUES('1008','刘备',24,'北京');
执行语句如下:
<喎�"/kf/ware/vc/"target="_blank"class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:sql;">SELECT*FROMstudGROUPBYsaddress;
显示了如下错误:
ERROR1055(42000):Expression#1ofSELECTlistisnotinGROUPBYclauseandcontainsnonaggregatedcolumn'hncu.stud.sno'whichisnotfunctionallydependentoncolumnsinGROUPBYclause;thisisincompatiblewithsql_mode=only_full_group_by
再执行此句:
SELECTsaddressas平均年龄FROMstudGROUPBYsaddress;
-没有问题
然后我们用MySQL,再执行前面那句错误的代码:
也就是:
SELECT*FROMstudGROUPBYsaddress;
我们看结果:
顺利的通过了,但是,你发现没有,前面的smo,sname,age,这3列的数据不对啊,没错,MySQL强行显示第一次查找到的saddress不同的行了!!!其实这个结果是不对,但是MySQL应该是兼容了这个错误!
而DOS却是严格按照SQL的语法来的。
SQL的grop by 语法为,select 选取分组中的列+聚合函数 from 表名称 group by 分组的列
从语法格式来看,是先有分组,再确定检索的列,检索的列只能在参加分组的列中选。
所以问题中的,group by 后的 a,b,c是先确定的。select后的a,b,c才是可以变的。即
以下语句都是正确的:
selecta,b,cfromtable_namegroupbya,b,c,d;selecta,bfromtable_namegroupbya,b,c;selecta,max(a)fromtable_namegroupbya,b,c;
以下语句则是错误的:
selecta,b,cfromtable_namegroupbya,b;selecta,b,cfromtable_namegroupbya;
而因为MySQL的强大,它兼容了这个错误!!!
但是在DOS是不能的。所以出现了DOS下报错,而在MySQL中能够查找的情况(其实这个查找的结果是不对的)。
感谢各位的阅读!关于“Mysql中错误使用SQL语句Groupby被兼容的问题分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。