SQL高级查询

  • SQL高级查询

    1.总结
        3.select…聚合函数 from 表名
        1.where…
        2.group by…
        4.having…
        5.order by…
        6.limit …;
    2.order by :给查询结果进行排序
        1.order by 字段名 ASC/DESC
        2.ASC(默认):升序
          DESC:降序
    练习
        1.将所有英雄防御值按从高到低排序
            select * from sanguo order by fangyu DESC;
        2.将蜀国英雄按攻击力从高到低排序
        select * from sanguo where country=’蜀国’ order by gongji DESC;
        3.将魏蜀两国英雄中名字为3个字的,按防御值升序排列
        select * from sanguo where country in(‘蜀国’,’魏国’) and name like “___” order by fangyu;

        select * from sanguo where 
        (country=’蜀国’ or country = ‘魏国’) and name like “___” order by fangyu;
    3.limit(永远放在SQL命令的最后写) 
        1.显示查询记录的条数
        2.用法
            limit n;—–>显示 n 条 记录
            limit m,n; —–>从第 m+1 条记录开始,显示n条
            limit 2,3; —–>显示第3,4,5条记录
        3.练习
            1.在蜀国英雄中查找防御值倒数第二名到倒数第四名的英雄的姓名,防御值,和国家

            select name,fangyu,country from sanguo 
            where country = ‘蜀国’  
            order by fangyu ASC
            limit 1,3;  
            2.在所有蜀国英雄中,查找攻击力
            select name,gongji,country from sanguo 
            where name is not NULL and country = ‘蜀国’
            order by gongji DESC
            limit 0,3;
        4.分页
            每页显示5条记录,显示第4页的内容
            每页显示n条记录,显示第m页的内容

            limit 15,5
            第一页:limit (1-1)*5,5 #1 2 3 4 5 
            第二页:limit (2-1)*5,5 #6 7 8 9 10
            第三页:limit (3-1)*5,5#11 12 13 14 15
            …
            第 m页: limit(m-1)*n,n
    4.聚合函数
        1.分类
            avg(字段名):求该字段的平均值
            sum(字段名):求和
            max(字段名):最大值
            min(字段名):最小值
            count(字段名):统计该字段记录的个数
        2.练习:
            1.所用英雄中攻击力最大值
                select max(gongji) from sanguo;
            2.统计 id,name两个字段分别有多少条记录
                select count(id),count(name) from sanguo;
    5.group by
        给查询的结果进行分组
        1.查询三国表中都有哪些国家
            select country,from sanguo group by country;
        
        2.计算每个国家的平均攻击力
            select country,avg(gongji) from sanguo
            group by country;
        3.注意:
            1.select之后的字段名如果没有在group by之后出现,则必须要对该字段进行聚合处理(聚合函数)
        4.查找所有国家中英雄数量最多的前2名的国家名称和英雄数量
            select country,count(id) from sanguo
            group by country
            order by count(id) Desc
            limit 0,2;
    6.having语句
        1.作用:
            对查询的结果进行进一步的筛选
        2.练习:
            1.找出平均攻击力大于105国家的前两名,显示国家名和平均攻击力
                1.算出每一个国家的平均攻击力
                    select country,avg(gongji) as average from sanguo
                    group by country
                    having average>105
                    order by average DESC
                    limit 2;
                2.找到平均攻击力大于105

            select name,avg(gongji) 

        3.注意:
            1.having 语句通常和group by语句联合使用,过滤由group by语句返回的记录集
            2.where 只能操作表中实际存在字段,having语句可操作由聚合函数生成的显示示列
 

    原文作者:SQL
    原文地址: https://blog.csdn.net/zhangshuaijun123/article/details/82225455
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞