详解MySQL中的分组查询与连接查询语句_Mysql

分组查询 group by
group by 属性名 [having 条件表达式][ with rollup]
“属性名 ”指按照该字段值进行分组;“having 条件表达式 ”用来限制分组后的显示,满足条件的结果将被显示;with rollup 将会在所有记录的最后加上一条记录,该记录是上面所有记录的总和。

1)单独使用
group by 单独使用,查询结果只显示一个分组的一条记录。
实例:

select * from employee group by sex;

将只显示男女两条记录。

2)与group_concat()函数一起使用
每个分组中指定字段值都显示出来
实例:

select sex,group_concat(name) from employee group by sex;

显示结果中“女”会显示所有sex为“女”的名字name

sex | group_concat(name)
女 | 小红,小兰
男 | 张三,王五,王六

3)与集合函数一起使用
实例:

select sex,count(sex) from employee group by sex;

结果:

sex | count(num)
女 | 1
男 | 3

count()为计算个数的方法。

4)与having一起使用
“having条件表达式”,可以限制输出结果。只有满足条件表达式的结果才显示。
实例:

select sex,count(sex) from employee group by sex having count(sex) >= 3;

结果:

sex | count(sex)
男 | 3

“having条件表达式”作用于分组后的记录。

5)按多字段进行分组

select * from employee group by d_id,sex;

查询结果先按d_id分组,再按sex进行分组

6) 与with rollup一起使用
使用with rollup将会在所有记录的最后加上一条记录,这条记录是上面所有记录的总和
实例:

select sex,count(sex) from employee group by sex with rollup;

结果:

sex | count(sex)
女 | 1
男 | 5
null | 6

如果是字符串的话,比如姓名就会生成“张三,李四,王五”这种类型的结果,即name总和。

连接查询
将两个及两个以上的表连接起来选取所需数据。

1)内连接查询:
当两个表中具有相同意义的字段值相等时,就查询出该条记录。
实例:

复制代码 代码如下:

select num,name,employee.d_id,age,d_name from employee,department where employee.d_id = department.d_id

因字段名相同,所以取d_id字段值时最好指定哪张表的字段。

2)外连接查询
select 属性名列表 from 表名1 left|right join 表名2 on 表名1.属性名1=表名2.属性名2;
左连接查询:
进行左连接查询时,可以查出表名1中所指的表中所有记录。而表名2所指表中,只能查询出匹配的记录。
实例:

复制代码 代码如下:

select num,name,employee.d_id,age,d_name from employee left join department on employee.d_id = department.d_id;

右连接查询:
与左连接相反,可以查询出表名2中的的所有记录,而表名1中所指的表中,只查询出匹配的记录。

PS:使用集合函数查询
集合函数包括count(),sum(),avg(),max()和min()。
1)count()函数
统计记录条数
实例:

select count(*) from employee;

与group by一起使用

select d_id,count(*) from employee group by d_id;

上述语句会先分组后统计。

2) sum()函数
sum()函数是求和函数
实例:

select num,sum(score) from grade where num= 1001;

select num,sum(score) from grade group by num;

sum()只能计算数值类型字段。
3)avg()函数
avg()函数是求平均值函数。
实例:

select avg(age) from employee;

select course,avg(score) from group by course;

4)max(),min()函数
求最大值和最小值。
实例:
select max(age) from employee;
select num,course,max(score) from grade group by course;
对于字符串的最大值问题,max()函数是使用字符对应的ascii码进行计算的。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索mysql
, 查询
, 分组查询
连接查询
mysql分组查询语句、mysql 锁定语句 详解、sql语句分组查询、oracle分组查询语句、mybatis分组查询语句,以便于您获取更多的相关知识。

时间: 2024-10-05 01:20:39

详解MySQL中的分组查询与连接查询语句_Mysql的相关文章

详解MySQL中的存取权限_Mysql

看到很多网友提出关于MySQL登录不上服务器的问题,包括有的是在PHP中调用MySQL时发生的不能登录MySQL数据库服务器的问题,以为是PHP出了问题.其实是MySQL权限的问题. MySQL的权限系统在MySQL的手册中是很长的一章,我把它打印出来足足印了20多页!这里就将我对它的理解简要地写出来,希望能对刚刚接触MySQL的同志有点帮助:有说得不对的地方,也请同志们指出. 在我了解了MySQL的权限机制后,不由得不赞叹它的严密与巧妙:也许所有的数据库系统都是如此罢,只是别的大型数据库把权限

详解MySQL中WHERE子句的用法_Mysql

我们已经看到SQL SELECT命令来从MySQL表获取数据.我们可以使用一个条件子句WHERE子句中筛选出来的结果.使用WHERE子句,我们可以指定一个选择的标准来从表中选择所需的记录.语法: 下面是通用的SQL WHERE子句来获取数据从MySQL表的SELECT命令的语法: SELECT field1, field2,...fieldN table_name1, table_name2... [WHERE condition1 [AND [OR]] condition2.....    

详解MySQL中UNION的用法_Mysql

如果想选择其他几个表中的行或从一个单一的表作为一个单独的结果集行的几个集会,那么可以使用的UNION. UNION在MySQL4.0以上版本才能可以使用.本节说明如何使用它. 假设有两个表,潜在和实际的客户列表,供应商购买耗材合并所有三个表中的姓名和地址,来创建一个单一的邮件列表.UNION提供了一种方法做到这一点.假设三个表有以下内容: mysql> SELECT * FROM prospect; +---------+-------+------------------------+ | f

详解Mysql中的JSON系列操作函数_Mysql

前言 JSON是一种轻量级的数据交换格式,采用了独立于语言的文本格式,类似XML,但是比XML简单,易读并且易编写.对机器来说易于解析和生成,并且会减少网络带宽的传输. JSON的格式非常简单:名称/键值.之前MySQL版本里面要实现这样的存储,要么用VARCHAR要么用TEXT大文本. MySQL5.7发布后,专门设计了JSON数据类型以及关于这种类型的检索以及其他函数解析. 下面一起来实际操作一下. 创建带有 JSON 字段的表 比如一个'文章'表,字段包括 id.标题 title.标签 t

详解MySQL中的外键约束问题_Mysql

使用MySQL开发过数据库驱动的小型web应用程序的人都知道,对关系数据库的表进行创建.检索.更新和删除等操作都是些比较简单的过程.理论上,只要掌握了最常见的SQL语句的用法,并熟悉您选择使用的服务器端脚本语言,就足以应付对MySQL表所需的各种操作了,尤其是当您使用了快速MyISAM数据库引擎的时候.但是,即使在最简单的情况下,事情也要比我们想象的要复杂得多.下面我们用一个典型的例子进行说明.假设您正在运行一个博客网站,您几乎天天更新,并且该站点允许访问者评论您的帖子. MySQL外键约束条件

详解MySQL中的SQRT函数的使用方法_Mysql

MySQL的SQRT函数是用来计算出任何数量的平方根.可以使用SELECT语句找出方检定根的任意数如下: mysql> select SQRT(16); +----------+ | SQRT(16) | +----------+ | 4.000000 | +----------+ 1 row in set (0.00 sec) 所看到的浮点值,因为内部MySQL将处理浮点数据类型的平方根. 可以使用SQRT函数,计算出记录的平方根.了解SQRT函数更详细用法,考虑EMPLOYEE_TBL的表具

详解mysql建立索引的使用办法及优缺点分析_Mysql

前言 索引(index)是帮助MySQL高效获取数据的数据结构. 它对于高性能非常关键,但人们通常会忘记或误解它. 索引在数据越大的时候越重要.规模小.负载轻的数据库即使没有索引,也能有好的性能, 但是当数据增加的时候,性能就会下降很快. 为什么要创建索引呢? 这是因为,创建索引可以大大提高系统的性能. 第一.通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性. 第二.可以大大加快数据的检索速度,这也是创建索引的最主要的原因. 第三.可以加速表和表之间的连接,特别是在实现数据的参考完整性方

详解MySQL高可用MMM搭建方案及架构原理_Mysql

先来看看架构,如下图: 部署 1.修改hosts 在所有的服务器中执行相同的操作. vim /etc/hosts 192.168.137.10 master 192.168.137.20 backup 192.168.137.30 slave 192.168.137.40 monitor 2.添加mysql用户 只需要在所有的数据库端执行即可,监控端不需要. GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'192.168.137.%' IDEN

MySQL中基本的多表连接查询教程_Mysql

一.多表连接类型1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','  如:         由于其返回的结果为被连接的两个数据表的乘积,因此当有WHERE, ON或USING条件的时候一般不建议使用,因为当数据表项目太多的时候,会非常慢.一般使用LEFT [OUTER] JOIN或者RIGHT [OUTER] JOIN  2.   内连接INNER JOIN 在MySQL中把I SELECT * FROM table1 CROSS J