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

发布时间:2020-02-26 22:25:21

来源:51CTO

阅读:244

作者:知了一笑

本文源码: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_consume

WHERE

create_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_money

FROM ms_consume t

WHERE 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 (

SELECT

m1.id,m2.city_name parentName

FROM

ms_city_sort m1,ms_city_sort m2

WHERE m1.parent_id = m2.id

AND 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;

end

SELECT 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 utf8

BEGIN

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经典总结文章_MySQL基础篇(01):经典实用查询案例,总结整理相关推荐

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

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

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

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

  3. 视频教程:Java七大外企经典面试套路之基础篇

    视频教程:Java七大外企经典面试套路之基础篇 Java是Sun公司推出的一种编程语言.它是一种通过解释方式来执行的语言,语法规则和C++类似.同时,Java也是一种跨平台的程序设计语言. 本教程主要 ...

  4. 自然语言处理——基础篇01

    自然语言处理--基础篇01 一.什么是自然语言处理? 二.自然语言处理的难点与特点? 三.语言模型 四.NLP的常见任务类型 1. 中文分词 2. 子词切分(Subword) 3. 句法分析 4. 语 ...

  5. 基础篇 | 01 机器学习基础

    本系列概述 核心内容是深度学习,只不过我们会进行代码实践,来巩固我们讲的概念的基础.会使用机器学习开发可以实际使用的工程项目,这也是我们这个系列跟其它机器学习最大区别的地方. 深度学习的意义 当然,不 ...

  6. 史上最简单MYSQL教程详解(基础篇)之初识MySQL数据库以及环境配置

    什么是数据库 数据库管理系统 数据库应用程序 数据库的种类 什么是MySQL MySQL数据库有哪些优势 SQL语句 常用术语 MySQL的安装 什么是数据库 数据库通俗的说法就是将数据信息集中起来统 ...

  7. mysql第一章试题_MySQL基础-第一章

    1.MySQL服务器逻辑架构图 主要关注第二层架构.大多数MySQL的核心服务功能都在这一层,包括查询解析,分析,优化,缓存以及所有内置函数,以及所以跨存储引擎(通用)功能也都在这一层实现,例如:存储 ...

  8. MySQL基础篇(01):经典实用查询案例,总结整理

    本文源码:GitHub·点这里 || GitEE·点这里 一.连接查询 图解示意图 1.建表语句 部门和员工关系表: CREATE TABLE `tb_dept` (`id` int(11) NOT ...

  9. MySQL中定义fk语句_MySQL基础篇/第3篇:MySQL基本操作语句.md · qwqoo/MySQL-Review - Gitee.com...

    ### 第3篇:MySQL基本操作语句 - MySQL基础操作 #### 排序检索数据 - 之前的数据没有进行排序,其是按照默认在数据表中的数据返回的 - SELECT语句的ORDER BY 子句进行 ...

最新文章

  1. centos7 yum 安装 redis
  2. Coding: 整数反转
  3. 计算机组成原理第04章在线测试,计算机组成原理第四章单元测试(二)(含答案).docx...
  4. opencv检测相交点_OpenCV特征点检测------ORB特征
  5. 前端学习(2524):自定义指令(钩子函数)
  6. 规范化流程化提交自己代码到远程gitlab服务器
  7. php io操作,lua 的io操作,非常详细
  8. mysql装完是什么样儿的_Win7系统安装MySQL之后找不到指定文件与服务如何解决?...
  9. 腾讯校招开奖,总包拿了 68w!
  10. Jmeter及JDK下载安装配置教程
  11. 西门子S7200PLC连接CHNet-S7200PD实现以太网通信配置方法
  12. 自动将word转成双层pdf
  13. Vehicle Spy3软件常用功能之总线负载率
  14. 【ASP.NET】——asp.net入门
  15. 微信小程序开发——最新网络流行语(前言)
  16. 建立一个电脑网络至少需要两台计算机,两台电脑见建立一个局域网方法介绍
  17. 中国人想在外国卖东西,这些经典网站不能错过
  18. 写论文时,Word文档修改保存后,文件越来越大的解决方法
  19. Photoshop学习(十六):使用矢量蒙版
  20. R语言当前文件工作路径

热门文章

  1. Mongodb数据库连接
  2. tomcat实现session集群及tomcat+memcached共享session存储(四)
  3. 设计模式(2)策略模式 (模式讲解+应用)
  4. ***CI新增记录成功后的返回值判断,是用isset还是empty
  5. org.hibernate.annotationexception no identifier specified for entity
  6. Android应用程序组件Content Provider简要介绍和学习计划
  7. ubuntu10右键脚本中增加发送到命令
  8. SQL Server Profiler的一个小问题
  9. WF:要想绑到两个活动的属性值---依赖属性的定义方法
  10. 计算机windows多用户,windows Server 2012 专业版配置多用户远程桌面连接