• SQL-GROUP BY语句在MySQL中的一个错误使用被兼容的情况


    首先创建数据库hncu,建立stud表格。
    添加数据:

    create table stud(
    sno varchar(30) not null primary key,
    sname varchar(30) not null,
    age int,
    saddress varchar(30)
    );
    INSERT INTO stud VALUES('1001','Tom',22,'湖南益阳');
    INSERT INTO stud VALUES('1002','Jack',23,'益阳');
    INSERT INTO stud VALUES('1003','李白',22,'益阳');
    INSERT INTO stud VALUES('1004','王五',24,'中国北京');
    INSERT INTO stud VALUES('1005','张三',22,'益阳');
    INSERT INTO stud VALUES('1006','张四',23,'益阳');
    INSERT INTO stud VALUES('1007','李四',22,'湖南益阳');
    INSERT INTO stud VALUES('1008','刘备',24,'北京');
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14


    执行语句如下:

    SELECT * FROM stud GROUP BY saddress;
    1
    显示了如下错误:

    ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'hncu.stud.sno' which is not functionally dependent
    on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
    1
    2


    再执行此句:

    SELECT saddress as 平均年龄 FROM stud GROUP BY saddress;
    1
    -没有问题


    然后我们用MySQL,再执行前面那句错误的代码:
    也就是:

    SELECT * FROM stud GROUP BY saddress;
    1
    我们看结果:


    顺利的通过了,但是,你发现没有,前面的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才是可以变的。即

    以下语句都是正确的:

    select a,b,c from table_name group by a,b,c,d;
    select a,b from table_name group by a,b,c;
    select a,max(a) from table_name group by a,b,c;
    1
    2
    3
    以下语句则是错误的:

    select a,b,c from table_name group by a,b;
    select a,b,c from table_name group by a;
    1
    2
    而因为MySQL的强大,它兼容了这个错误!!!
    但是在DOS是不能的。所以出现了DOS下报错,而在MySQL中能够查找的情况(其实这个查找的结果是不对的)。
    ---------------------
    作者:谙忆
    来源:CSDN
    原文:https://blog.csdn.net/qq_26525215/article/details/52139296
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    带编译器的codeblocks下载地址
    联想拯救者s15k重装w10系统教程
    w10下Oracle 11g完全干净卸载
    小机房的树(codevs 2370)
    NOIP[2015] 运输计划(codevs 4632)
    ⑨要写信(codevs 1697)
    酒厂选址(codevs 1507)
    美丽的大树(codevs 2124)
    乘法运算(codevs 3254)
    货车运输(codevs 3287)
  • 原文地址:https://www.cnblogs.com/gongxianjin/p/10457532.html
Copyright © 2020-2023  润新知