zoukankan      html  css  js  c++  java
  • SQL基础总结-02

    1、having

    select … from … where … group by … having … order by … limit …;
                  过滤(条件) 分组      过滤(条件)  排序       限定个数
    -- 上述语句执行顺序,先 from -> where -> group by -> select -> having -> order by -> limit
    
    id Name clid
    1 A 1
    2 B 1
    3 C 2
    4 D 2
    5 E 1

    having:过滤作用, group by之后的过滤

    select * from stu where 1=1 group by clid; -- where 1=1,因为1=1为真,且这只是个表达式,更没写一样,正常执行
    

    结果显示:

    id Name clid
    1 A 1
    3 C 2

    如果还想对这张表进行过滤,就用having;

    以第一张表为例:要查询每个班中人数大于2个的班级号是什么?

    先看下面这句话:

    select count(1),Name,clid as n from stu group by clid;
    

    结果:

    n Name clid
    3 A 1
    2 C 2
    select count(1),Name,clid as n from stu group by clid having n>2; -- 因为having的执行在select之后,所以这句话相当于是从上面的表筛选n>2的;
    

    结果:

    n Name clid
    3 A 1

    这样就能解答提出的问题了:

    -- 一般题目里包含每个班级,就要用到group by; as:取别名;人数及每条语句出现的次数可用count(1)计算
    select count(1),clid as n from stu group by clid having n>2;
    

    结果:

    n clid
    3 1

    班级号为1

    这条语句还能优化:

    select clid as n from stu where count(1)>2 group by clid; -- 注意where count(1)>2 不符合本题题意,因为我们要判断哪个班级的人数多少,所以先要区分出哪些班级,where比group by先执行,还没分组就用count(1),等价于给整张表计算有多少条记录,结果就是5,5>2恒成立,where还不如不写。
    

    完美答案:

    select clid from stu group by clid having count(1)>2; -- having执行顺序在group by后面;最终结果表示:班级号为1的人数大于2
    
    clid
    1

    2、order by

    去看上一个笔记有详解

    3、limlit

    1. limit 用来获取一张表中的某些数据
    2. limit 只有 在Mysql 数据库中存在 不通用 , 如其他类型的数据库要使用此功能请自行百度
    3. limit 出现在sql语句的最后一个
    
    3.案例:找出前五条记录
    // 两条查询语句结果一样,开始标0 可以省略
    mysql> select ename from emp limit 0,5;
    mysql> select ename from emp limit 5;
    +--------+
    | ename  |
    +--------+
    | SIMITH |
    | ALLEN  |
    | WARD   |
    | JONES  |
    | MARTIN |
    +--------+
    5 rows in set (0.00 sec)
    
    4.案例:按照工资降序排列,只取前五个
    mysql> select ename, sal from emp order by sal desc limit 5;
    +-------+------+
    | ename | sal  |
    +-------+------+
    | KING  | 5000 |
    | FORD  | 3000 |
    | SCOTT | 3000 |
    | JONES | 2975 |
    | BLAKE | 2850 |
    +-------+------+
    5. 工资按照降序 查询出3到9的工资   索引是0开始的
    mysql> select ename, sal from emp order by sal desc limit 2,7;
    +--------+------+
    | ename  | sal  |
    +--------+------+
    | SCOTT  | 3000 |
    | JONES  | 2975 |
    | BLAKE  | 2850 |
    | CLARK  | 2450 |
    | ALLEN  | 1600 |
    | TURNER | 1500 |
    | MILLER | 1300 |
    +--------+------+
    7 rows in set (0.00 sec)
    
  • 相关阅读:
    Ruby自学笔记(二)— Ruby的一些基础知识
    Ruby自学笔记(一)— 基本概况
    Tomcat基础教程(四)
    Excel导入
    构建API
    序列化
    图片上传(练习)
    发邮件
    发短信
    Excel表导出
  • 原文地址:https://www.cnblogs.com/IronMind/p/13410376.html
Copyright © 2011-2022 走看看