文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL之复杂查询的实现

2024-04-02 19:55

关注

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;

在这里插入图片描述

 到此这篇关于MySQL之复杂查询的实现的文章就介绍到这了,更多相关MySQL 复杂查询内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯