首页 > 数据库 >mysql基础查询案例(连接查询、时间日期查询、树形表查询、函数查询、日期统计案例)

mysql基础查询案例(连接查询、时间日期查询、树形表查询、函数查询、日期统计案例)

时间:2024-07-27 22:24:15浏览次数:16  
标签:deptId NULL t2 t1 案例 日期 查询 tb id

一、连接查询

图解示意图

在这里插入图片描述

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 ;

标签:deptId,NULL,t2,t1,案例,日期,查询,tb,id
From: https://blog.csdn.net/weixin_43860634/article/details/140665490

相关文章

  • ansible案例
    系统初始化ansible-playbook/root/ansible/yaml/initos-playbook.yaml--tags="initos"--list-hosts[root@prome-01file]#cat/root/ansible/yaml/initos-playbook.yaml-hosts:initos#定义需要执行主机remote_user:ro......
  • 决策树算法详解:原理、实现与应用案例
    目录一:简介二:决策树算法原理决策树的基本概念信息增益和熵基尼指数卡方检验三:决策树的构建过程数据预处理决策树生成算法剪枝技术决策树的优缺点四:决策树算法的实现使用Python实现决策树使用R语言实现决策树实现过程中需要注意的问题五:决策树算法的优化与改进......
  • SGLang 大模型推理框架 qwen2部署使用案例;openai接口调用、requests调用
    参考:https://github.com/sgl-project/sglang纯python写,号称比vllm、tensorRT还快暂时支持模型安装可以pip、源码、docker安装,这里用的pip注意flashinfer安装最新版,不然会可能出错误ImportError:cannotimportname‘top_k_top_p_sampling_from_probs’from‘fla......
  • 打破自闭症束缚:儿童康复案例揭秘
    在浩瀚的康复领域中,有这样一所机构,它如同温暖的阳光,穿透自闭症的阴霾,为无数家庭带来了希望与光明。这,就是星启帆——国内规模较大的全寄宿制自闭症儿童康复机构,一个专注于中重度广泛性发育障碍儿童康复的温馨家园。专业引领,重塑希望星启帆之所以能在众多康复机构中脱颖而出,......
  • 《梦醒蝶飞:释放Excel函数与公式的力量》23.1 学生主导的项目案例
     第23章:学生项目展示 23.1学生主导的项目案例在《梦醒蝶飞:释放Excel函数与公式的力量》中,第23章将展示学生主导的项目案例。这些案例展示了学生如何运用所学的Excel函数与公式,解决实际问题,展示他们的创造力和分析能力。案例1:学校活动管理系统背景:某学校希望建立一个活动......
  • mybatis plus 使用LambdaQueryWrapper设置复杂的条件查询
    LambdaQueryWrapper提供了许多常用的方法,用于构建查询条件。下面列举一些常用的方法:eq(column,value):等于ne(column,value):不等于gt(column,value):大于ge(column,value):大于等于lt(column,value):小于le(column,value):小于等于like(column,value):模糊......
  • Python数据分析案例55——基于LSTM结构自编码器的多变量时间序列异常值监测
    案例背景时间序列的异常值检测是方兴未艾的话题。比如很多单变量的,一条风速,一条用电量这种做时间序列异常值检测,想查看一下哪个时间点的用电量异常。多变量时间序列由不同变量随时间变化的序列组成,这些时间序列在实际应用中通常来自不同的传感器或数据源。多变量时间序列异......
  • EI、ISTP和SCI查询途径(确认EI、ISTP和SCI检索的方法)
    确实,许多学术数据库如EI、ISTP和SCI等,通常需要通过购买订阅或访问权限才能使用。这通常由高校、研究机构或图书馆提供给其成员或学生。对于个人用户来说,这可能是一个门槛,特别是如果他们只需要偶尔使用这些资源。免费查询和检索的一些建议:利用学术机构资源:如果您是高校学生或......
  • 如何在 Litestar GET 路由中使用 Pydantic 模型作为查询参数
    我正在尝试使用Litestar创建一条GET路由,该路由利用Pydantic模型作为查询参数。但是,序列化无法按预期工作。这是重现我的问题的最小示例:frompydanticimportBaseModelfromlitestarimportLitestar,get,ControllerclassInput(BaseModel):foo:str......
  • 谈一谈一条SQL的查询、更新语句究竟是如何执行的?
    文章目录理解执行流程衍生知识redologbinlog本篇文章是基于《MySQL45讲》来写的个人理解与感悟。理解先看下图:上一篇文章我们讨论了一条SQL查询语句的执行流程,并介绍了执行过程中涉及的处理模块。回顾一下:大体来说,MySQL可以分为Server层和存储引擎层两部分......