聚合函数

统计函数 count()

select count(要统计的字段) from 表名 where [条件]

MariaDB [employe]> select count(*) fromdepartment;+----------+

| count(*) |

+----------+

| 6 |

+----------+

1 row in set (0.00sec)

MariaDB [employe]> select count(id) fromdepartment;+-----------+

| count(id) |

+-----------+

| 6 |

+-----------+

1 row in set (0.00sec)

MariaDB [employe]> select count(id) fromdepartment;+-----------+

| count(id) |

+-----------+

| 6 |

+-----------+

1 row in set (0.00sec)

MariaDB [employe]> select count(id) from department where groups='一分司';+-----------+

| count(id) |

+-----------+

| 2 |

+-----------+

1 row in set (0.00 sec)

View Code

求最大值

select max(求最大值的字段) from 表名;

--注意,max和其它字段不一定是同一条记录

MariaDB [employe]> select max(amount),name fromdepartment;

ERROR1054 (42S22): Unknown column 'name' in 'field list'MariaDB [employe]> select max(amount),master fromdepartment;+-------------+--------+

| max(amount) | master |

+-------------+--------+

| 10 | 张三丰 |

+-------------+--------+

1 row in set (0.00sec)--下面的语句求最大值的部门主管

MariaDB [employe]> select master from department order by amount desc limit 1;+--------+

| master |

+--------+

| 黄山 |

+--------+

1 row in set (0.00sec)

MariaDB [employe]>

View Code

求最小值

select min(要计算最小值的字段) from 表名;

MariaDB [employe]> select min(kpi) fromdepartment;+----------+

| min(kpi) |

+----------+

| 8.00 |

+----------+

1 row in set (0.00sec)

MariaDB [employe]>

View Code

求和 sum

select sum(要求和/总数的字段) from 表名;

MariaDB [employe]> select sum(amount) fromdepartment;+-------------+

| sum(amount) |

+-------------+

| 54 |

+-------------+

1 row in set (0.00 sec)

View Code

求平均值

select avg(要求平均值字段) from 表名;

MariaDB [employe]> select avg(kpi) fromdepartment;+----------+

| avg(kpi) |

+----------+

| 8.663333 |

+----------+

1 row in set (0.00 sec)

View Code

having

MariaDB [employe]> select master from department having amount>8;

ERROR1054 (42S22): Unknown column 'amount' in 'having clause'MariaDB [employe]> select master,amount from department having amount>8;+-----------------+--------+

| master | amount |

+-----------------+--------+

| 黄山 | 10 |

| 黄玉石 | 10 |

| 黄尼古拉斯*赵四 | 10 |

+-----------------+--------+

3 rows in set (0.00sec)

MariaDB [employe]> select master,amount from department where amount>8;+-----------------+--------+

| master | amount |

+-----------------+--------+

| 黄山 | 10 |

| 黄玉石 | 10 |

| 黄尼古拉斯*赵四 | 10 |

+-----------------+--------+

3 rows in set (0.00sec)

MariaDB [employe]> select master from department where amount>8;+-----------------+

| master |

+-----------------+

| 黄山 |

| 黄玉石 |

| 黄尼古拉斯*赵四 |

+-----------------+

3 rows in set (0.00 sec)

View Code

适合用 having,但不适合用where

MariaDB [employe]> select count(id),bumen fromdepartment group by bumen;+-----------+--------+

| count(id) | bumen |

+-----------+--------+

| 1 | NULL |

| 3 | 总部 |

| 2 | 一分司 |

+-----------+--------+

3 rows in set (0.00sec)

MariaDB [employe]> select count(id),bumen from department group by bumen having count(id)>2;+-----------+-------+

| count(id) | bumen |

+-----------+-------+

| 3 | 总部 |

+-----------+-------+

1 row in set (0.00sec)

MariaDB [employe]> select count(id),bumen from department group by bumen where count(id)>2;

ERROR1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'where count(id)>2' at line 1MariaDB [employe]>

View Code

having 和 where 都 可以对记录进行筛选;但是having跟在group by 后面,group by 跟在 where 后面;having 后面条件必须在 select 字段中出现,没有,就会报错;where 是必须是表中字段

where ... group by ... having

表连接

数据准备

create table student(

id int primary key auto_increment,

sname varchar(50),

cls_id int

)engine=innodb default charset=utf8;

create tableclass(

id int primary key auto_increment,

cname varchar(10),

teacher varchar(20)

)engine=innodb default charset=utf8;

insert intoclass (cname,teacher)values('1811a','孙静香');

insert intoclass (cname,teacher)values('1812a','王三多');

insert intoclass (cname,teacher)values('1813a','王多鱼');

insert into student(sname,cls_id)values('谢逊',1);

insert into student(sname,cls_id)values('周大福',1);

insert into student(sname,cls_id)values('高程远',1);

View Code

1. 内联接查询

select [字段] from 表名1 inner join 表名2 on 表名1.连接字段=表名2.连接字段

MariaDB [shop]> select * from class c inner join student s on s.cls_id=c.id;+----+-------+---------+----+--------+--------+

| id | cname | teacher | id | sname | cls_id |

+----+-------+---------+----+--------+--------+

| 1 | 1811a | 孙静香 | 1 | 谢逊 | 1 |

| 1 | 1811a | 孙静香 | 2 | 周大福 | 1 |

| 1 | 1811a | 孙静香 | 3 | 高程远 | 1 |

+----+-------+---------+----+--------+--------+

3 rows in set (0.00sec)

insert into student(sname,cls_id)values('谢三逊',5);

View Code

2. 右联接

select * from student s right join class c on s.cls_id=c.id;

MariaDB [shop]> select * from student s right join class c on s.cls_id=c.id;+------+--------+--------+----+-------+---------+

| id | sname | cls_id | id | cname | teacher |

+------+--------+--------+----+-------+---------+

| 1 | 谢逊 | 1 | 1 | 1811a | 孙静香 |

| 2 | 周大福 | 1 | 1 | 1811a | 孙静香 |

| 3 | 高程远 | 1 | 1 | 1811a | 孙静香 |

| NULL | NULL | NULL | 2 | 1812a | 王三多 |

| NULL | NULL | NULL | 3 | 1813a | 王多鱼 |

+------+--------+--------+----+-------+---------+

5 rows in set (0.00 sec)

View Code

3. 左联接

select * from class c left join student s on s.cls_id=c.id;

MariaDB [shop]> select * from class c left join student s on s.cls_id=c.id;+----+-------+---------+------+--------+--------+

| id | cname | teacher | id | sname | cls_id |

+----+-------+---------+------+--------+--------+

| 1 | 1811a | 孙静香 | 1 | 谢逊 | 1 |

| 1 | 1811a | 孙静香 | 2 | 周大福 | 1 |

| 1 | 1811a | 孙静香 | 3 | 高程远 | 1 |

| 2 | 1812a | 王三多 | NULL | NULL | NULL |

| 3 | 1813a | 王多鱼 | NULL | NULL | NULL |

+----+-------+---------+------+--------+--------+

5 rows in set (0.00 sec)

View Code

4. 笛卡尔积

select * from class c join student s;

MariaDB [shop]> select * from classc join student s;+----+-------+---------+----+--------+--------+

| id | cname | teacher | id | sname | cls_id |

+----+-------+---------+----+--------+--------+

| 1 | 1811a | 孙静香 | 1 | 谢逊 | 1 |

| 2 | 1812a | 王三多 | 1 | 谢逊 | 1 |

| 3 | 1813a | 王多鱼 | 1 | 谢逊 | 1 |

| 1 | 1811a | 孙静香 | 2 | 周大福 | 1 |

| 2 | 1812a | 王三多 | 2 | 周大福 | 1 |

| 3 | 1813a | 王多鱼 | 2 | 周大福 | 1 |

| 1 | 1811a | 孙静香 | 3 | 高程远 | 1 |

| 2 | 1812a | 王三多 | 3 | 高程远 | 1 |

| 3 | 1813a | 王多鱼 | 3 | 高程远 | 1 |

| 1 | 1811a | 孙静香 | 4 | 谢三逊 | 5 |

| 2 | 1812a | 王三多 | 4 | 谢三逊 | 5 |

| 3 | 1813a | 王多鱼 | 4 | 谢三逊 | 5 |

+----+-------+---------+----+--------+--------+

12 rows in set (0.00 sec)

View Code

5. 左表独有

select * from class c left join student s on c.id=s.cls_id where s.id is null;

MariaDB [shop]> select * from class c left join student s on c.id=s.cls_id where s.id isnull;+----+-------+---------+------+-------+--------+

| id | cname | teacher | id | sname | cls_id |

+----+-------+---------+------+-------+--------+

| 2 | 1812a | 王三多 | NULL | NULL | NULL |

| 3 | 1813a | 王多鱼 | NULL | NULL | NULL |

+----+-------+---------+------+-------+--------+

2 rows in set (0.00 sec)

View Code

6. 右表独有

select * from student s right join class c on s.cls_id=c.id where s.id is null;

MariaDB [shop]> select * from student s right join class c on s.cls_id=c.id where s.id isnull;+------+-------+--------+----+-------+---------+

| id | sname | cls_id | id | cname | teacher |

+------+-------+--------+----+-------+---------+

| NULL | NULL | NULL | 2 | 1812a | 王三多 |

| NULL | NULL | NULL | 3 | 1813a | 王多鱼 |

+------+-------+--------+----+-------+---------+

2 rows in set (0.00 sec)

View Code

7. 全联接

MariaDB [shop]> select * from class c left join student s on c.id=s.cls_id->union-> select * from class c right join student s on c.id=s.cls_id;+------+-------+---------+------+--------+--------+

| id | cname | teacher | id | sname | cls_id |

+------+-------+---------+------+--------+--------+

| 1 | 1811a | 孙静香 | 1 | 谢逊 | 1 |

| 1 | 1811a | 孙静香 | 2 | 周大福 | 1 |

| 1 | 1811a | 孙静香 | 3 | 高程远 | 1 |

| 2 | 1812a | 王三多 | NULL | NULL | NULL |

| 3 | 1813a | 王多鱼 | NULL | NULL | NULL |

| NULL | NULL | NULL | 4 | 谢三逊 | 5 |

+------+-------+---------+------+--------+--------+

6 rows in set (0.00 sec)

View Code

# # mysql 本身没有全联接,但是我们可以模拟出来

8. 并集去交集

MariaDB [shop]> select * from class c left join student s on s.cls_id=c.id where s.id isnull->union-> select * from class c right join student s on c.id=s.cls_id where c.id isnull;+------+-------+---------+------+--------+--------+

| id | cname | teacher | id | sname | cls_id |

+------+-------+---------+------+--------+--------+

| 2 | 1812a | 王三多 | NULL | NULL | NULL |

| 3 | 1813a | 王多鱼 | NULL | NULL | NULL |

| NULL | NULL | NULL | 4 | 谢三逊 | 5 |

+------+-------+---------+------+--------+--------+

3 rows in set (0.00 sec)

View Code

9. 自联接(自查询)

表和自身的连接,使用 inner join 来完成

MariaDB [shop]>create table areas(

id int primary key auto_increment,

area varchar(10),

pid int

)engine=innodb default charset=utf8;

Query OK, 0 rows affected (0.02 sec)

View Code

测试数据

INSERT INTO `areas` VALUES (1,'北京',NULL),

(2,'上海',NULL),

(3,'广东',NULL),

(4,'天津',NULL),

(5,'重庆',NULL),

(6,'昌平',1),

(7,'顺义',1),

(8,'海淀',1),

(9,'朝阳',1),

(10,'河北',NULL),

(11,'河南',NULL),

(12,'山西',NULL),

(13,'山东',NULL),

(98,'广州市',3),

(103,'大同',12),

(104,'朔州',12),

(105,'忻州',12),

(106,'阳泉',12),

(107,'吕梁',12),

(108,'晋中',12),

(109,'长治',12),

(110,'晋城',12),

(111,'临汾',12),

(112,'运城',12),

(230,'越秀区',98),

(231,'荔湾区',98),

(232,'海珠区',98),

(233,'天河区',98),

(234,'白云区',98),

(235,'黄埔区',98),

(236,'番禺区',98),

(237,'花都区',98),

(238,'南沙区',98),

(239,'增城区',98),

(240,'从化区',98);

View Code

查询1:所有一级地区

MariaDB [shop]> select * from areas where pid isnull;+----+------+------+

| id | area | pid |

+----+------+------+

| 1 | 北京 | NULL |

| 2 | 上海 | NULL |

| 3 | 广东 | NULL |

| 4 | 天津 | NULL |

| 5 | 重庆 | NULL |

| 10 | 河北 | NULL |

| 11 | 河南 | NULL |

| 12 | 山西 | NULL |

| 13 | 山东 | NULL |

+----+------+------+

9 rows in set (0.00 sec)

View Code

查询2:查询省的名称为“山西”的所有城市

MariaDB [shop]> select * from areas as p inner join areas c on c.pid=p.id where p.area='山西';+----+------+------+-----+------+------+

| id | area | pid | id | area | pid |

+----+------+------+-----+------+------+

| 12 | 山西 | NULL | 103 | 大同 | 12 |

| 12 | 山西 | NULL | 104 | 朔州 | 12 |

| 12 | 山西 | NULL | 105 | 忻州 | 12 |

| 12 | 山西 | NULL | 106 | 阳泉 | 12 |

| 12 | 山西 | NULL | 107 | 吕梁 | 12 |

| 12 | 山西 | NULL | 108 | 晋中 | 12 |

| 12 | 山西 | NULL | 109 | 长治 | 12 |

| 12 | 山西 | NULL | 110 | 晋城 | 12 |

| 12 | 山西 | NULL | 111 | 临汾 | 12 |

| 12 | 山西 | NULL | 112 | 运城 | 12 |

+----+------+------+-----+------+------+

View Code

mysql联表查询聚合_MySQL--04(聚合函数表连接查询)相关推荐

  1. mysql 联表详解_MySQL多表查询详解

    多表查询 1. 表与表之间的关系 <1> 一对一用户表和身份信息表,用户表是主表 男人表.女人表 create table man(mid int primary key auto_inc ...

  2. mysql内连接查询原理_MySQL全面瓦解12:连接查询的原理和应用

    概述 MySQL最强大的功能之一就是能在数据检索的执行中连接(join)表.大部分的单表数据查询并不能满足我们的需求,这时候我们就需要连接一个或者多个表,并通过一些条件过滤筛选出我们需要的数据. 了解 ...

  3. mysql sql 连接查询语句_Mysql——sql数据库中的连接查询

    1.1.1   交叉连接(CROSS JOIN) 交叉连接(CROSS JOIN):有两种,显式的和隐式的,不带ON子句,返回的是两表的乘积,也叫笛卡尔积. 例如:下面的语句1和语句2的结果是相同的. ...

  4. mysql联表查询语句示例

    mysql联表查询语句示例 ps:本人亲测,阿里云2核4G5M的服务器性价比很高,新用户一块多一天,老用户三块多一天,最高可以买三年,感兴趣的可以戳一下:阿里云折扣服务器 示例: "sele ...

  5. 关于mysql 联表使用count的一个问题

    最近遇到一个联表查询的问题. mysql语句如下: 这是查询文章列表: SELECTcontent.id,content.fromurl,content.title,content.content,c ...

  6. 周末杂谈:在MYSQL中,添加数据行后,使用右外连接查询所有课程的选修情况,要求列出课程编号、课程名称、选修人数,表中没有的课程列值为空的解决方法

    周末杂谈:在MYSQL中,添加数据行后,使用右外连接查询所有课程的选修情况,要求列出课程编号.课程名称.选修人数,表中没有的课程列值为空的解决方法 实验前期准备 course表(课程表) 在其中: c ...

  7. mysql建表影响效率_MySQL建表查询优化技巧

    场景 我用的数据库是mysql5.6,下面简单的介绍下场景 课程表: 数据100条 学生表: 数据70000条 学生成绩表SC 数据70w条 查询目的:查找语文考100分的考生 查询语句: selec ...

  8. 数据库系统原理与应用教程(066)—— MySQL 练习题:操作题 71-81(十):连接查询

    数据库系统原理与应用教程(066)-- MySQL 练习题:操作题 71-81(十):连接查询 71.连接查询(1) 数据表:Customers,包含顾客名称:cust_name.顾客 id:cust ...

  9. mysql 连边聚合_MySQL分组,聚合函数,连表查询,子查询

    >>>分组: group by + group_concat 分组:类似于将一个班级的学生,按照性别或其他条件,分成若干个组,最终以小组为单位显示,如上图中,以post字段对表进行分 ...

最新文章

  1. html5 Canvas画图4:填充和渐变
  2. 2440 nand flash和nor flash上启动
  3. JavaFX UI控件教程(十三)之Table View
  4. 某公司R2631E以太口通过SDH接新桥的ATM交换机,出现丢包问题的解决方法
  5. day1 -- Python变量、注释、格式化输出字符串、input、if、while、for
  6. 产品 电信nb接口调用_通用电信华为物联网IOT开放平台NB-IOT对接profile透传编解码插件离线定制开发...
  7. linux查看内网命令,nmap命令查看内网信息的几个...-centos6.3中lspci查看硬件信息提...-学习linux cut 命令的用法_169IT.COM...
  8. Windows驱动签名,还需要使用EV代码签名证书吗?
  9. 概率机器人-贝叶斯滤波
  10. 敏捷开发 建立愿景、使命_敏捷产品计划:愿景,战略和策略
  11. 极进网络(Extreme Networks )Extreme VDX 6940 交换机光模块配置方案
  12. hadoop之MapReduce学习教程
  13. html设计壁纸的软件,60个网页及平面设计师必备神器
  14. java实现数字转中文大写数字
  15. 收集-网站后台优秀文章
  16. 美本计算机专业,2016美国本科计算机cs专业排名
  17. 什么是JPA、JPA的基础实战
  18. 简帛企业云智库介绍(企业知识管理系统)
  19. 介绍一款Oracle的利器小工具-SQLcl
  20. 巧用3721上网助手,练就“踏网无痕”(转)

热门文章

  1. odoo12 自动创建编号
  2. 创龙AD+全志T3 TL7606I模块测试
  3. 线段树应用:区间合并
  4. 2020年6月下旬,离开工作了三年多的老东家
  5. 在PC上测试移动端网站和模拟手机浏览器的5大方法
  6. MySQL自学(从入门到高手)
  7. Java 和 HTTP 的那些事(四) HTTPS 和 证书相关
  8. 征信报告出现连三累六严重吗
  9. 彻底搞懂 Hive|Spark DDL语句 | ALTER 语法
  10. 【山外笔记-四级计算机网络】第1章 网络技术基础