详解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码进行计算的。

标签:MySQL,查询
0
投稿

猜你喜欢

  • 基于ASP的站内多值搜索

    2010-05-11 20:03:00
  • python 密码学示例——凯撒密码的实现

    2023-04-20 09:03:55
  • python频繁写入文件时提速的方法

    2023-11-11 01:48:40
  • Python OpenCV实现传统图片格式与base64转换

    2021-07-20 21:42:21
  • 运用python去除图片水印

    2021-05-06 10:54:20
  • torch.optim优化算法理解之optim.Adam()解读

    2023-06-24 23:30:25
  • 快速图片链接批处理

    2007-02-03 11:39:00
  • 对python抓取需要登录网站数据的方法详解

    2023-01-18 04:58:41
  • 详解Pandas与openpyxl库的超强结合

    2021-09-05 03:52:15
  • MySQL 连接与管理

    2011-09-10 15:52:42
  • Vue.js实现分页查询功能

    2024-05-02 16:41:29
  • python增加图像对比度的方法

    2022-11-06 09:35:37
  • Python实现桶排序与快速排序算法结合应用示例

    2022-10-26 23:33:39
  • CSS实现元素透明的那些事

    2009-09-07 12:22:00
  • 网页上的广告条设计思考

    2008-06-29 14:16:00
  • MySQL一个语句查出各种整形占用字节数及最大最小值的实例

    2024-01-25 11:30:43
  • Python 文件与文件对象及文件打开关闭

    2021-06-16 16:08:44
  • Python环境管理virtualenv&virtualenvwrapper的配置详解

    2021-09-28 01:08:08
  • asp sql去左右空格函数

    2008-03-04 17:29:00
  • Python中操作符重载用法分析

    2023-04-05 12:34:51
  • asp之家 网络编程 m.aspxhome.com