MySQL之复杂查询的实现
作者:yzm4399 发布时间:2024-01-23 00:32:43
标签:MySQL,复杂查询
1.排序
ORDER BY 子句来设定哪个字段哪种方式来进行排序,再返回搜索结果。
desc:降序
select * from blog order by balance desc;
asc:升序,默认,可不写
select * from blog order by balance asc;
多字段排序
update blog set age = 25 where age < 25;
先根据年龄升序,再根据余额降序
select * from blog order by age asc, balance desc;
2.分组
GROUP BY 语句根据一个或多个列对结果集进行分组。
新建员工表
CREATE TABLE `employee` (
`id` int NOT NULL,
`name` varchar(20) NOT NULL DEFAULT '',
`identity` varchar(20) NOT NULL DEFAULT '',
`signin` tinyint NOT NULL DEFAULT '0' COMMENT '打卡次数',
`date` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
插入数据
INSERT INTO `employee` VALUES
('1', '小明', 'firemen', 3, '2022-02-21'),
('2', '小王', 'doctor', 3, '2022-02-21'),
('3', '小丽', 'police', 3, '2022-02-21'),
('4', '小王', 'doctor', 2, '2022-02-22'),
('5', '小明', 'firemen', 1, '2022-02-22'),
('6', '小丽', 'police', 3, '2022-02-22'),
('7', '小明', 'firemen', 2, '2022-02-23'),
('8', '小王', 'doctor', 2, '2022-02-23'),
('9', '小红', 'nurse', 3, '2022-02-23');
统计每人打卡记录数
SELECT name, COUNT(*) FROM employee GROUP BY name;
WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)
统计每人打卡总数
SELECT name, SUM(signin) as signin_count FROM employee GROUP BY name WITH ROLLUP;
其中记录 NULL 表示所有人的登录次数。
使用 coalesce 来设置一个可以取代 NUll 的名称
coalesce 语法:select coalesce(a,b,c);
SELECT name, SUM(signin) as signin_count FROM employee GROUP BY name WITH ROLLUP;
3.联合查询
UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。
UNION ALL:返回所有结果集,包含重复数据。
select author from blog
UNION ALL
select identity from employee;
报错:Illegal mix of collations for operation ‘UNION’
原因:相同字段的编码不一致造成的
解决:修改blog表的author字段
alter table blog modify `author` varchar(40) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '';
UNION DISTINCT: 删除结果集中重复的数据。默认,可不写
select author from blog
UNION
select identity from employee;
4.多表连接
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
内连接
INNER 可以省略
select b.author, b.age, b.title, e.name, e.signin from blog b
INNER JOIN employee e on b.author = e.identity;
where条件实现内连接效果
select b.author, b.age, b.title, e.name, e.signin from blog b,employee e
where b.author = e.identity;
左连接:读取左边数据表的全部数据,即便右边表无对应数据。
select b.author, b.age, b.title, e.name, e.signin from blog b
LEFT JOIN employee e on b.author = e.identity;
右连接:读取右边数据表的全部数据,即便左边边表无对应数据。
select b.author, b.age, b.title, e.name, e.signin from blog b
RIGHT JOIN employee e on b.author = e.identity;
来源:https://blog.csdn.net/qq_43654581/article/details/122980185


猜你喜欢
- 前言:上一篇博客我用AOP+AbstractRoutingDataSource实现了MySQL读写分离,自己写代码实现判断该使用哪个数据源挺
- 通过神经网络实现线性回归的拟合训练过程只训练一轮的算法是:for 循环,直到所有样本数据使用完毕:读取一个样本数据前向计算反向传播更新梯度P
- 1、就按单介绍MySQL服务器的安全基础是:用户应该对他们需要的数据具有适当的访问权,既不能多也不能少。换句话说,用户不能对过多的数据具有过
- 前言这个系列的文章我们使用以下的顺序进行讲解:Pattern 详解;Matcher 详解;正则表达式语法详解。接下来先来介绍 Pattern
- 在Python中,有些开源项目中的方法返回结果为self. 对于不熟悉这种用法的读者来说,这无疑使人困扰,本文的目的就是给出这种语法的一个解
- Python pip安装lxml出错的问题解决办法1. 在使用pip安装lxml过程中出现了一下错误: &
- python实现猫捉老鼠小游戏首界面开始游戏界面然后键盘操作小老鼠上下左右移动,猫自己去追,当猫追上老鼠则游戏结束这里用时3.2秒,最后将游
- pandas有groupby分组函数和sort_values排序函数,但是如何对dataframe分组之后排序呢?In [70]: df =
- <html><head><meta http-equiv=Content-Type content="
- 本文对于先前系列文章中实现的C/Python代码统计工具(CPLineCounter),通过C扩展接口重写核心算法加以优化,并与网上常见的统
- 技术栈:uniapp-H5+uniapp-微信小程序(vue3+vite2+ts)前言:在单位做项目的时候碰到一个需求,需要从微信小程序跳转
- 怎样判断一个JavaScript变量是array还是obiect? 答案: 1、如果你只是用typeof来检查该变量,不论是array还是o
- wheel文件Wheel和Egg都是python的打包格式,目的是支持不需要编译或制作的安装过程,实际上也是一种压缩文件,将.whl的后缀改
- max pooling是CNN当中的最大值池化操作,其实用法和卷积很类似有些地方可以从卷积去参考【TensorFlow】 tf.nn.con
- ORACLE的数据字典是数据库的重要组成部分之一,它随着数据库的产生而产生, 随着数据库的变化而变化, 体现为sys用户下的一些表和视图。数
- 前段时间看了一期《最强大脑》,里面各种繁花曲线组合成了非常美丽的图形,一时心血来潮,想尝试自己用代码绘制繁花曲线,想怎么组合就怎么组合。真实
- 前言在跑项目时,常常会安装很多的包,也通常会遇到需要安装指定版本的包,以及包与包不兼容的问题。比如:在项目1中安装librosa时,会自动安
- 我见到有的网站好像可以把数据库的记录读到表格里去,是这样的吗?如何做到的?可能是这样的,因为我们确实能把数据库里的记录用表格来储存,看看下面
- 这个分页使用的是0游标,也就是Rs.Open Sql,Conn,0,1。但是感觉也快不了多少,10万条数据的分页时间300多豪秒之间。代码如
- 如果你取相对路径不是在主文件里,可能就会有相对路径问题:"No such file or directory"。因为 p