爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      MariaDB 单表查询与聚合查询

      首页 知识中心 其他 文章详情页

      MariaDB 单表查询与聚合查询

      2024-11-20 09:47:05 阅读次数:449

      MariaDB,SQL

      数据库管理系统的一个最重要的功能就是数据查询,数据查询不应只是简单查询数据库中存储的数据,还应该根据需要对数据进行筛选,以及确定数据以什么样的格式显示.MySQL提供了功能强大、灵活的语句来实现这些操作,下面将介绍如何使用SELECT语句查询数据表中的一列或多列数据、使用集合函数显示查询结果.

      查询语句简介

      首先,MySQL从数据表中查询数据的基本语句为SELECT语句,SELECT语句的基本格式如下:

      MariaDB [none]> SELECT [predicate]
      
      	{ * | table.* | [table.]field1 [AS alias1] [,[table.]field2 [AS alias2] [,...]]}
      
      	FROM tableexpression [,...] [IN externaldatabase]
      		[WHERE...]
      		[GROUP BY...]
      		[HAVING...]
      		[ORDER BY...]
      		[WITH OWNERACCESS OPTION]
      

      SELECT语句的可选参数比较多,对于一般的运维工作,大路边上的就足够了,接下来我们将从最简单的查询语句开始一步步深入学习各种语句的灵活运用,在开始之前请创建以下表结构,方便后期的查询练习.

      MariaDB [none]> create database lyshark;
      MariaDB [lyshark]> use lyshark;
      MariaDB [lyshark]> create table lyshark
          -> (
          -> Uid char(10) not null,
          -> Gid int not null,
          -> Name char(255) not null,
          -> Price decimal(8,2) not null,
          -> primary key(Uid)
          -> );
      Query OK, 0 rows affected (0.01 sec)
      

      并在表结构中插入以下语句,也就是更新一下数据,下面的数据直接复制粘贴到数据库即可,无需一个个插入.

      insert into lyshark(Uid,Gid,Name,Price) values('a1',101,'apple',5.2);
      insert into lyshark(Uid,Gid,Name,Price) values('b1',101,'blackberry',10.2);
      insert into lyshark(Uid,Gid,Name,Price) values('bs1',102,'orange',11.2);
      insert into lyshark(Uid,Gid,Name,Price) values('bs2',105,'melon',8.2);
      insert into lyshark(Uid,Gid,Name,Price) values('t1',102,'bannana',10.3);
      insert into lyshark(Uid,Gid,Name,Price) values('t2',102,'grape',5.3);
      insert into lyshark(Uid,Gid,Name,Price) values('o2',103,'coconut',9.2);
      insert into lyshark(Uid,Gid,Name,Price) values('c0',101,'cherry',3.2);
      insert into lyshark(Uid,Gid,Name,Price) values('a2',103,'apricot',2.2);
      insert into lyshark(Uid,Gid,Name,Price) values('l2',104,'lemon',6.4);
      insert into lyshark(Uid,Gid,Name,Price) values('b2',104,'berry',7.6);
      insert into lyshark(Uid,Gid,Name,Price) values('m1',106,'mango',15.7);
      insert into lyshark(Uid,Gid,Name,Price) values('m2',105,'xbabay',2.6);
      insert into lyshark(Uid,Gid,Name,Price) values('t4',107,'xbababa',3.6);
      insert into lyshark(Uid,Gid,Name,Price) values('m3',105,'xxtt',11.6);
      insert into lyshark(Uid,Gid,Name,Price) values('b5',107,'xxxx',3.6);
      insert into lyshark(Uid,Gid,Name,Price) values('lyshark',999,'lysharks',999);
      

      MariaDB 常规查询

      ◆基本的字段查询◆

      select 语句查询记录最简单的检索方式,实现的方法是使用(*)通配符,指定查找所有列的名称,,语法规则如下:

      select * from 表名;
      

      查询所有字段: 使用*通配符,查询lyshark表中的所有字段.

      MariaDB [lyshark]> select * from lyshark;
      
      +---------+-----+------------+--------+
      | Uid     | Gid | Name       | Price  |
      +---------+-----+------------+--------+
      | a1      | 101 | apple      |   5.20 |
      | a2      | 103 | apricot    |   2.20 |
      | b1      | 101 | blackberry |  10.20 |
      | b2      | 104 | berry      |   7.60 |
      | b5      | 107 | xxxx       |   3.60 |
      | bs1     | 102 | orange     |  11.20 |
      | bs2     | 105 | melon      |   8.20 |
      | c0      | 101 | cherry     |   3.20 |
      | l2      | 104 | lemon      |   6.40 |
      | lyshark | 999 | lysharks   | 999.00 |
      | m1      | 106 | mango      |  15.70 |
      | m2      | 105 | xbabay     |   2.60 |
      | m3      | 105 | xxtt       |  11.60 |
      | o2      | 103 | coconut    |   9.20 |
      | t1      | 102 | bannana    |  10.30 |
      | t2      | 102 | grape      |   5.30 |
      | t4      | 107 | xbababa    |   3.60 |
      +---------+-----+------------+--------+
      17 rows in set (0.00 sec)
      

      查询指定字段: 使用Uid,Name来指定查询的字段.

      MariaDB [lyshark]> select Uid,Name from lyshark;
      
      +---------+------------+
      | Uid     | Name       |
      +---------+------------+
      | a1      | apple      |
      | a2      | apricot    |
      | b1      | blackberry |
      | b2      | berry      |
      | b5      | xxxx       |
      | bs1     | orange     |
      | bs2     | melon      |
      | c0      | cherry     |
      | l2      | lemon      |
      | lyshark | lysharks   |
      | m1      | mango      |
      | m2      | xbabay     |
      | m3      | xxtt       |
      | o2      | coconut    |
      | t1      | bannana    |
      | t2      | grape      |
      | t4      | xbababa    |
      +---------+------------+
      17 rows in set (0.00 sec)
      

      ◆查询指定的记录◆

      我们也可以根据自己的需求通过添加where过滤数据,遍历我们需要的指定数据,语法规则如下:

      select 字段名1,字段名2....字段名n  from 表名 where 查询条件
      

      在我们的where子句中,MySQL支持条件判断符,支持如下内容:

      操作符 说明信息
      = 相等
      <>,!= 不等于
      < 小于
      <= 小于或等于
      > 大于
      >= 大于或等于
      BETWEEN 位于两值之间

      实例1: 查询lyshark表中,价格正好为10.2元的水果的名称,SQL语句如下:

      MariaDB [lyshark]> select Name,Price from lyshark where price=10.2;
      
      +------------+-------+
      | Name       | Price |
      +------------+-------+
      | blackberry | 10.20 |
      +------------+-------+
      1 row in set (0.01 sec)
      

      实例2: 查询lyshark表中,apple水果的价格,SQL语句如下:

      MariaDB [lyshark]> select Name,Price from lyshark where Name='apple';
      
      +-------+-------+
      | Name  | Price |
      +-------+-------+
      | apple |  5.20 |
      +-------+-------+
      1 row in set (0.00 sec)
      

      实例3: 查询lyshark表中,价格小于10元的水果的名称列表,SQL语句如下:

      MariaDB [lyshark]> select Name,Price from lyshark where Price <10;
      
      +---------+-------+
      | Name    | Price |
      +---------+-------+
      | apple   |  5.20 |
      | apricot |  2.20 |
      | berry   |  7.60 |
      | xxxx    |  3.60 |
      | melon   |  8.20 |
      | cherry  |  3.20 |
      | lemon   |  6.40 |
      | xbabay  |  2.60 |
      | coconut |  9.20 |
      | grape   |  5.30 |
      | xbababa |  3.60 |
      +---------+-------+
      11 rows in set (0.00 sec)
      

      ◆带IN关键字查询◆

      in关键字用来查询指定的范围,使用in操作符应将所有检索条件用括号括起来,in的语法规则如下:

      select 字段名 from 表名称 where 字段名 in(关键字1,关键字2) order by 字段名(以那个字段作为排序方式);
      

      实例1: 查询字段Gid为101,102的所有记录,并以Name字段排序,SQL语句如下:

      MariaDB [lyshark]> select Gid,Name,Price from lyshark where Gid in(101,102) order by Name;
      
      +-----+------------+-------+
      | Gid | Name       | Price |
      +-----+------------+-------+
      | 101 | apple      |  5.20 |
      | 102 | bannana    | 10.30 |
      | 101 | blackberry | 10.20 |
      | 101 | cherry     |  3.20 |
      | 102 | grape      |  5.30 |
      | 102 | orange     | 11.20 |
      +-----+------------+-------+
      6 rows in set (0.00 sec)
      

      实例3: 查询字段Gid为101,103的所有记录,并以Price字段排序,SQL语句如下:

      MariaDB [lyshark]> select Gid,Name,Price from lyshark where Gid in(101,103) order by Price;
      
      +-----+------------+-------+
      | Gid | Name       | Price |
      +-----+------------+-------+
      | 103 | apricot    |  2.20 |
      | 101 | cherry     |  3.20 |
      | 101 | apple      |  5.20 |
      | 103 | coconut    |  9.20 |
      | 101 | blackberry | 10.20 |
      +-----+------------+-------+
      5 rows in set (0.00 sec)
      

      实例4: 查询字段Gid不等于101,103的所有记录,并以Price字段排序,SQL语句如下:

      MariaDB [lyshark]> select Gid,Name,Price from lyshark where Gid not in(101,103) order by Price;
      
      +-----+----------+--------+
      | Gid | Name     | Price  |
      +-----+----------+--------+
      | 105 | xbabay   |   2.60 |
      | 107 | xbababa  |   3.60 |
      | 107 | xxxx     |   3.60 |
      | 102 | grape    |   5.30 |
      | 104 | lemon    |   6.40 |
      | 104 | berry    |   7.60 |
      | 105 | melon    |   8.20 |
      | 102 | bannana  |  10.30 |
      | 102 | orange   |  11.20 |
      | 105 | xxtt     |  11.60 |
      | 106 | mango    |  15.70 |
      | 999 | lysharks | 999.00 |
      +-----+----------+--------+
      12 rows in set (0.00 sec)
      

      ◆带BETWEEN范围查询◆

      Bettween And用于查询某个范围内的值,该关键字有两个参数,即范围的开始值和结束值,满足字段的条件才会返回字段,SQL语句如下:

      select 字段名 from 表名称 where 字段名 between 范围1 and 范围2 ;
      

      实例1: 查询价格在2.00元 到 10.20元之间的水果名称和价格,SQL语句如下:

      MariaDB [lyshark]> select Name,Price from lyshark where Price between 2.00 and 10.20;
      
      +------------+-------+
      | Name       | Price |
      +------------+-------+
      | apple      |  5.20 |
      | apricot    |  2.20 |
      | blackberry | 10.20 |
      | berry      |  7.60 |
      | xxxx       |  3.60 |
      | melon      |  8.20 |
      | cherry     |  3.20 |
      | lemon      |  6.40 |
      | xbabay     |  2.60 |
      | coconut    |  9.20 |
      | grape      |  5.30 |
      | xbababa    |  3.60 |
      +------------+-------+
      12 rows in set (0.00 sec)
      

      实例2: 查询价格不在2.00元 到 10.20元之间的水果名称和价格,SQL语句如下:

      MariaDB [lyshark]> select Name,Price from lyshark where Price not between 2.00 and 10.20;
      
      +----------+--------+
      | Name     | Price  |
      +----------+--------+
      | orange   |  11.20 |
      | lysharks | 999.00 |
      | mango    |  15.70 |
      | xxtt     |  11.60 |
      | bannana  |  10.30 |
      +----------+--------+
      5 rows in set (0.00 sec)
      

      ◆带LIKE的字符匹配查询◆

      Like通配符可以匹配指定字段模糊查询,SQL语句中支持多种通配符,可以和Like一起使用的通配符有% 和_,语法规则如下:

      select 字段名 from 表名称 where 字段名 Like 'b%';
      

      %:匹配任意长度的字符,包括零字符: 查询Name字段中,所有以b字母开头的水果名称,SQL语句如下:

      MariaDB [lyshark]> select Gid,Name,Price from lyshark where Name like 'b%' order by Price;
      
      +-----+------------+-------+
      | Gid | Name       | Price |
      +-----+------------+-------+
      | 104 | berry      |  7.60 |
      | 101 | blackberry | 10.20 |
      | 102 | bannana    | 10.30 |
      +-----+------------+-------+
      3 rows in set (0.01 sec)
      

      %:匹配任意长度的字符,包括零字符: 查询Name字段中,包含所有g字母的水果(注意不是开头,只要Name字段包含g字母通通匹配),SQL语句如下:

      MariaDB [lyshark]> select Gid,Name,Price from lyshark where Name like '%g%' order by Price;
      
      +-----+--------+-------+
      | Gid | Name   | Price |
      +-----+--------+-------+
      | 102 | grape  |  5.30 |
      | 102 | orange | 11.20 |
      | 106 | mango  | 15.70 |
      +-----+--------+-------+
      3 rows in set (0.00 sec)
      

      %:匹配任意长度的字符,包括零字符: 查询Name字段中,以b开头,并且以y 结尾的水果的名称,SQL语句如下:

      MariaDB [lyshark]> select Name,Price from lyshark where Name like 'b%y' order by Price;
      
      +------------+-------+
      | Name       | Price |
      +------------+-------+
      | berry      |  7.60 |
      | blackberry | 10.20 |
      +------------+-------+
      2 rows in set (0.00 sec)
      

      注释:通过以上查询结果,可以看出%用于匹配在指定位置的任意数目的字符.


      下划线通配符_,一次只能匹配任意一个字符: 查询以字母y结尾,并且y 前面只有4个字母的记录<SQL语句如下:

      MariaDB [lyshark]> select Gid,Name from lyshark where Name like '____y';
      
      +-----+-------+
      | Gid | Name  |
      +-----+-------+
      | 104 | berry |
      +-----+-------+
      1 row in set (0.00 sec)
      

      如上:下划线通配符,一次只能匹配任意单个字符,如果要匹配多个字符,则需要使用相同个数的下划线代替.

      ◆匹配查询一个空值◆

      空值不同于0,也不同于空字符串,空值一般表示数据未知、不适用或将在以后添加数据,,在SELECT语句中使用IS NULL子句,可以查询某字段内容为空的记录,这里为了方便演示,需要再次创建一个数据表.

      MariaDB [lyshark]> create table test
          -> (
          -> Uid int not null auto_increment,
          -> Name char(50) not null,
          -> Email char(255) null,
          -> primary key(Uid)
          -> );
      Query OK, 0 rows affected (0.01 sec)
      
      
      insert into test(Name,Email) values("admin","123123@");
      insert into test(Name,Email) values("lyshark","1181506874@");
      insert into test(Name) values("root");
      

      实例1: 查询test表中,Email字段为空的记录,并显示出所有字段的值.

      MariaDB [lyshark]> select * from test where Email is null;
      
      +-----+------+-------+
      | Uid | Name | Email |
      +-----+------+-------+
      |   3 | root | NULL  |
      +-----+------+-------+
      1 row in set (0.00 sec)
      

      实例2: 查询test表中,Email字段不为空的记录,并显示出所有字段的值.

      MariaDB [lyshark]> select * from test where Email is not null;
      
      +-----+---------+-------------------+
      | Uid | Name    | Email             |
      +-----+---------+-------------------+
      |   1 | admin   | 123123@    |
      |   2 | lyshark | 1181506874@ |
      +-----+---------+-------------------+
      2 rows in set (0.00 sec)
      

      ◆带AND多条件查询◆

      在使用Select语句时,可以增加查询的限制条件,这样可以使查询的结果更加精确,我们可以在where 子句中使用and操作符,来限定相应的查询条件,使用and连接多个查询条件时,不同表达式之间应该用and分割开来,语法如下:

      select 表名称 from 字段名 where 字段名 = "xx" and 字段名 >= 10;
      

      实例1: 在lyshark表中,查询Gid等于101,并且Price大于等于5的水果价格和名称,SQL语句如下:

      MariaDB [lyshark]> select Gid,Name,Price from lyshark where Gid='101' and Price >=5;
      
      +-----+------------+-------+
      | Gid | Name       | Price |
      +-----+------------+-------+
      | 101 | apple      |  5.20 |
      | 101 | blackberry | 10.20 |
      +-----+------------+-------+
      2 rows in set (0.00 sec)
      

      实例2: 在lyshark表中,查询Gid=101 或者 Gid=102,并且Price > 5 并且 Name='apple'的水果的价格和名称,SQL语句如下:

      MariaDB [lyshark]> select Gid,Name,Price from lyshark where Gid in('101','102') and Price >= 5 and Name='apple';
      
      +-----+-------+-------+
      | Gid | Name  | Price |
      +-----+-------+-------+
      | 101 | apple |  5.20 |
      +-----+-------+-------+
      1 row in set (0.00 sec)
      

      ◆带OR的多条件查询◆

      在使用Select语句时,可以增加查询的限制条件,这样可以使查询的结果更加精确,我们可以在where 子句中使用or操作符,来限定相应的查询条件,通过or连接多个查询条件,不同表达式之间应该用or分割开来,语法规则如下:

      select 表名称 from 字段名 where 字段名 = "xx" or 字段名 >= 10;
      

      实例1: 在lyshark表中,查询Gid=101 或者 Gid=102的水果记录,SQL语句如下:

      MariaDB [lyshark]> select * from lyshark where Gid=101 or Gid=102;
      
      +-----+-----+------------+-------+
      | Uid | Gid | Name       | Price |
      +-----+-----+------------+-------+
      | a1  | 101 | apple      |  5.20 |
      | b1  | 101 | blackberry | 10.20 |
      | bs1 | 102 | orange     | 11.20 |
      | c0  | 101 | cherry     |  3.20 |
      | t1  | 102 | bannana    | 10.30 |
      | t2  | 102 | grape      |  5.30 |
      +-----+-----+------------+-------+
      6 rows in set (0.00 sec)
      

      实例2: 另一种查询方式,使用in语句查询,SQL语句如下:

      MariaDB [lyshark]> select * from lyshark where Gid in(101,102);
      
      +-----+-----+------------+-------+
      | Uid | Gid | Name       | Price |
      +-----+-----+------------+-------+
      | a1  | 101 | apple      |  5.20 |
      | b1  | 101 | blackberry | 10.20 |
      | bs1 | 102 | orange     | 11.20 |
      | c0  | 101 | cherry     |  3.20 |
      | t1  | 102 | bannana    | 10.30 |
      | t2  | 102 | grape      |  5.30 |
      +-----+-----+------------+-------+
      6 rows in set (0.00 sec)
      

      ◆使查询结果不重复◆

      有时候我们的查询结果有重复的选项,当我们不想看重复数据时可以使用distinct关键字,实现去重,SQL语法如下:

      select distinct 指定不重复的字段 From 表名称;
      

      实例:查询lyshark表中Gid字段的值,且Gid字段如果有重复的则不显示,SQL语句如下:

      MariaDB [lyshark]> select distinct Gid from lyshark;
      
      +------+
      | Gid  |
      +------+
      |  101 |
      |  103 |
      |  104 |
      |  107 |
      |  102 |
      |  105 |
      | 9999 |
      |  106 |
      +------+
      8 rows in set (0.00 sec)
      

      ◆LIMIT限制查询结果◆

      在select返回所有匹配的行,有可能是表中所有的行,如仅需要返回第一行或者是前几行数据,那么使用limit关键字即可实现,先看一下SQL语法规则:

      select * from 表名称 limit [位置偏移,]输出的行数;
      
      #其中位置偏移是表示从哪一行开始显示,如果不指定默认从1开始
      

      实例1: 显示lyshark表的前5行数据,SQL语句如下:

      MariaDB [lyshark]> select * from lyshark limit 5;
      
      +-----+-----+------------+-------+
      | Uid | Gid | Name       | Price |
      +-----+-----+------------+-------+
      | a1  | 101 | apple      |  5.20 |
      | a2  | 103 | apricot    |  2.20 |
      | b1  | 101 | blackberry | 10.20 |
      | b2  | 104 | berry      |  7.60 |
      | b5  | 107 | xxxx       |  3.60 |
      +-----+-----+------------+-------+
      5 rows in set (0.00 sec)
      

      实例2: 显示lyshark表,从第5个记录的位置开始显示,行数长度为3的记录,SQL语句如下:

      MariaDB [lyshark]> select * from lyshark limit 5,3;  #从第5行开始获取,获取后面的三条数据
      
      +-----+-----+--------+-------+
      | Uid | Gid | Name   | Price |
      +-----+-----+--------+-------+
      | bs1 | 102 | orange | 11.20 |
      | bs2 | 105 | melon  |  8.20 |
      | c0  | 101 | cherry |  3.20 |
      +-----+-----+--------+-------+
      3 rows in set (0.00 sec)
      

       

      MariaDB 查询排序

      从前面的章节中,我们可以使用order by来进行排列的规划,下面具体说明:排序分为,单列排序,多列排序,指定排序方向,这几种模式,想来看一下它的SQL写法吧:

      select * from 表名称order by 指定排序字段;
      

      单列排序: 查询lyshark表中的所有内容,且以Gid字段为基准排序,SQL语句如下:

      MariaDB [lyshark]> select * from lyshark order by Gid;
      
      +---------+-----+------------+--------+
      | Uid     | Gid | Name       | Price  |
      +---------+-----+------------+--------+
      | a1      | 101 | apple      |   5.20 |
      | b1      | 101 | blackberry |  10.20 |
      | c0      | 101 | cherry     |   3.20 |
      | t2      | 102 | grape      |   5.30 |
      | t1      | 102 | bannana    |  10.30 |
      | bs1     | 102 | orange     |  11.20 |
      | a2      | 103 | apricot    |   2.20 |
      | o2      | 103 | coconut    |   9.20 |
      | l2      | 104 | lemon      |   6.40 |
      | b2      | 104 | berry      |   7.60 |
      | m2      | 105 | xbabay     |   2.60 |
      | m3      | 105 | xxtt       |  11.60 |
      | bs2     | 105 | melon      |   8.20 |
      | m1      | 106 | mango      |  15.70 |
      | b5      | 107 | xxxx       |   3.60 |
      | t4      | 107 | xbababa    |   3.60 |
      | lyshark | 999 | lysharks   | 999.00 |
      +---------+-----+------------+--------+
      17 rows in set (0.01 sec)
      

      多列排序: 查询lyshark表中的所有内容,先按照Gid排序,再按照Price排序,SQL语句如下:

      MariaDB [lyshark]> select * from lyshark order by Gid,Price;
      
      +---------+-----+------------+--------+
      | Uid     | Gid | Name       | Price  |
      +---------+-----+------------+--------+
      | c0      | 101 | cherry     |   3.20 |
      | a1      | 101 | apple      |   5.20 |
      | b1      | 101 | blackberry |  10.20 |
      | t2      | 102 | grape      |   5.30 |
      | t1      | 102 | bannana    |  10.30 |
      | bs1     | 102 | orange     |  11.20 |
      | a2      | 103 | apricot    |   2.20 |
      | o2      | 103 | coconut    |   9.20 |
      | l2      | 104 | lemon      |   6.40 |
      | b2      | 104 | berry      |   7.60 |
      | m2      | 105 | xbabay     |   2.60 |
      | bs2     | 105 | melon      |   8.20 |
      | m3      | 105 | xxtt       |  11.60 |
      | m1      | 106 | mango      |  15.70 |
      | b5      | 107 | xxxx       |   3.60 |
      | t4      | 107 | xbababa    |   3.60 |
      | lyshark | 999 | lysharks   | 999.00 |
      +---------+-----+------------+--------+
      17 rows in set (0.00 sec)
      

      上方排序的注意事项:

      在对多列进行排序的时候,首先排序的第一列必须有相同的列值,才会对第二列进行排序
      如果第一列数据中所有值都是唯一的,将不再对第二列进行排序

      指定排序方向:

      默认情况下,查询数据是按照字幕升序进行排序的(A-Z),一般而言降序时使用(desc),升序时使用(asc)

      1.查询lyshark表中的Name和Price字段,对结果按Price降序方式排列,SQL语句如下:

      MariaDB [lyshark]> select Name,Price from lyshark order by Price desc;
      
      +------------+-----------+
      | Name       | Price     |
      +------------+-----------+
      | lysharks   | 999999.99 |
      | mango      |     15.70 |
      | xxtt       |     11.60 |
      | orange     |     11.20 |
      | bannana    |     10.30 |
      | blackberry |     10.20 |
      | coconut    |      9.20 |
      | melon      |      8.20 |
      | berry      |      7.60 |
      | lemon      |      6.40 |
      | grape      |      5.30 |
      | apple      |      5.20 |
      | xxxx       |      3.60 |
      | xbababa    |      3.60 |
      | cherry     |      3.20 |
      | xbabay     |      2.60 |
      | apricot    |      2.20 |
      +------------+-----------+
      17 rows in set (0.00 sec)
      

      2.查询lyshark表中的Name和Price字段,先按照Price降序排列,再按照Name字段升序排列,SQL语句如下:

      MariaDB [lyshark]> select Name,Price from lyshark order by Price desc,Name asc;
      
      +------------+-----------+
      | Name       | Price     |
      +------------+-----------+
      | lysharks   | 999999.99 |
      | mango      |     15.70 |
      | xxtt       |     11.60 |
      | orange     |     11.20 |
      | bannana    |     10.30 |
      | blackberry |     10.20 |
      | coconut    |      9.20 |
      | melon      |      8.20 |
      | berry      |      7.60 |
      | lemon      |      6.40 |
      | grape      |      5.30 |
      | apple      |      5.20 |
      | xbababa    |      3.60 |
      | xxxx       |      3.60 |
      | cherry     |      3.20 |
      | xbabay     |      2.60 |
      | apricot    |      2.20 |
      +------------+-----------+
      17 rows in set (0.00 sec)
      

       

      MariaDB 分组查询

      分组查询,是对数据按照某个或多个字段进行分组,MySQL中使用group by关键字对数据进行分组,基本语法形式为:

      [group by 字段] [having <条件表达式>]
      
      #字段值为进行分组时所依据的列名称:having<条件表达式>指定满足表达式限定条件的结果将被显示
      

      ◆GROUP BY创建分组◆

      GROUP BY关键字通常和集合函数一起使用,例如:MAXO、MINO、COUNTO、SUMO、AVGO.例如,要返回每个水果供应商提供的水果种类,这时就要在分组过程中用到COUNTO函数,把数据分为多个逻辑组,并对每个组进行集合计算.

      实例1: 根据Gid对lyshark表中的数据进行分组,并显示出每个编号对应水果的个数,SQL语句如下:

      MariaDB [lyshark]> select Gid,count(*) as Name from lyshark group by Gid;
      
      +-----+------+
      | Gid | Name |
      +-----+------+
      | 101 |    3 |
      | 102 |    3 |
      | 103 |    2 |
      | 104 |    2 |
      | 105 |    3 |
      | 106 |    1 |
      | 107 |    2 |
      | 999 |    1 |
      +-----+------+
      8 rows in set (0.08 sec)
      

      上面的查询结果,显示Gid表示供应商的ID Name字段使用COUNTO函数计算得出.GROUP BY子句按照Gid排序并对数据分组,可以看到ID为10l、102、105的供应商分别提供3种水果,ID为103、104、107的供应商分别提供2种水果,ID为106的供应商只提供1种水果.

      实例2: 根据Gid对lyshark表中的数据进行分组,并显示出每个编号对应水果的具体信息,SQL语句如下:

      如果要查看每个供应商提供的水果的种类的名称,该怎么办呢? MySQL中可以在GROUP BY子句中使用GROUP CONCATO函数,将每个分组中各个字段的值显示出来.

      MariaDB [lyshark]> select Gid,group_concat(Name) as Name from lyshark group by Gid;
      
      +-----+-------------------------+
      | Gid | Name                    |
      +-----+-------------------------+
      | 101 | apple,blackberry,cherry |
      | 102 | grape,bannana,orange    |
      | 103 | apricot,coconut         |
      | 104 | lemon,berry             |
      | 105 | xbabay,xxtt,melon       |
      | 106 | mango                   |
      | 107 | xxxx,xbababa            |
      +-----+-------------------------+
      7 rows in set (0.00 sec)
      

      ◆使用having过滤分组◆

      group by可以与having一起限定显示记录所需满足的条件,只有满足条件的分组才会被显示.

      实例: 根据Gid对lyshark表中的数据进行分组,并显示水果种类大于1的分组信息,SQL语句如下:

      MariaDB [lyshark]> select Gid,group_concat(Name) as Name
          -> from lyshark
          -> group by Gid having count(Name) > 1;
      
      +-----+-------------------------+
      | Gid | Name                    |
      +-----+-------------------------+
      | 101 | apple,blackberry,cherry |
      | 102 | grape,bannana,orange    |
      | 103 | apricot,coconut         |
      | 104 | lemon,berry             |
      | 105 | xbabay,xxtt,melon       |
      | 107 | xxxx,xbababa            |
      +-----+-------------------------+
      6 rows in set (0.00 sec)
      

      ◆在Group by子句中使用with rollup◆

      使用with rollup关键字之后,在所有查询的分组记录之后添加一条记录,该记录计算查询出的所有记录的总和,即统计记录数量.

      实例: 根据Gid对lyshark表中的数据进行分组,并显示记录数量,SQL语句如下:

      MariaDB [lyshark]> select Gid,count(*) as Name
          -> from lyshark
          -> group by Gid with rollup;
      
      +-----+------+
      | Gid | Name |
      +-----+------+
      | 101 |    3 |
      | 102 |    3 |
      | 103 |    2 |
      | 104 |    2 |
      | 105 |    3 |
      | 106 |    1 |
      | 107 |    2 |
      | NULL |   16 |    #本行就是记录上面的统计总和
      +-----+------+
      8 rows in set (0.00 sec)
      

      ◆使用多字段分组◆

      使用GROUP BY可以对多个字段进行分组,GROUP BY关键字后面跟需要分组的字段,MySQL根据多字段的值来进行层次分组,分组层次从左到右,即先按第1个字段分组,然后在第1个字段值相同的记录中,再根据第2个字段的值进行分组依次类推.

      实例: 根据Gid和Name字段对lyshark表中的数据进行分组,SQL语句如下:

      MariaDB [lyshark]> select * from lyshark group by Gid,Name;
      
      +-----+-----+------------+-------+
      | Uid | Gid | Name       | Price |
      +-----+-----+------------+-------+
      | a1  | 101 | apple      |  5.20 |
      | b1  | 101 | blackberry | 10.20 |
      | c0  | 101 | cherry     |  3.20 |
      | t1  | 102 | bannana    | 10.30 |
      | t2  | 102 | grape      |  5.30 |
      | bs1 | 102 | orange     | 11.20 |
      | a2  | 103 | apricot    |  2.20 |
      | o2  | 103 | coconut    |  9.20 |
      | b2  | 104 | berry      |  7.60 |
      | l2  | 104 | lemon      |  6.40 |
      | bs2 | 105 | melon      |  8.20 |
      | m2  | 105 | xbabay     |  2.60 |
      | m3  | 105 | xxtt       | 11.60 |
      | m1  | 106 | mango      | 15.70 |
      | t4  | 107 | xbababa    |  3.60 |
      | b5  | 107 | xxxx       |  3.60 |
      +-----+-----+------------+-------+
      16 rows in set (0.00 sec)
      

      从上面可以看到,查询记录先按照Gid进行分组,在对Name字段不同的取值进行分组.

      ◆group by和order by 一起使用◆

      某些情况下,需要对分组进行排序,order by用来对查询的记录排序,如果和group by一起使用可以完成对分组的排序,为了演示效果,首先创建一个表结构,SQL语句如下:

      MariaDB [lyshark]> create table orderitems
          -> (
          -> o_num int not null,
          -> o_item int not null,
          -> f_id char(10) not null,
          -> quantity int not null,
          -> item_price decimal(8,2) not null,
          -> primary key(o_num,o_item)
          -> );
      Query OK, 0 rows affected (0.02 sec)
      
      MariaDB [lyshark]> desc orderitems;
      +------------+--------------+------+-----+---------+-------+
      | Field      | Type         | Null | Key | Default | Extra |
      +------------+--------------+------+-----+---------+-------+
      | o_num      | int(11)      | NO   | PRI | NULL    |       |
      | o_item     | int(11)      | NO   | PRI | NULL    |       |
      | f_id       | char(10)     | NO   |     | NULL    |       |
      | quantity   | int(11)      | NO   |     | NULL    |       |
      | item_price | decimal(8,2) | NO   |     | NULL    |       |
      +------------+--------------+------+-----+---------+-------+
      5 rows in set (0.00 sec)
      
      insert into orderitems(o_num,o_item,f_id,quantity,item_price) values(30001,1,'a1',10,5.2);
      insert into orderitems(o_num,o_item,f_id,quantity,item_price) values(30001,2,'b2',3,7.6);
      insert into orderitems(o_num,o_item,f_id,quantity,item_price) values (30001,3,'bs1',5,11.2);
      insert into orderitems(o_num,o_item,f_id,quantity,item_price) values (30001,4,'bs2',15,9.2);
      insert into orderitems(o_num,o_item,f_id,quantity,item_price) values (30002,1,'b3',2,20.0);
      insert into orderitems(o_num,o_item,f_id,quantity,item_price) values (30003,1,'c0',100,10);
      insert into orderitems(o_num,o_item,f_id,quantity,item_price) values (30004,1,'o2',50,2.50);
      insert into orderitems(o_num,o_item,f_id,quantity,item_price) values (30005,1,'c0',5,10);
      insert into orderitems(o_num,o_item,f_id,quantity,item_price) values (30005,2,'b1',10,8.99);
      insert into orderitems(o_num,o_item,f_id,quantity,item_price) values (30005,3,'a2',10,2.2);
      insert into orderitems(o_num,o_item,f_id,quantity,item_price) values (30005,4,'m1',5,14.99);
      

      实例1: 查询订单价格大于100的订单号和总订单价格,SQL语句如下:

      MariaDB [lyshark]> select o_num,sum(quantity * item_price) as orderTotal 
          -> from orderitems
          -> group by o_num
          -> having sum(quantity * item_price) >=100;
      
      +-------+------------+
      | o_num | orderTotal |
      +-------+------------+
      | 30001 |     268.80 |
      | 30003 |    1000.00 |
      | 30004 |     125.00 |
      | 30005 |     236.85 |
      +-------+------------+
      4 rows in set (0.00 sec)
      

      以上可以看到,返回结果中并没有按照大小顺序排列,接下来使用order by关键字实现自动排序.

      MariaDB [lyshark]> select o_num,sum(quantity * item_price) as orderTotal
          -> from orderitems
          -> group by o_num
          -> having sum(quantity * item_price) >=100
          -> order by orderTotal;
      
      +-------+------------+
      | o_num | orderTotal |
      +-------+------------+
      | 30004 |     125.00 |
      | 30005 |     236.85 |
      | 30001 |     268.80 |
      | 30003 |    1000.00 |
      +-------+------------+
      4 rows in set (0.00 sec)
      

      MariaDB 聚合查询

      有时候我们并不需要返回实际表中的数据,而只是对数据进行总结.MySQL提供一些查询功能,可以对获取的数据进行分析和报告,这些函数的功能有:计算数据表中记录行数的总数、计算某个字段列下数据的总和,以及计算表中某个字段下的最大值、最小值或者平均值,下面将依次演示说明.

      ◆构建练习环境◆

      为了演示效果,首先创建一个表结构,SQL语句如下:

      MariaDB [lyshark]> create table test1
          -> (
          -> o_num int not null,
          -> o_item int not null,
          -> f_id char(10) not null,
          -> quantity int not null,
          -> item_price decimal(8,2) not null,
          -> primary key(o_num,o_item)
          -> );
      Query OK, 0 rows affected (0.02 sec)
      
      MariaDB [lyshark]> desc test1;
      +------------+--------------+------+-----+---------+-------+
      | Field      | Type         | Null | Key | Default | Extra |
      +------------+--------------+------+-----+---------+-------+
      | o_num      | int(11)      | NO   | PRI | NULL    |       |
      | o_item     | int(11)      | NO   | PRI | NULL    |       |
      | f_id       | char(10)     | NO   |     | NULL    |       |
      | quantity   | int(11)      | NO   |     | NULL    |       |
      | item_price | decimal(8,2) | NO   |     | NULL    |       |
      +------------+--------------+------+-----+---------+-------+
      rows in set (0.00 sec)
      

      然后插入一些测试数据,SQL语句如下:

      insert into test1(o_num,o_item,f_id,quantity,item_price) values(30001,1,'a1',10,5.2);
      insert into test1(o_num,o_item,f_id,quantity,item_price) values(30001,2,'b2',3,7.6);
      insert into test1(o_num,o_item,f_id,quantity,item_price) values (30001,3,'bs1',5,11.2);
      insert into test1(o_num,o_item,f_id,quantity,item_price) values (30001,4,'bs2',15,9.2);
      insert into test1(o_num,o_item,f_id,quantity,item_price) values (30002,1,'b3',2,20.0);
      insert into test1(o_num,o_item,f_id,quantity,item_price) values (30003,1,'c0',100,10);
      insert into test1(o_num,o_item,f_id,quantity,item_price) values (30004,1,'o2',50,2.50);
      insert into test1(o_num,o_item,f_id,quantity,item_price) values (30005,1,'c0',5,10);
      insert into test1(o_num,o_item,f_id,quantity,item_price) values (30005,2,'b1',10,8.99);
      insert into test1(o_num,o_item,f_id,quantity,item_price) values (30005,3,'a2',10,2.2);
      insert into test1(o_num,o_item,f_id,quantity,item_price) values (30005,4,'m1',5,14.99);
      

      ◆COUNT()函数◆

      简介:返回某列的行数
      功能:此函数统计表中包含的记录行的总数,或者根据查询结果返回列中包含的数据行数

      计算总行数:count(*) 查询test1表总行数,SQL语句如下:

      MariaDB [lyshark]> select count(*) as temp from test1;   #as temp ->表示定义总数的名称是temp
      
      +------+
      | temp |
      +------+
      |   11 |
      +------+
      1 row in set (0.00 sec)
      

      计算指定字段总行数:count(字段名) 查询test1表中o_num字段总数,SQL语句如下:

      MariaDB [lyshark]> select count(o_num) as temp from test1;
      
      +------+
      | temp |
      +------+
      |   11 |
      +------+
      1 row in set (0.00 sec)    注释:如果列中有NULL则不会被记录
      

      综合起来: 查询test1表,group by关键字先以o_num进行分组,然后计算每个分组中的总记录条数,SQL语句如下:

      MariaDB [lyshark]> select o_num,count(o_item) from test1 group by o_num;
      
      +-------+---------------+
      | o_num | count(o_item) |
      +-------+---------------+
      | 30001 |             4 |
      | 30002 |             1 |
      | 30003 |             1 |
      | 30004 |             1 |
      | 30005 |             4 |
      +-------+---------------+
      5 rows in set (0.00 sec)
      

      ◆SUM()函数◆

      简介:返回某列的和
      功能:此函数是一个求总和的函数,返回指定列值的总和

      实例1: 在test1表中查询30005号订单,一共购买的水果总量,SQL语句如下:

      MariaDB [lyshark]> desc test1;
      +------------+--------------+------+-----+---------+-------+
      | Field      | Type         | Null | Key | Default | Extra |
      +------------+--------------+------+-----+---------+-------+
      | o_num      | int(11)      | NO   | PRI | NULL    |       |
      | o_item     | int(11)      | NO   | PRI | NULL    |       |
      | f_id       | char(10)     | NO   |     | NULL    |       |
      | quantity   | int(11)      | NO   |     | NULL    |       |
      | item_price | decimal(8,2) | NO   |     | NULL    |       |
      +------------+--------------+------+-----+---------+-------+
      5 rows in set (0.00 sec)
      
      MariaDB [lyshark]> select sum(quantity) as temp
          -> from test1
          -> where o_num=30005;
      +------+
      | temp |
      +------+
      |   30 |
      +------+
      1 row in set (0.00 sec)
      

      以上可看到,sum(quantity)函数返回订单中所有水果数量之和,where子句指定查询的订单号为30005.

      实例2: 在test1表中,使用sum()函数,统计不同订单号中订购水果总量,SQL语句如下:

      MariaDB [lyshark]> desc test1;
      +------------+--------------+------+-----+---------+-------+
      | Field      | Type         | Null | Key | Default | Extra |
      +------------+--------------+------+-----+---------+-------+
      | o_num      | int(11)      | NO   | PRI | NULL    |       |
      | o_item     | int(11)      | NO   | PRI | NULL    |       |
      | f_id       | char(10)     | NO   |     | NULL    |       |
      | quantity   | int(11)      | NO   |     | NULL    |       |
      | item_price | decimal(8,2) | NO   |     | NULL    |       |
      +------------+--------------+------+-----+---------+-------+
      5 rows in set (0.01 sec)
      
      MariaDB [lyshark]> select o_num,sum(quantity) as temp
          -> from test1
          -> group by o_num;
      +-------+------+
      | o_num | temp |
      +-------+------+
      | 30001 |   33 |
      | 30002 |    2 |
      | 30003 |  100 |
      | 30004 |   50 |
      | 30005 |   30 |
      +-------+------+
      5 rows in set (0.00 sec)
      

      以上可知,group by按照订单号o_num进行了分组,sum()函数计算每个分组中订购水果的总量.

      ◆AVG()函数◆

      简介:返回某列的平均值
      功能:avg()函数通过计算返回的行数和每一行数据的和,求得指定列数据的平均值

      实例1: 在test1表中,查询编号o_num为30005的,字段的平均值,SQL语句如下:

      MariaDB [lyshark]> select * from test1;
      +-------+--------+------+----------+------------+
      | o_num | o_item | f_id | quantity | item_price |
      +-------+--------+------+----------+------------+
      | 30001 |      1 | a1   |       10 |       5.20 |
      | 30001 |      2 | b2   |        3 |       7.60 |
      | 30001 |      3 | bs1  |        5 |      11.20 |
      | 30001 |      4 | bs2  |       15 |       9.20 |
      | 30002 |      1 | b3   |        2 |      20.00 |
      | 30003 |      1 | c0   |      100 |      10.00 |
      | 30004 |      1 | o2   |       50 |       2.50 |
      | 30005 |      1 | c0   |        5 |      10.00 |
      | 30005 |      2 | b1   |       10 |       8.99 |
      | 30005 |      3 | a2   |       10 |       2.20 |
      | 30005 |      4 | m1   |        5 |      14.99 |
      +-------+--------+------+----------+------------+
      11 rows in set (0.00 sec)
      
      MariaDB [lyshark]> select avg(item_price) as temp
          -> from test1
          -> where o_num=30005;
      +----------+
      | temp     |
      +----------+
      | 9.045000 |
      +----------+
      1 row in set (0.00 sec)
      

      实例2: 在test1表中,查询重复字段o_num的所有item_price字段的平均值,SQL语句如下:

      MariaDB [lyshark]> select * from test1;
      +-------+--------+------+----------+------------+
      | o_num | o_item | f_id | quantity | item_price |
      +-------+--------+------+----------+------------+
      | 30001 |      1 | a1   |       10 |       5.20 |
      | 30001 |      2 | b2   |        3 |       7.60 |
      | 30001 |      3 | bs1  |        5 |      11.20 |
      | 30001 |      4 | bs2  |       15 |       9.20 |
      | 30002 |      1 | b3   |        2 |      20.00 |
      | 30003 |      1 | c0   |      100 |      10.00 |
      | 30004 |      1 | o2   |       50 |       2.50 |
      | 30005 |      1 | c0   |        5 |      10.00 |
      | 30005 |      2 | b1   |       10 |       8.99 |
      | 30005 |      3 | a2   |       10 |       2.20 |
      | 30005 |      4 | m1   |        5 |      14.99 |
      +-------+--------+------+----------+------------+
      11 rows in set (0.00 sec)
      
      MariaDB [lyshark]> select o_num,avg(item_price)
          -> from test1
          -> group by o_num;
      +-------+-----------------+
      | o_num | avg(item_price) |
      +-------+-----------------+
      | 30001 |        8.300000 |
      | 30002 |       20.000000 |
      | 30003 |       10.000000 |
      | 30004 |        2.500000 |
      | 30005 |        9.045000 |
      +-------+-----------------+
      5 rows in set (0.00 sec)
      

      ◆MAX()函数◆

      简介:返回某列的最大值
      功能:max()返回指定列中的最大值

      实例1: 在test1表中,查询item_price字段中最大的数据,SQL语句如下:

      MariaDB [lyshark]> select * from test1;
      +-------+--------+------+----------+------------+
      | o_num | o_item | f_id | quantity | item_price |
      +-------+--------+------+----------+------------+
      | 30001 |      1 | a1   |       10 |       5.20 |
      | 30001 |      2 | b2   |        3 |       7.60 |
      | 30001 |      3 | bs1  |        5 |      11.20 |
      | 30001 |      4 | bs2  |       15 |       9.20 |
      | 30002 |      1 | b3   |        2 |      20.00 |
      | 30003 |      1 | c0   |      100 |      10.00 |
      | 30004 |      1 | o2   |       50 |       2.50 |
      | 30005 |      1 | c0   |        5 |      10.00 |
      | 30005 |      2 | b1   |       10 |       8.99 |
      | 30005 |      3 | a2   |       10 |       2.20 |
      | 30005 |      4 | m1   |        5 |      14.99 |
      +-------+--------+------+----------+------------+
      11 rows in set (0.00 sec)
      
      MariaDB [lyshark]> select max(item_price) as max from test1;
      +-------+
      | max   |
      +-------+
      | 20.00 |
      +-------+
      1 row in set (0.00 sec)
      
      MariaDB [lyshark]> select o_num,max(item_price) as max from test1;   #加上ID号,方便区分
      +-------+-------+
      | o_num | max   |
      +-------+-------+
      | 30001 | 20.00 |
      +-------+-------+
      1 row in set (0.01 sec)
      

      也可以对上面的查询结果进行排序,SQL语句如下:

      MariaDB [lyshark]> select o_num,max(item_price) as max from test1 group by o_num;
      
      +-------+-------+
      | o_num | max   |
      +-------+-------+
      | 30001 | 11.20 |
      | 30002 | 20.00 |
      | 30003 | 10.00 |
      | 30004 |  2.50 |
      | 30005 | 14.99 |
      +-------+-------+
      5 rows in set (0.00 sec)
      

      ◆MIN()函数◆

      简介:返回某列的最小值
      功能:min()函数返回查询列中的最小值

      实例1: 在test1表中,查询item_price字段,最小的值,SQL语句如下:

      MariaDB [lyshark]> select * from test1;
      +-------+--------+------+----------+------------+
      | o_num | o_item | f_id | quantity | item_price |
      +-------+--------+------+----------+------------+
      | 30001 |      1 | a1   |       10 |       5.20 |
      | 30001 |      2 | b2   |        3 |       7.60 |
      | 30001 |      3 | bs1  |        5 |      11.20 |
      | 30001 |      4 | bs2  |       15 |       9.20 |
      | 30002 |      1 | b3   |        2 |      20.00 |
      | 30003 |      1 | c0   |      100 |      10.00 |
      | 30004 |      1 | o2   |       50 |       2.50 |
      | 30005 |      1 | c0   |        5 |      10.00 |
      | 30005 |      2 | b1   |       10 |       8.99 |
      | 30005 |      3 | a2   |       10 |       2.20 |
      | 30005 |      4 | m1   |        5 |      14.99 |
      +-------+--------+------+----------+------------+
      11 rows in set (0.00 sec)
      
      MariaDB [lyshark]> select min(item_price) as min from test1;
      +------+
      | min  |
      +------+
      | 2.20 |
      +------+
      1 row in set (0.00 sec)
      

      也可以对上面的结果排序输出,SQL语句如下:

      MariaDB [lyshark]> select o_num,min(item_price) as min from lyshark group by item_price;
      +-------+-------+
      | o_num | min   |
      +-------+-------+
      | 30005 |  2.20 |
      | 30004 |  2.50 |
      | 30001 |  5.20 |
      | 30001 |  7.60 |
      | 30005 |  8.99 |
      | 30001 |  9.20 |
      | 30003 | 10.00 |
      | 30001 | 11.20 |
      | 30005 | 14.99 |
      | 30002 | 20.00 |
      +-------+-------+
      10 rows in set (0.00 sec)
      
      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://my.oschina.net/lyshark/blog/5550861,作者:LyShark,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:spring+mybatis启动NoClassDefFoundError异常分析三部曲之二:定位错误

      下一篇:Tensorflow入门(1.0)

      相关文章

      2025-05-14 10:03:13

      【Mybatis】-动态SQL

      【Mybatis】-动态SQL

      2025-05-14 10:03:13
      include , set , sql , SQL , 条件 , 标签
      2025-05-14 10:03:13

      【Mybatis】-防止SQL注入

      【Mybatis】-防止SQL注入

      2025-05-14 10:03:13
      SQL , 执行 , 日志 , 注入 , 缓存 , 编译 , 语句
      2025-05-14 10:02:48

      SQL Server 事务日志体系结构1--基本术语

      事务包括对数据库的一次更改或一系列更改。它有一个明确开始和明确结束。开始时使用BEGIN TRANSACTION语句,或者SQL Server会自动为您开始一个事务。

      2025-05-14 10:02:48
      Server , SQL , 事务 , 数据库 , 日志 , 磁盘
      2025-05-14 10:02:48

      SQL Server 账号管理1

      SQL Server 账号管理主要包含登录名、用户、架构、角色等管理。通过对账号的管理可以有效的提高数据库系统的安全性,规范运维及使用。

      2025-05-14 10:02:48
      Server , SQL , 对象 , 数据库 , 权限 , 用户
      2025-05-14 09:51:21

      mysql数据库中decimal数据类型比较大小

      在MySQL中,DECIMAL数据类型用于存储精确的数值,它非常适合用于需要高精度计算的场景,如金融应用。当我们需要在MySQL数据库中比较DECIMAL类型数据的大小时,可以使用标准的比较运算符,如>, <, >=, <=, = 和 <>(或!=)。

      2025-05-14 09:51:21
      MySQL , SQL , 数据类型 , 查询 , 比较 , 示例
      2025-05-13 09:50:48

      查找正在执行的select以及dml语句的相关信息

      查找正在执行的select以及dml语句的相关信息

      2025-05-13 09:50:48
      select , session , sql , SQL , 语句
      2025-05-13 09:50:48

      函数索引测试

      函数索引测试

      2025-05-13 09:50:48
      emp , gt , SQL
      2025-05-13 09:50:38

      ORA-00823异常处理

      ORA-00823异常处理

      2025-05-13 09:50:38
      gt , max , size , SQL
      2025-05-13 09:50:38

      磁盘组扩容测试01

      磁盘组扩容测试01

      2025-05-13 09:50:38
      gt , ORCL , SQL
      2025-05-13 09:50:28

      添加控制文件—场景(DG备库)—采用Switchover方式

      添加控制文件—场景(DG备库)—采用Switchover方式

      2025-05-13 09:50:28
      database , gt , mode , SQL
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5219247

      查看更多

      最新文章

      【Mybatis】-动态SQL

      2025-05-14 10:03:13

      ORA-00823异常处理

      2025-05-13 09:50:38

      添加控制文件—场景(DG备库)—采用Switchover方式

      2025-05-13 09:50:28

      sql 行转列

      2025-05-09 09:21:53

      SQL触发器实例

      2025-05-09 08:50:42

      Flink SQL保留关键字

      2025-03-28 07:40:32

      查看更多

      热门文章

      MariaDB 10.5 Replication复制权限发生变化

      2023-05-05 10:01:40

      linux下一键编译安装MariaDB10.0.12

      2023-05-18 09:33:35

      SQL Server中的临时表

      2023-05-31 08:47:59

      Mysql练习

      2023-06-14 09:05:39

      MariaDB 表的基本操作

      2023-06-21 06:40:51

      SQL Server索引基础

      2023-07-04 07:04:48

      查看更多

      热门标签

      linux java python javascript 数组 前端 docker Linux vue 函数 shell git 节点 容器 示例
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      添加控制文件—场景(DG备库)—采用Switchover方式

      SQL开窗函数

      Flink SQL保留关键字

      MyBatis 介绍

      读SQL进阶教程笔记03_自连接

      SQL游标详解

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号