• mysql查询语句


    在mysql数据库中,主要包括的字句有select子句、from子句、where子句、group by子句、order by子句、having子句。当数据库管理系统执行一条SQL语句时,以上的子句执行顺序为1、执行from子句,将from子句中的表作为中间表;2、如果有where子句,则根据其中的过滤条件,从中间表中去掉不满足过滤条件的行;3、根据group by子句中指定的分组列,对中间表中的数据进行分组;4、为每个组计算select子句聚合函数的值,并为每组生成查询结果中的一行;5、如果有having子句,则根据having子句的过滤条件,分组计算聚合计算的结果再次过滤;6、如果有order by子句,则根据order by子句中的列,对结果进行排序。在上面所学的6个语句中,where和having都是过滤条件,但可以看到,他们有执行时间的先后不同,同时还有having是对聚合计算的结果再次过滤,而where则是对原数据表进行过滤。
    当我们在一个表中使用查询语句,往往会有各种各样的条件。比如,已知有emp员工表,要“查询表中每个部门(depno)中工资(sal)最高的人的信息”。那么我们可以写select * from emp where (sal,depno) in (select max(sal),depno from emp group by depno)。这整句话就是一个子查询的例子,外面的select语句是要查询的内容,里面的select语句是所要求的条件。这里是使用where条件先执行,我们再来看一个例子要“查询比20部门人数多得部门",SQL语句为select deptno from emp group by deptno having count(*) >(select count(*) from emp where deptno=20); 这里我们为什么用having而不用where呢,是因为有一个执行的顺序问题,where作为过滤条件要先于分组group by执行,但聚合函数count(*)要后于group by执行,这显然就发生了矛盾,而having的出现就完美地解决了这个问题。

  • 相关阅读:
    codevs-1205
    codevs-1204
    C++STL 求和:accumulate 【转】
    map映照容器
    set集合容器
    HDOJ-1263
    HDOJ-1004(map)
    紫书 例题 10-12 UVa 1637(概率计算)
    紫书 例题 10-11 UVa 11181(概率计算)
    紫书 例题 10-10 UVa 10491(概率计算)
  • 原文地址:https://www.cnblogs.com/quanby/p/5480571.html
Copyright © 2020-2023  润新知