zoukankan      html  css  js  c++  java
  • [转载]查询之order by,group by和having的使用(三)

    六、例子

    1> select * from bank_info
    2> go
     bankno acctround
     ------ ---------
     123456 1        
     123456 2        


     

    (2 rows affected)
    1> select * from bank_info where acctround='1' group by bankno order by bankno
    2> go
     bankno acctround
     ------ ---------
     123456 1        
     123456 2        


     

    (2 rows affected)
    1> select * from bank_info where acctround='1' order by bankno
    2> go
     bankno acctround
     ------ ---------
     123456 1        


     

    (1 row affected)
    1> select * from bank_info
    2> go
     bankno acctround
     ------ ---------
     123456 1        
     123456 2        

    (2 rows affected)
    1> select * from bank_info where acctround='1' group by bankno,acctround order by bankno
    2> go
     bankno acctround
     ------ ---------
     123456 1        


    (1 row affected)

    group by bankno,acctround
    的意思是找出bankno,acctround两列完全相同的不同行作为一组.那上面的数据就分成两组了,因为acctround不同,而结果需要acctround='1'的组.所以只有一行结果.如果是group by bankno,那么两行会合成一行.它并没有先通过where分析出只有一行符合结果集,group就只有一行结果了.这里的问题是wheregroup谁先谁后分析的问题?在这个问题的上下文中,本来的group by bankno就没有任何意义.其实是这样的:

    或者是:

    select bankno,sum(money) from bankdiff group by bankno;

    又或者是:

    select bankno,acctround,sum(money) from bankdiff where acctround='1' group by bankno,acctround;

    不可能指定acctround又不把它放在groub by中的.

    1> select * from bank_info group by bankno
    2> go
     bankno acctround
     ------ ---------
     123456 1        
     123456 2

    可见这个group by没有意义.因为它有select *,而acctround不一样,就不能只显示一行出来.把select *改成select bankno就只有一行结果了.

  • 相关阅读:
    Number Two
    蝴蝶结
    webug3.0靶场渗透基础Day_1
    SQL SERVER2014的安装
    SQLILABS学习笔记(一)
    关于暴力破解的一些学习笔记(pikachu)
    sql注入学习笔记
    CSRF与平行越权的区别
    任意文件下载(pikachu)
    XSS跨站脚本攻击学习笔记(pikachu)
  • 原文地址:https://www.cnblogs.com/liuzhuqing/p/7480911.html
Copyright © 2011-2022 走看看