本文源码:GitHub·点这里 || GitEE·点这里

一、连接查询

图解示意图

1、建表语句

部门和员工关系表:

CREATE TABLE `tb_dept` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',`deptName` varchar(30) DEFAULT NULL COMMENT '部门名称',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
CREATE TABLE `tb_emp` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',`empName` varchar(20) DEFAULT NULL COMMENT '员工名称',`deptId` int(11) DEFAULT '0' COMMENT '部门ID',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

2、七种连接查询

  • 图1:左外连接
select t1.*,t2.empName,t2.deptId
from tb_dept t1 LEFT JOIN tb_emp t2 on t1.id=t2.deptId;
  • 图2:右外连接
select t1.*,t2.empName,t2.deptId
from tb_dept t1 RIGHT JOIN tb_emp t2 on t1.id=t2.deptId;
  • 图3:内连接
select t1.*,t2.empName,t2.deptId
from tb_dept t1 inner join tb_emp t2 on t1.id=t2.deptId;
  • 图4:左连接

查询tb_dept表特有的地方。

select t1.*,t2.empName,t2.deptId
from tb_dept t1 LEFT JOIN tb_emp t2 on t1.id=t2.deptId
WHERE t2.deptId IS NULL;
  • 图5:右连接

查询tb_emp表特有的地方。

select t1.*,t2.empName,t2.deptId
from tb_dept t1 RIGHT JOIN tb_emp t2 on t1.id=t2.deptId
WHERE t1.id IS NULL;
  • 图6:全连接
select t1.*,t2.empName,t2.deptId
from tb_dept t1 LEFT JOIN tb_emp t2 on t1.id=t2.deptId
UNION
select t1.*,t2.empName,t2.deptId
from tb_dept t1 RIGHT JOIN tb_emp t2 on t1.id=t2.deptId
  • 图7:全不连接

查询两张表互不关联到的数据。

select t1.*,t2.empName,t2.deptId
from tb_dept t1 RIGHT JOIN tb_emp t2 on t1.id=t2.deptId
WHERE t1.id IS NULL
UNION
select t1.*,t2.empName,t2.deptId
from tb_dept t1 LEFT JOIN tb_emp t2 on t1.id=t2.deptId
WHERE t2.deptId IS NULL

二、时间日期查询

1、建表语句

CREATE TABLE `ms_consume` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',`user_id` int(11) NOT NULL COMMENT '用户ID',`user_name` varchar(20) NOT NULL COMMENT '用户名',`consume_money` decimal(20,2) DEFAULT '0.00' COMMENT '消费金额',`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='消费表';

2、日期统计案例

  • 日期范围内首条数据

场景:产品日常运营活动中,经常见到这样规则:活动时间内,首笔消费满多少,优惠多少。

SELECT * FROM(SELECT * FROM ms_consumeWHEREcreate_time BETWEEN '2019-12-10 00:00:00' AND '2019-12-18 23:59:59'ORDER BY create_time) t1
GROUP BY t1.user_id ;
  • 日期之间时差

场景:常用的倒计时场景

SELECT t1.*,timestampdiff(SECOND,NOW(),t1.create_time) second_diff
FROM ms_consume t1 WHERE t1.id='9' ;
  • 查询今日数据
-- 方式一
SELECT * FROM ms_consume
WHERE DATE_FORMAT(NOW(),'%Y-%m-%d')=DATE_FORMAT(create_time,'%Y-%m-%d');
-- 方式二
SELECT * FROM ms_consume
WHERE TO_DAYS(now())=TO_DAYS(create_time) ;
  • 时间范围统计

场景:统计近七日内,消费次数大于两次的用户。

SELECT user_id,user_name,COUNT(user_id) userIdSum
FROM ms_consume WHERE create_time>date_sub(NOW(), interval '7' DAY)
GROUP BY user_id  HAVING userIdSum>1;
  • 日期范围内平均值

场景:指定日期范围内的平均消费,并排序。

SELECT * FROM(SELECT user_id,user_name,AVG(consume_money) avg_moneyFROM ms_consume tWHERE t.create_time BETWEEN '2019-12-10 00:00:00' AND '2019-12-18 23:59:59'GROUP BY user_id) t1
ORDER BY t1.avg_money DESC;

三、树形表查询

1、建表语句

CREATE TABLE ms_city_sort (`id` INT (11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',`city_name` VARCHAR (50) NOT NULL DEFAULT '' COMMENT '城市名称',`city_code` VARCHAR (50) NOT NULL DEFAULT '' COMMENT '城市编码',`parent_id` INT (11) NOT NULL DEFAULT '0' COMMENT '父级ID',`state` INT (11) NOT NULL DEFAULT '1' COMMENT '状态:1启用,2停用',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',PRIMARY KEY (id)
) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '城市分类管理';

2、直接SQL查询

SELECT t1.*, t2.parentName
FROM ms_city_sort t1
LEFT JOIN (SELECTm1.id,m2.city_name parentNameFROMms_city_sort m1,ms_city_sort m2WHERE m1.parent_id = m2.idAND m1.parent_id > 0
) t2 ON t1.id = t2.id;

3、函数查询

  • 查询父级名称
DROP FUNCTION IF EXISTS get_city_parent_name;
CREATE FUNCTION `get_city_parent_name`(pid INT)
RETURNS varchar(50) CHARSET utf8
begin declare parentName VARCHAR(50) DEFAULT NULL;SELECT city_name FROM ms_city_sort WHERE id=pid into parentName;return parentName;
endSELECT t1.*,get_city_parent_name(t1.parent_id) parentName FROM ms_city_sort t1 ;
  • 查询根节点子级
DROP FUNCTION IF EXISTS get_root_child;
CREATE FUNCTION `get_root_child`(rootId INT) RETURNS VARCHAR(1000) CHARSET utf8BEGIN DECLARE resultIds VARCHAR(500); DECLARE nodeId VARCHAR(500);SET resultIds = '%'; SET nodeId = cast(rootId as CHAR);WHILE nodeId IS NOT NULL DO SET resultIds = concat(resultIds,',',nodeId);SELECT group_concat(id) INTO nodeId FROM ms_city_sort WHERE FIND_IN_SET(parent_id,nodeId)>0;END WHILE; RETURN resultIds;
END  ;SELECT * FROM ms_city_sort WHERE FIND_IN_SET(id,get_root_child(5)) ORDER BY id ;

四、源代码地址

GitHub·地址
https://github.com/cicadasmile/mysql-data-base
GitEE·地址
https://gitee.com/cicadasmile/mysql-data-base

MySQL基础篇(01):经典实用查询案例,总结整理相关推荐

  1. mysql经典总结文章_MySQL基础篇(01):经典实用查询案例,总结整理

    MySQL基础篇(01):经典实用查询案例,总结整理 发布时间:2020-02-26 22:25:21 来源:51CTO 阅读:244 作者:知了一笑 本文源码:GitHub·点这里 || GitEE ...

  2. Java基础篇(01):基本数据类型,核心点整理

    本文源码:GitHub·点这里 || GitEE·点这里 一.基本类型 1.基本类型 不使用New创建,声明一个非引用传递的变量,且变量的值直接置于堆栈中,大小不随运行环境变化,效率更高.使用new创 ...

  3. MySQL进阶篇(01):基于多个维度,分析服务器性能

    本文源码:GitHub·点这里 || GitEE·点这里 一.服务器性能简介 1.性能定义 服务器性能优化是一项非常艰巨的任务,当然也是很难处理的问题,在写这篇文章的时候,特意请教下运维大佬,硬件工程 ...

  4. MySQL基础篇:子查询

    文章目录 概述 where型子查询 from型子查询 EXISTS型子查询 复制表子查询 概述 在某些情况下,当进行一个查询时,需要的条件或数据要用另一个select语句的结果,这个时候,就要用到** ...

  5. 最全MySQL基础篇

    文章目录 导入表的问题 第三章_最基本的SELECT语句 1. SQL语言的规则和规范 1) 基本规则 2) SQL大小写规范(建议遵守) 3) 注释 4) 命名规则 2. 基本的SELECT语句 1 ...

  6. MySQL——基础篇

    MySQL--基础篇 一.数据库的相关概念 数据库(database) 保存有组织的数据的容器(通常是一个文件或一组文件). 表(table) 某种特定类型数据的结构化清单. 模式(schema) 关 ...

  7. 视觉slam学习|基础篇01

    系列文章目录 SLAM基础篇01 SLAM基础篇02 目录 系列文章目录 前言 SLAM是干什么的? SLAM的数学建模 机器人学基础 齐次矩阵 关于旋转的表示:旋转向量.欧拉角.四元数 李群和李代数 ...

  8. mysql 基础篇(二) 账号、权限管理

    mysql 基础篇(二) 账号.权限管理.备份与还原 建立账号密码: Grant all on test.* to "cj"@"localhost" ident ...

  9. Mysql基础篇(1)—— 基础概念、DML基本语法和表连接

    前言 Mysql基础篇相关的内容是看了康师傅的视频做的笔记吧 数据库相关概念 DB: 数据库(Database) ​ 存储数据的仓库,本质是一个文件系统.它保存了一系列有组织的数据. DBMS:数据库 ...

最新文章

  1. 高通CVPR神研究:视频处理计算量降低78%,教卷积层自己“挑像素”,卡成PPT的视频纵享丝滑...
  2. “无中生有”计算机视觉探奇
  3. ifstat 命令查看linux网络I/O情况
  4. Android多线程分析之三:Handler,Looper的实现
  5. 在phpmyadmin后台获取webshell方法汇总整理
  6. [HEOI2015]兔子与樱花
  7. 软件生命周期模型 -------- 瀑布模型 和 原型模型
  8. HDOJ 4632
  9. aqua data studio 连接db2
  10. PS--常用操作技巧(一)快捷键
  11. ssh-keygen认证密钥
  12. onedrive php映射,Microsoft OneDrive空全局账号自建API(Rclone、OneManager-php)
  13. EOJ - 我决不会TLE (一个智障的题目)
  14. KML转geojson在线工具和数据抽稀工具
  15. COMP0037 Coursework
  16. MATLAB计算气象水文要素年内分配指数
  17. 太难了!关于程序员的43个梗,你知道多少呢
  18. Springboot整合WebSocket实现网页版聊天,快来围观!
  19. 小学计算机兴趣组活动记录,小学信息技术兴趣小组活动记录.doc
  20. linux 无法获得磁盘信息,Linux 磁盘无法umount

热门文章

  1. d-link路由器samba设置_d-link云路由器怎么设置 d-link云路由器设置教程【详解】
  2. windows IOCP模型
  3. PHP基本语法(实例)
  4. Windows平台下go编译器LiteIDE的安装和使用
  5. Python subprocess.Popen 实时输出 stdout(正确管道写法)
  6. bootstrap-multiselect加载本地数据
  7. Tomcat下部署多个项目
  8. C++的new和delete
  9. MONO,原来你是水中月
  10. servlet乱码问题