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

一、连接查询

图解示意图

7ef5bb663e3e8f4c6f37662c9fbf4217.png

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351572.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

针对故障场景的血液,汗液和书写自动集成测试

去年冬天,我为仍在工作的客户编写并发布了一项服务。 总体而言,该服务满足了业务需求和性能要求,但是使用该服务的一个团队告诉我,他们定期遇到一个问题,该问题是该服务将返回500个错误,并且在重新启动该服…

java 8 update 11_从Java 8升级到Java 11应该注意的问题

从 Java 8迁移到Java 11比大多数升级更棘手。以下是这个过程的一些注意事项。模块在Java 9中Java引入了历史上最大的变化之一 是模块,但:不必将你自己的代码模块化以后才能升级到Java 11。在大多数情况下,放在类路径classpath上的代码能继续在…

标签树的三种遍历

一、标签树的下行遍历 属性说明.contents子节点的列表&#xff0c;将<tag>所有儿子节点存入列表中&#xff08;只能获取下一级儿子节点&#xff09;.children子节点的迭代类型&#xff0c;与.contents类似&#xff0c;用于循环遍历儿子节点.descendants子孙节点的迭代类型…

Git 使用规范流程

团队开发中&#xff0c;遵循一个合理、清晰的Git使用流程&#xff0c;是非常重要的。 否则&#xff0c;每个人都提交一堆杂乱无章的commit&#xff0c;项目很快就会变得难以协调和维护。 下面是ThoughtBot 的Git使用规范流程。我从中学到了很多&#xff0c;推荐你也这样使用Git…

oracle安装静默

安装环境&#xff1a;centos71、修改主机名 /etc/sysconfig/network#HOSTNAMEoracledb.012、修改ip和对应的主机名 /etc/hosts#10.5.1.190 oracledb.013、关闭Selinux /etc/selinux/config#SELINUXdisabled4、参考官方文档安装依赖的软件包 binutils-2.23.52.0.1-12.el7.x86_64…

[MEGA DEAL] Ultimate Java开发和认证指南(59%折扣)

通过介绍世界上最受欢迎的编程语言之一掌握Java编程概念 嘿&#xff0c;怪胎&#xff0c; 本周&#xff0c;在我们的JCG Deals商店中 &#xff0c;我们提供了一个极端的报价 。 我们提供的《 Ultimate Java Development and Certification Guide 》 仅售20美元&#xff0c;而…

python浅拷贝的说法_Python中List的复制(直接复制、浅拷贝、深拷贝)

直接赋值&#xff1a;如果用 直接赋值&#xff0c;是非拷贝方法。这两个列表是等价的&#xff0c;修改其中任何一个列表都会影响到另一个列表。old [1,[1,2,3],3]new []for i in range(len(old)):new.append(old[i])new[0] 3new[1][0] 3-----------------------Before:[1,…

AliOS-Things Visual studio code helloworld 入门

配置环境的时候别忘了下载&#xff1a;GCC工具链&#xff1a;https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads AliOS Things 完成第一个应用&#xff1a;Hello World 全局掌控 从Git上下载源码用VSCode打开源码&#xff0c;查看源码的目录结构打开Hello…

java 联网_java网络

这个图很形象的展示了OSI的五层架构之间的关系。OSI被称为开放式互联&#xff0c;是国际标准组织制定的网络模型&#xff0c;本来是七层&#xff0c;后来把表现层和会话层加到应用层里面了。那么五层模型中的每一层具体都是干什么的呢&#xff1f;在标准的网络模型中&#xff0…

[小米OJ] 4. 最长连续数列

思路&#xff1a; 时间限制为O(n)&#xff0c;即不能使用先排序后寻找的方法。 这里利用哈希表查询插入复杂度都为O(1)的特性来解&#xff0c;利用一个哈希表来保存每一个数字以及其所在数列的长度。 遍历每一个数字n&#xff1a;查询表中是否存在n-1和n1&#xff0c;若存在&am…

控制反转

控制反转[编辑] 维基百科&#xff0c;自由的百科全书控制反转&#xff08;Inversion of Control&#xff0c;缩写为IoC&#xff09;&#xff0c;是面向对象编程中的一种设计原则&#xff0c;可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入&#xff08;Depe…

使用Mutability Detector对Java数据类的不变性进行单元测试

在我们所有的项目中&#xff0c;我们使用的数据类根据定义包含数据&#xff08;字段&#xff09;&#xff0c;但不包含&#xff08;业务&#xff09;逻辑。 根据最佳编码实践&#xff0c;数据类最好应该是不可变的&#xff0c;因为不可变性意味着线程安全。 这里的主要参考是J…

三种单例模式的C++实现

简介 因为在设计或开发中&#xff0c;肯定会有这么一种情况&#xff0c;一个类只能有一个对象被创建&#xff0c;如果有多个对象的话&#xff0c;可能会导致状态的混乱和不一致。这种情况下&#xff0c;单例模式是最恰当的解决办法。它有很多种实现方式&#xff0c;各自的特性不…

centos安装Redis

vRedis的安装 ♛ 1.0 下载Rediswget http://download.redis.io/releases/redis-5.0.2.tar.gz ♛ 1.1 解压tar -zxvf redis-5.0.2.tar.gz ♛ 1.2 安装gcc依赖Redis是C实现的&#xff0c;需要gcc来进行编译&#xff0c;先安装gcc。 yum install gcc ♛ 1.3 打开Redis目录cd redis…

maven插件编写_编写Maven插件的提示

maven插件编写最近&#xff0c;我花了很多时间为Maven编写插件或在其中工作。 它们简单&#xff0c;有趣且有趣。 我以为我会分享一些技巧&#xff0c;使编写它们时的生活更轻松。 提示1&#xff1a;将任务与Mojo分开 最初&#xff0c;您将把mojo的所有代码放入mojo的类&…

e3是合法浮点数吗_下列哪些是不合法的浮点数的选项是 123 2e4.2 .e5 -e3 .234 1e3

共回答了16个问题采纳率&#xff1a;93.8%浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数.具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学记数法.由此可以看出…

VC的Win32控制台程序中使用MFC库文件

如果想要在VC中的Win32控制台程序中使用CString类&#xff0c;应注意下列情况&#xff1a; 1.必须包含头文件#include <afx.h> 2.Project ----settings... ----General---- Microsoft Foundation Classes: Use MFC in a Shared DLL

java能否调用com_java调用com

一、C#写com组件开发环境 vs20051、新建工程:ClassLibrary1 //根据自己需要取工程名2、右键点击工程->应用程序->程序集信息->使程序集com可见&#xff0c;打上勾右键点击工程->生成->为com Interop注册 打上勾3、设置强签名打开Visual Studio Command Pr…

JUnit规则–引发异常时执行附加验证

在本文中&#xff0c;我将快速向您展示如果您需要解决以下挑战&#xff0c;那么JUnit规则有多方便 方法捕获异常并必须执行一些额外的任务&#xff0c;然后再抛出或引发包装异常。 调用额外任务和引发的异常应通过单元测试进行验证。 这意味着您有一些这样的代码 public cla…

十分钟搞清字符集和字符编码

什么是字符集 什么是字符编码 UTF-8和Unicode的关系 UTF-8编码简介 为什么会出现乱码 如何识别乱码的本来想要表达的文字 常见问题处理之Emoji 本文将简述字符集&#xff0c;字符编码的概念。以及在遭遇乱码时的一些常用诊断技巧 背景&#xff1a;字符集和编码无疑是IT菜鸟甚至…