zoukankan      html  css  js  c++  java
  • mysql概要(三)having

    1.运算符

    2.模糊查询(详解

    %:表示0个或多个任意字符

     _:表示一个任意字符

    SELECT * FROM user WHERE u_name LIKE '%三%'
    将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。

    3.where 后的判断基于表(表的直接内容),而不是基于结果(运算之后的别名)如:

    可改成在where后再次重新计算判断:

    或者使用having对结果判断:(默认每条记录是一组)

    having多用于group by 配合使用

    补充:

    select ··· from ···
    where ···(只能对分组前的属性进行筛选)
    group by ···
    having ···(只能对分组后的每个组的整体属性进行筛选,用聚合函数体现)
    ····
    --不使用group by就默认表的每条记录为一组

    4.一个实例

    插入多条记录

    insert into stu values('张三','数学',90),('张三','语文',50),('张三','地理',40),('张四','数学',90),('张四','数学',30),('张四','数学',20),('张无','数学',30);

    name course score

    a:第一个想法是分组之后求出所有平均成绩却求不出未及格科目数量。所以就先取出所有两门以上未及格的学生再求平均

    select avg(score),name from stu where name in(select name from stu where score<60 group by name having count(score) >=2) group by name;

    (一种不完善的错误想法:求出所有学生的平均分,然后将学生分组,再筛选出不及格是数量,然后再筛选数量大于2的

      select name,sum(score),count(*) as c,name from stu group by name having score<60 and c>=2;//错误的

      错误在于having score <60 ,分组后的结果没有了 score 这列。(语句的执行顺序)

    b:一种更好的方案是:先求出平均分,再mysql没有布尔型可以通过逻辑判断是否及格得到1或0;通过求和得到未及格的数量,再进行判断数量

    select name,avg(score),sum(score<60) as lowscore from stu group by name having lowscore>=2;
    关于执行顺序说明:
    group by 字句也和where条件语句结合在一起使用。当结合在一起时,where在前,group by 在后。即先对select xx from xx的记录集合用where进行筛选,然后再使用group by 对筛选后的结果进行分组 使用having字句对分组后的结果进行筛选
     
    需要注意having和where的用法区别:
    1.having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。
    2.where肯定在group by 之前
    3.where后的条件表达式里不允许使用聚合函数,而having可以。
     
    当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序是:
    1.执行where xx对全表数据做筛选,返回第1个结果集。
    2.针对第1个结果集使用group by分组,返回第2个结果集。
    3.针对第2个结果集中的每1组数据执行select xx,有几组就执行几次,返回第3个结果集。
    4.针对第3个结集执行having xx进行筛选,返回第4个结果集。
    5.针对第4个结果集排序。
  • 相关阅读:
    浅谈JavaScript中this指向的⼏种情况
    JavaScript、html简单的级联操作。
    异常处理中throws和throw的区别?
    java异常处理try-catch-finally的执行过程?
    什么是内连接、外连接、交叉连接(笛卡尔积)?
    主键和外键的区别
    集合和数组的比较(为什么要引入集合)?
    Java中对比单继承与多继承的优劣,以及java的解决方案
    数据库
    数据库集中控制的优势
  • 原文地址:https://www.cnblogs.com/straybirds/p/5128258.html
Copyright © 2011-2022 走看看