博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL中的分组查询与连接查询语句
阅读量:4091 次
发布时间:2019-05-25

本文共 2194 字,大约阅读时间需要 7 分钟。

分组查询 group by

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

1)单独使用

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

1
select
*
from
employee
group
by
sex;

将只显示男女两条记录。

2)与group_concat()函数一起使用

每个分组中指定字段值都显示出来
实例:

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

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

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

3)与集合函数一起使用

实例:

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

结果:

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

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

4)与having一起使用

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

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

结果:

1
2
sex | count(sex)
男 | 3

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

5)按多字段进行分组

1
select
*
from
employee
group
by
d_id,sex;

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

6) 与with rollup一起使用

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

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

结果:

1
2
3
4
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()函数
统计记录条数
实例:

1
select
count
(*)
from
employee;

与group by一起使用

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

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

2) sum()函数

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

1
2
3
select
num,
sum
(score)
from
grade
where
num= 1001;
 
select
num,
sum
(score)
from
grade
group
by
num;

sum()只能计算数值类型字段。

3)avg()函数
avg()函数是求平均值函数。
实例:

1
2
3
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码进行计算的。

原文链接:

转载地址:http://tscii.baihongyu.com/

你可能感兴趣的文章
数据库事务
查看>>
JavaScript基础1:JavaScript 错误 - Throw、Try 和 Catch
查看>>
SQL基础总结——20150730
查看>>
SQL join
查看>>
JavaScript实现页面无刷新让时间走动
查看>>
CSS实例:Tab选项卡效果
查看>>
前端设计之特效表单
查看>>
前端设计之CSS布局:上中下三栏自适应高度CSS布局
查看>>
Java的时间操作玩法实例若干
查看>>
JavaScript:时间日期格式验证大全
查看>>
pinyin4j:拼音与汉字的转换实例
查看>>
XML工具代码:SAX从String字符串XML内获取指定节点或属性的值
查看>>
时间日期:获取两个日期相差几天
查看>>
责任链模式 Chain of Responsibility
查看>>
高并发与大数据解决方案概述
查看>>
解决SimpleDateFormat线程安全问题NumberFormatException: multiple points
查看>>
MySQL数据库存储引擎简介
查看>>
处理Maven本地仓库.lastUpdated文件
查看>>
Kafka | 请求是怎么被处理的?
查看>>
Java并发编程1-线程池
查看>>