详解MySQL中的分组查询与连接查询语句
作者:GALAXY_ZMY 发布时间:2024-01-17 16:32:19
分组查询 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码进行计算的。


猜你喜欢
- 在Web开发的时候,经常会遇到的一种情况就是浏览器提示脚本运行时间过长,停止还是继续,无论你选择什么,相信你都会想尽一切办法让这个对话框远离
- 如下所示:只对当前文件有效的操作:菜单栏->View -> Active Editor -> Use Soft Wraps
- 在神经网络计算过程中,经常会遇到需要将矩阵中的某些元素取出并且单独进行计算的步骤(例如MLE,Attention等操作)。那么在 tenso
- 本文实例讲述了PHP实现的redis主从数据库状态检测功能。分享给大家供大家参考,具体如下:实例:<?php/** * 检测多个主从r
- 目录什么是预处理?那么预处理有啥好处?Go实现 MySQL 的事务sqlx使用gin + mysql + rest full api&nbs
- 1 HSV上下限颜色的HSV上下限如下表:2 追踪单个颜色import cv2 as cvimport numpy as npcap = c
- 在数据库中,字符型的数据是最多的,可以占到整个数据库的80%以上。为此正确处理字符型的数据,对于提高数据库的性能有很大的作用。在字符型数据中
- 1、什么是Spring Cloud ConfigSpring Cloud Config为微服务架构提供了配置管理的功能,通过Spring C
- max() 方法返回其参数最大值:最接近正无穷大的值。语法以下是max()方法的语法:max( x, y, z, .... )参
- 开放源代码社区为了扩展MySQL的使用范围,开发出了.Net框架(.NET Framework)中可以使用的数据库连接器。我们就来学习一下如
- python 类详解类1.类是一种数据结构,可用于创建实例。(一般情况下,类封装了数据和可用于该数据的方法)2.Python类是可调用的对象
- 1、手上目前拥有数据集是一大坨,没有train,test,val的划分如图所示2、目录结构:|---data |
- 本文主要介绍的是MySQL慢查询分析方法,前一段日子,我曾经设置了一次记录在MySQL数据库中对慢于1秒钟的SQL语句进行查询。想起来有几个
- 我就废话不多说了,大家还是直接看代码吧~def list_dict(list_data): dict_data = {} &nb
- 当我们使用电脑的时候,不可避免的会碰到重复点击的任务。所以我们可以使用python制作一个简单的连点器进行使用,同时可以提升写代码的水平。第
- 环境python版本号系统游览器python 3.7.2win7google chrome关于本文本文将会通过爬虫的方式实现简单的百度翻译。
- 前言:如何悄悄的打开朋友的摄像头,看看她最近过的怎么样,嘿嘿!这次让我带你们来实现这个功能。注: 这个程序仅限在朋友之间开玩笑,别去搞什么违
- 大家还记得我们在老版本中,对于线上环境配置中会把所有的 css 多打成一个文件:核心是使用了插件 extract-text-webpack-
- 在写代码的时候,往往会漏掉日志这个关键因素,导致功能在使用的时候出错却无法溯源。其实,只需要写一个非常简单的日志装饰器,我们就能大大提升排查
- 一、如何创建用户和密码1.进入到mysql数据库下mysql> use mysqlDatabase changed2.对新用户增删改1