首页 > 数据库 >Mysql单表普通查询(新手推荐)

Mysql单表普通查询(新手推荐)

时间:2024-05-28 09:04:11浏览次数:27  
标签:聚合 country 查询 单表 Mysql 新手 where having group

大家在学校里学mysql查询的时候,尤其是遇到比较复杂查询的时候,
不知道有没有经常遇到问题。小编在学习mysql的时候,经常哪个怎么搞,
得出的值也老是不对,今天在这里分享一些原理性的东西,帮助大家理解如何去查询

基础

   	3、select ...聚合函数 from 表名
    1、where ...
    2、group by ...
    4、having ...
    5、order by ...
    6、limit ...;

/*
	解析:
		1. 首先这个按照列来看,分为两列
		2. 第二列是mysql的书写顺序
		3. 而第一列是它的运行顺序[这个非常重要]
		4. 如果没有全用,应该都懂吧,用了的那几个按这个排序
		
		只有知道了它的运行顺序才能解决比较复杂的查询问题
		实际上这也能说明 聚合函数和having的使用,大家在学的时候有没有想过
		为何where后面为啥不能直接对聚合函数进行筛选,但可以看到where是第一时间
		执行的,而聚合函数是第三执行的,所以where不能对聚合函数筛选
*/

  • 聚合函数

avg(字段名)
max(字段名)
min(字段名)
sum(字段名)
count(字段名)
》这里大家看英文应该也能知道意思吧,按照前面顺序放即可

  • group by

含义:给查询结果分组

  • having语句

含义:对聚合函数进行筛选

这些基础语句包括像select语句等等就不详细概述了,直接上手题目吧,以下案例,建议先自己尝试去做

  • limit

限制查询结果的行数

实际案例

  • 数据准备
CREATE TABLE `sg` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(8) DEFAULT NULL,
  `attack` int(11) DEFAULT NULL,
  `defense` int(11) DEFAULT NULL,
  `gender` char(1) DEFAULT NULL,
  `country` varchar(8) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8

INSERT INTO sg VALUES
    (1,"诸葛亮",99,90,"男","蜀国"),
    (2,"司马懿",98,97,"男","魏国"),
    (3,"貂蝉",69,100,"女","东汉"),
    (4,"张飞",105,20,"男","蜀国"),
    (5,"赵云",130,103,"男","蜀国");

# 我叫它三国表,数据就给大家了,请跟着一起做
  1. 所有国家的男英雄中 英雄数量最多的前2名的 国家名称及英雄数量
这里建议大家先做一遍,这道题目会的话,至少普通查询知识层面还算扎实

分析:  
    1. 从哪里入手,就从运行顺序入手,上面那个运行顺序一定是要背的
    2.首先第一运行的是where,题目中无疑男英雄就是条件 where gender="男"
    3.之后就是分组,读题可以发现它要每个国家的男英雄数量,所以以国家进行分组 group by = "country" as number 这里取个别名
    4.然后是查询,查国家和数量 ,数量这个肯定是聚合函数计算 select country,count(id) from sg
    5.英雄数量的前两名,这肯定需要排序(从大到小) order by(number)
    6.然后就是前两名,limit 2

总结:合起来就是筛选出男英雄后,然后根据国家分组,然后匹配查询表中的国家和数量,然后进行排序,然后取前两名英雄量最多的国家

可以发现,小编无论是分析还是总结写代码,都是按照运行顺序来写的,那个非常重要,当然这里还是需要熟悉语句的定义

select country, count(id) as number
     from sg 
     where gender='男' group by country
     order by number DESC
     limit 2 
  1. 找出平均攻击力大于105 的国家的前2名,显示国家名称和平均攻击力

小伙伴们尝试一下吧

# 答案放这里了,看起来比较乱,为防止你一眼就
# 记得答案了,尝试一下自己做,经历一次痛苦的思考才能理解它

select country ,avg(attack) from sg   group by country having avg(attack)>105 order by avg(attack) DESC limit 2;

补充

having语句通常与group by联合使用
having语句存在弥补了where关键字不能与聚合函数联合使用的不足,where只能操作表中实际存在的字段,
having操作的是聚合函数生成的显示列
本章就到这里,如果能理解上面,并且能做出上面案例,单表的普通查询 恭喜你,成为和我一样有一点小经验的小白了。

标签:聚合,country,查询,单表,Mysql,新手,where,having,group
From: https://blog.csdn.net/weixin_74441029/article/details/139250272

相关文章

  • MySQL中如何快速定位占用CPU过高的SQL
    作为DBA工作中都会遇到过数据库服务器CPU飙升的场景,我们该如何快速定位问题?又该如何快速找到具体是哪个SQL引发的CPU异常呢?下面我们说两个方法。聊聊MySQL中如何快速定位占用CPU过高的SQL。技术人人都可以磨炼,但处理问题的思路和角度各有不同,希望这篇文章可以抛砖引玉。 以一......
  • mysql存储地理信息的方法
    MySQL存储地理信息通常使用GEOMETRY数据类型或其子类型(如POINT,LINESTRING,POLYGON等)。为了支持这些数据类型,MySQL提供了SPATIAL索引,这允许我们执行高效的地理空间查询。1.创建支持地理信息的表首先,我们需要一个包含GEOMETRY或其子类型列的表。以下是一个示例,展示......
  • 数据库初始,SQL语句介绍,MySQL数据库安装,SQL语句基础,操作MySQL数据库
    Ⅰ数据库初识【一】存储数据的演变过程【1】文件基于内存保存在早期,随意地存放到一个文件中、数据格式也是千差万别的,完全取决于个人员工管理系统是基于列表或字典(内存)存储数据【2】文件操作用本地的文本文件存储数据有的人喜欢存储到本地的一个文件中有的人喜欢存......
  • 成为MySQL DBA后,再看ORACLE数据库(二、监听与连接)
    一、监听器的启动ORACLE启动完成后,可以通过sqlplus/assysdba连接数据库,但是这个只是本地连接,无法通过tcp/ip远程访问数据库,这时候就要启动ORAClE的监听器。启动监听器的命令是lsnrctlstart,启动成功后,可以观察到1521端口也随之监听,这时候就能通过ip加端口远程访问数据库了。在......
  • mysql 8.0.18的docker安装
    1.拉取镜像sudodockerpullmysql:8.0.182.运行dockersudodockerrun-p3306:3306--namemysql--restart=always--privileged=true\-v/home/cy/soft/mysql/conf/mysql/log:/var/log/mysql\-v/home/cy/soft/mysql/data:/var/lib/mysql\-v/home/cy/soft/mysql/conf/......
  • MySQL 数据库-JDBC
    1.事务事务(Transaction):要么都成功,要么都失败事务原则:ACID原则(原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability))原子性:要么都成功,要么都失败一致性:事务前后的数据完整性要保证一致(如,转账操作后,两个人的总额不变)持久性:事务一旦提交不可逆,被持久化到了......
  • 无法连接阿里云服务器本地mysql问题
    1.登录服务器,进入本地mysql数据库,修改root账号访问权限为:%,表示所有IP都可以连接usemysql;updateusersethost="%"whereuser="root";//刷新权限FLUSHPRIVILEGES; 2. 查看是否修改成功:selectuser,host,pluginfrommysql.user; 3.修改 bind-address......
  • ubuntu安装mysql
    ubuntu安装mysql更新软件包列表sudoaptupdate安装mysql服务器sudoaptinstallmsyql-server启动并检查mysql服务sudosystemctlstartmysqlsudosystemctlstatusmysql无密码登录mysqlsudomysql-uroot给root创建密码如果是mysql5.0版本,使用alteruser'root'......
  • 升鲜宝供应链管理系统重构版发布(技术点:Java8、mysql8.0 uniapp、vue、android、web 框
    升鲜宝供应链管理系统重构版发布(技术点:Java8、mysql8.0uniapp、vue、android、web框架:Vue3+SpringBoot3),界面功能(一)  升鲜宝供应链管理系统重构版发布(技术点:Java8、mysql8.0uniapp、vue、android、web框架:Vue3+SpringBoot3),界面功能(一) 1.登录与申请试用界......
  • MySQL函数查询目录树问题记录
    DELIMITER//CREATEFUNCTION`getChildXzqhList`(rootIdBIGINT)RETURNSVARCHAR(4000)BEGINSETSESSIONgroup_concat_max_len=1000000;--设置为1MB设置GROUP_CONCAT函数输出的最大长度大小,太小的话整体会被截掉RETURN(WITH......