(SQL学习随笔3)SQL语法——SELECT语句

news2025/2/26 3:07:23

导航

    • 基本认识
      • FROM关键字
      • LIMIT与OFFSET
      • ORDER BY
    • WHERE条件查询
      • 单值比较
      • 多条件组合
      • 范围筛选
      • 空值匹配
      • LIKE通配
      • 条件分组
    • 运算符和函数
      • 数据变换
    • 分组运算
    • 表连接
      • 内连接
      • 左(右)外连接
      • 全外连接
    • 外键约束
    • 窗口函数
    • UNION:表上下拼接
    • 子查询
    • 条件判断
      • PostgreSQL
      • MySQL

基本认识

SELECT 'test'; -- 查询单个值
SELECT 1, 2.3, 'test', true; -- 查询多个值
SELECT 1 AS 整数, 2.1 AS 浮点数, '测试' AS 字符串, true AS 布尔型; -- 针对每个查询到的值,在其后配合AS关键字设置别名
SELECT 1 + 2, 5 * 10, version() AS 版本信息; -- 查询函数或算式运算结果

FROM关键字

-- 创建示例数据表
CREATE TABLE tips
(
    total_bill FLOAT,
    tip        FLOAT,
    sex        CHAR(6),
    smoker     CHAR(3),
    day        CHAR(3),
    time       TEXT,
    size       INT
);

-- 插入示例数据
INSERT INTO tips
VALUES (16.99, 1.01, 'Female', 'No', 'Sun', 'Dinner', 2),
       (10.34, 1.66, 'Male', 'No', 'Sun', 'Dinner', 3),
       (21.01, 3.5, 'Male', 'No', 'Sun', 'Dinner', 3),
       (23.68, 3.31, 'Male', 'No', 'Sun', 'Dinner', 2),
       (24.59, 3.61, 'Female', 'No', 'Sun', 'Dinner', 4),
       (25.29, 4.71, 'Male', 'No', 'Sun', 'Dinner', 4),
       (8.77, 2.0, 'Male', 'No', 'Sun', 'Dinner', 2),
       (26.88, 3.12, 'Male', 'No', 'Sun', 'Dinner', 4),
       (15.04, 1.96, 'Male', 'No', 'Sun', 'Dinner', 2),
       (14.78, 3.23, 'Male', 'No', 'Sun', 'Dinner', 2);
SELECT * FROM tips;
SELECT tip, sex FROM tips;
SELECT tip AS 小费 FROM tips;

LIMIT与OFFSET

SELECT * FROM tips LIMIT 3; -- 查询前三行
SELECT * FROM tips LIMIT 3 OFFSET 8; -- 从第9行(包含)开始查询三行

ORDER BY

SELECT * FROM tips ORDER BY total_bill DESC; -- 单字段降序(默认升序)
SELECT * FROM tips ORDER BY size ASC, total_bill DESC; -- 多字段排序

WHERE条件查询

-- 示例数据
CREATE TABLE funds
(
    fund_code          VARCHAR(10) PRIMARY KEY,
    fund_name          TEXT,
    fund_type          TEXT,
    within_a_week      FLOAT,
    within_a_month     FLOAT,
    within_three_month FLOAT,
    within_this_year   FLOAT,
    within_six_month   FLOAT,
    within_one_year    FLOAT
);

INSERT INTO funds
VALUES ('5669', '前海开源公用事业股票', '股票型', 0.0714, 0.2844, 0.6162, 0.3708, 0.3582, 1.263),
       ('828', '泰达转型机遇', '股票型', 0.0328, 0.1904, 0.5942, 0.2832, 0.2827, 1.0693),
       ('689', '前海开源新经济混合', '混合型', 0.0769, 0.2797, 0.5918, 0.3768, 0.3504, 0.9222),

单值比较

= 等于
<> 不等于
<<= 小于、小于等于
>>= 大于、大于等于

SELECT * FROM funds WHERE fund_type <> '混合型';

多条件组合

SELECT * FROM funds 
WHERE fund_type <> '混合型' AND within_three_month > 0.5; -- AND

SELECT * FROM funds
WHERE fund_type = '股票型' OR fund_type = '债券型'; -- OR

SELECT * FROM funds
WHERE fund_type IN ('股票型', '债券型'); -- IN

SELECT * FROM funds
WHERE NOT fund_type IN ('股票型', '债券型'); -- NOT(加在完整条件之前)

范围筛选

SELECT * FROM funds
WHERE within_three_month BETWEEN 0.4 AND 0.5; -- BETWEEN ... AND ...

空值匹配

SELECT * FROM funds WHERE within_one_year = NULL; -- 这样不行

SELECT * FROM funds WHERE within_one_year IS NULL; -- 正确

LIKE通配

  • 主要有两种通配符——'%''_',其中'%'代表任意多个字符,'_'代表单个任意字符
SELECT * FROM funds WHERE fund_name LIKE '%新能源%';

SELECT * FROM funds WHERE fund_name LIKE '%a';
SELECT * FROM funds WHERE fund_name LIKE '%A'; -- 在MySQL中,与上面返回一致(不区分大小写)

SELECT * FROM funds WHERE BINARY fund_name LIKE '%A'; -- 强制当成二进制格式后通配

条件分组

SELECT * FROM funds
WHERE (fund_name LIKE '%医药%' AND within_three_month > 0.4)
   OR (fund_name LIKE '%车%' AND within_three_month > 0.45);

运算符和函数

数据变换

  • 文本处理

MySQL

/*
concat(字段1, 字段2, ... ,字段n)用于将传入的若干个【字段】或单个值信息拼接为新的单个字段
left(字段, 截取字符数量)用于从【字段】每条记录最左端开始提取【截取字符数量】个的字符
right(字段, 截取字符数量)用于从【字段】每条记录最右端开始提取【截取字符数量】个的字符
char_length(字段)用于计算传入【字段】每条记录的字符数量(单个汉字亦算作1个字符)
substr(字段, 开始位置, 截取长度)用于提取【字段】从【开始位置】往后最多【截取数量】个字符
regexp_like(字段, 正则表达式)用于判断【字段】中是否存在满足【正则表达式】模式子串,返回1表示存在,0表示不存在
replace(字段, 目标字符串, 替换字符串)用于将【字段】中所有【目标字符串】替换为【替换字符串】
repeat(字段, 重复次数)用于将【字段】复制【重复次数】后进行拼接
reverse(字段)用于将【字段】中每条字符记录进行翻转
*/
SELECT concat(fund_name, ' ', fund_type, ' ', within_a_month) AS 'concat()',
       left(fund_name, 2) AS 'left()',
       right(fund_name, 3) AS 'right()',
       char_length(fund_name) AS 'char_length()',
       substr(fund_name, 3, 4) AS 'substr()',
       regexp_like(fund_name, '医药') AS 'regexp_like()',
       replace(fund_name, '医药', 'medicine') AS 'replace()',
       repeat(fund_name, 3) AS 'repeat()',
       reverse(fund_name) AS 'reverse()'
FROM funds;

PostgreSQL

/*
concat(字段1, 字段2, ... ,字段n)用于将传入的若干个【字段】或单个值信息拼接为新的单个字段
left(字段, 截取字符数量)用于从【字段】每条记录最左端开始提取【截取字符数量】个的字符
right(字段, 截取字符数量)用于从【字段】每条记录最右端开始提取【截取字符数量】个的字符
char_length(字段)用于计算传入【字段】每条记录的字符数量(单个汉字亦算作1个字符)
substr(字段, 开始位置, 截取长度)用于提取【字段】从【开始位置】往后最多【截取数量】个字符
字段 ~ 正则表达式  用于判断【字段】中是否存在满足【正则表达式】模式子串,直接返回返回boolean型判断结果
replace(字段, 目标字符串, 替换字符串)用于将【字段】中所有【目标字符串】替换为【替换字符串】
repeat(字段, 重复次数)用于将【字段】复制【重复次数】后进行拼接
reverse(字段)用于将【字段】中每条字符记录进行翻转
*/
SELECT concat(fund_name, ' ', fund_type, ' ', within_a_month) AS "concat()",
       left(fund_name, 2) AS "left()",
       right(fund_name, 3) AS "right()",
       char_length(fund_name) AS "char_length()",
       substr(fund_name, 3, 4) AS "substr()",
       fund_name ~ '医药' AS "~",
       replace(fund_name, '医药', 'medicine') AS "replace()",
       repeat(fund_name, 3) AS "repeat()",
       reverse(fund_name) AS "reverse()"
FROM funds;

在PostgreSQL中还可以使用 || 来拼接若干个字符型字段:
SELECT fund_name || ' - ' || fund_type FROM funds;

  • 数值计算

PostgreSQL

SELECT 1 + 1 AS,
       1 - 2 AS,
       2 * 5 AS,
       4 / 3 AS 整数除法,
       4 / 3. AS 浮点数除法,
       2 ^ 2 AS 平方,
       |/ 25 AS 平方根,
       5 % 2.2 AS 取余,
       ||/ 27 AS 立方根,
       3! AS 阶乘,
       @ -5.5 AS 绝对值;

MySQL

SELECT 1 + 1 AS,
       1 - 2 AS,
       2 * 5 AS,
       4 / 3 AS 整数除法,
       4 / 3. AS 浮点数除法,
       5 % 2.2 AS 取余,
       sqrt(9) AS 平方根,
       abs(-5.5) AS 绝对值;
  • 聚合函数
SELECT min(within_three_month) AS 最小值,
       max(within_three_month) AS 最大值,
       avg(within_three_month) AS 平均值,
       count(fund_type) AS 计算行数,
       sum(within_three_month) AS 求和
FROM funds;

SELECT DISTINCT fund_type FROM funds; -- 去重
SELECT count(DISTINCT fund_type) FROM funds; -- 统计不重复字段的数量

分组运算

SELECT fund_type, count(*) AS 基金数量, avg(within_a_month) AS 最近一个月平均涨幅 -- 这些字段运算后必须是和分组字段等长的,即对非分组字段进行的运算操作一定是聚合压缩操作
FROM funds
GROUP BY fund_type
ORDER BY 最近一个月平均涨幅 DESC
LIMIT 3;
  • 分组后过滤(HAVING)
SELECT fund_type, count(*) AS 基金数量, avg(within_a_month) AS 最近一个月平均涨幅
FROM funds
GROUP BY fund_type
HAVING count(*) >= 5; -- having筛选条件中只能对分组依据字段进行筛选,或对其他字段进行聚合后筛选

执行顺序

第一步: FROM <left_table>
第二步: ON <join_condition>
第三步: <join_type> JOIN <right_table>
第四步: WHERE <where_condition>
第五步: GROUP BY <group_by_list>
第六步: HAVING <having_condition>
第七步: SELECT
第八步: DISTINCT <select_list>
第九步: ORDER BY <order_by_condition>
第十步: LIMIT <limit_number>

因此在select中定义的别名不能在where或having中使用

表连接

-- 创建商品信息表
CREATE TABLE product_info
(
    product_id       VARCHAR PRIMARY KEY,
    product_category VARCHAR,
    product_name     VARCHAR,
    product_price    FLOAT
);

-- 创建销售记录表
CREATE TABLE sale_records
(
    sold_product_id VARCHAR,
    amount          INT,
    discount        FLOAT
);

-- 插入示例数据
INSERT INTO product_info
VALUES ('ca4ef73a-dd6d-11eb-894e-287fcf8fcac7', '生活用品', '花王蒸汽眼罩12片装', 48.8),
       ('ca4ef73b-dd6d-11eb-922a-287fcf8fcac7', '鞋类', '安踏EDGE跑鞋', 429.0),
       ('ca4ef73c-dd6d-11eb-b7ee-287fcf8fcac7', '鞋类', '匹克态极3.0跑步鞋', 499.0),
       ('ca4ef73d-dd6d-11eb-9fc4-287fcf8fcac7', '办公用品', 'Salli马鞍椅', 2255.0),
       ('ca4ef73e-dd6d-11eb-851b-287fcf8fcac7', '办公用品', 'GAVEE人体工学椅', 3888.0),
       ('ca4ef73f-dd6d-11eb-ba5f-287fcf8fcac7', '办公用品', '赫曼米勒Aeron人体工学椅', 16310.0),
       ('e2d3o9ed-dccb-11eb-we7u-287fcf8fcac7', '数码产品', '华为Mate X2折叠手机', 17799.0);

INSERT INTO sale_records
VALUES ('ca4ef73a-dd6d-11eb-894e-287fcf8fcac7', 2, 0.9),
       ('ca4ef73b-dd6d-11eb-922a-287fcf8fcac7', 6, 0.8),
       ('ca4ef73d-dd6d-11eb-9fc4-287fcf8fcac7', 3, 0.9),
       ('ca4ef73b-dd6d-11eb-922a-287fcf8fcac7', 1, 0.9),
       ('ca4ef73e-dd6d-11eb-851b-287fcf8fcac7', 2, 0.8),
       ('ca4ef73c-dd6d-11eb-b7ee-287fcf8fcac7', 9, 0.7),

内连接

-- 内连接
SELECT DISTINCT product_name FROM sale_records AS a
INNER JOIN product_info AS b
ON a.sold_product_id = b.product_id;

-- 两表中的字段不存在重复,可以省略别名
SELECT DISTINCT product_name FROM sale_records
INNER JOIN product_info
ON sold_product_id = product_id;

左(右)外连接

-- 左外连接
SELECT * FROM product_info
LEFT JOIN sale_records
ON sold_product_id = product_id
WHERE product_name = '华为Mate X2折叠手机';

全外连接

SELECT DISTINCT product_name FROM sale_records
FULL JOIN product_info -- 或 FULL OUTER JOIN (MySQL中没有全外连接)
ON sold_product_id = product_id;

外键约束

-- 创建销售记录表
CREATE TABLE sale_records
(
    sold_product_id VARCHAR REFERENCES product_info(product_id),
    amount          INT,
    discount        FLOAT DEFAULT 1
);

在本例中,即希望sale_records中的sold_prodect_id都能在product_info中找到对应的product_id

INSERT INTO sale_records VALUES ('not_int_product_info', 1, 1); -- 报错,因为product_info表中并不存在product_id为'not_int_product_info'的数据

窗口函数

针对每一条数据单独开一个窗,在窗内执行不同的操作(通常用于既要明细又要聚合的场景)

示例数据:
在这里插入图片描述

  • 需求一:获得每个type下播放量前三名对应的记录
SELECT *
FROM (
         SELECT type, author, title, dense_rank() OVER (PARTITION BY type ORDER BY view DESC) AS top3
         FROM bilibili
     ) AS temp
WHERE top3 <= 3;

注意:窗口函数的执行实在WHERE之后的,因此要获取前三名不能在内层直接用WHERE,而是用嵌套查询在外层使用WHERE

  • 需求二:查询每个type中,在coins降序排名下,每个视频与其下一名之间播放量的差值
select *, view - diff as diff_view
from (
    select type, author, title, view, coins, lead(view, 1) over (partition by type order by coins desc) as diff
    from bilibili
    ) as _; -- FROM 中的子查询必须有一个别名

注意:over子句中起的别名不能在同级select中使用,因此还是要用嵌套查询

更多窗口函数:

  • MySQL
    https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html
  • PostgreSQL
    http://www.postgres.cn/docs/12/functions-window.html

UNION:表上下拼接

SELECT * FROM t1
UNION
SELECT * FROM t2
UNION
SELECT * FROM t3

-- 要求:两表具有相同的字段数量,且字段数据类型相互兼容
-- 最终查询到的表头字段与第一张表t1一致
-- UNION 会自动去重,使用UNION ALL不去重

子查询

SELECT *
FROM (
	SELECT * FROM t1
) as _; -- 子查询必须要给予别名
GROUP BY ...

条件判断

  • PostgreSQL示例数据
-- 懂车帝部分车辆评分及价格信息表
CREATE TABLE car_info
(
    brand VARCHAR,
    score FLOAT,
    price VARCHAR
);

INSERT INTO car_info
VALUES ('轩逸', 3.65, '8.48-15.59万'),
       ('雅阁', 3.94, '15.18-24.18万'),
       ('思域', 3.83, '9.49-15.89万'),
       ('朗逸', 3.62, '6.79-15.89万'),
       ('哈弗H6', 3.81, '9.19-15.49万'),
  • MySQL示例数据
-- 懂车帝部分车辆评分及价格信息表
CREATE TABLE car_info
(
    brand TEXT,
    score FLOAT,
    price TEXT
);

INSERT INTO car_info
VALUES ('轩逸', 3.65, '8.48-15.59万'),
       ('雅阁', 3.94, '15.18-24.18万'),
       ('思域', 3.83, '9.49-15.89万'),
       ('朗逸', 3.62, '6.79-15.89万'),
       ('哈弗H6', 3.81, '9.19-15.49万')

PostgreSQL

  • 对值进行匹配

CASE 输入值 WHEN 匹配值1 THEN 结果1 WHEN 匹配值2 THEN 结果2 … ELSE 备选值 END

-- 为奥迪、宝马、五菱开头的品牌单独匹配,其他情况返回other
SELECT CASE left(brand, 2) -- 从左取brand两个字符
           WHEN '奥迪' THEN 'Audi'
           WHEN '宝马' THEN 'BMW'
           WHEN '五菱' THEN 'SGMW'
           ELSE 'other'
           END,
       brand
FROM car_info;
  • 对条件进行匹配

CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 ELSE 备选结果 END

-- 以4为阈值区分高评分与非高评分
SELECT CASE WHEN score > 4 THEN '高评分' ELSE '非高评分' END,
       brand,
       score
FROM car_info;

MySQL

CASE-WHEN-THEN-END结构语法与PostgreSQL一致

IF(条件, 满足条件时返回的值, 不满足条件时返回的值)

-- 以4为阈值区分高评分与非高评分
SELECT if(score > 4, '高评分', '非高评分'),
       brand,
       score
FROM car_info;

IFNULL(a, b),当a为NULL时,返回b;当a不为null时,返回a

SELECT IFNULL(null, '是null'), IFNULL('非null', '不返回这个');

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

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

相关文章

【论文阅读】BiSeNet V2用于实时语义分割的双边网络

前言BiSeNet V2延续了v1版本的双边结构&#xff0c;分别处理空间细节信息、高层语义信息。同时设计更简洁高效的结构&#xff0c;进行特征提取&#xff0c;实现高精度和高速度。在训练模型时&#xff0c;使用了增强训练策略 &#xff0c;添加多个辅助训练分支来促进不同浅层网络…

Spring-aop面向切面

1、理解必要的专业术语 先看看上面图&#xff0c;这是我的个人理解。(画的丑&#xff0c;主打真实) 1&#xff09;Advice&#xff0c;通知/增强&#xff1a;类方法中提出来的共性功能(大白话就是提出来的重复代码) 2&#xff09;Pointcut&#xff0c;切入点/切点&#…

【微服务】微服务架构下你不得不知的3种部署策略

文章目录前言滚动部署蓝绿部署金丝雀部署总结前言 不知道大家有了解过你们公司的软件产品是如何部署的么&#xff1f;采用的什么部署策略&#xff1f;其实在软件开发生命周期中&#xff0c;部署是非常关键的一环&#xff0c;你需要考虑多方面的因素&#xff0c;如何保证你部署…

【推荐算法】CTR中embedding层的学习和训练

note 连续特征处理&#xff1a;facebook DLRM模型&#xff0c;对连续值的处理方式是把所有的连续值输入到一个神经网络&#xff0c;然后通过神经网络把它压缩到一个embedding维度大小的一个向量上&#xff0c;然后将Embedding和其他离散特征Embedding Concat起来&#xff0c;再…

springboot-分页功能

1.分页功能的作用 分页功能作为各类网站和系统不可或缺的部分&#xff08;例如百度搜索结果的分页等&#xff09; &#xff0c;当一个页面数据量大的时候分页作用就体现出来的&#xff0c;其作用有以下5个。 &#xff08;1&#xff09;减少系统资源的消耗 &#xff08;2&#…

redis设计与实现读书笔记

这里主要记录一下在阅读redis设计与实现中碰到的一些没有记录过的知识。 引用计数技术 Redis的对象系统实现了基于引用计数技术的内存回收机制&#xff0c;当程序不再使用某个对象的时候&#xff0c;这个对象所占用的内存就会被自动释放;另外&#xff0c;Redis还通过引用计数…

低调且强大--iVX低代码平台

iVX目录前言一、低代码那么多 为什么选择iVX&#xff1f;二、“拼”出来的低代码平台&#xff0c;真的好用吗&#xff1f;三、iVX与其他低代码有啥可比性&#xff1f;前言 首先我们应该明白自动编程突破可能是&#xff1a;领域内Mini LLM 现在的思路都是搞LLM&#xff0c;几乎像…

通俗举例讲解动态链接、静态链接

参考动态链接 - 知乎 加上我自己的理解&#xff0c;比较好懂&#xff0c;但可能在细节方面有偏差,但总体是一致的 静态链接的背景 静态链接使得不同的程序开发者和部门能够相对独立的开发和测试自己的程序模块&#xff0c;从某种意义上来讲大大促进了程序开发的效率&#xf…

NPC 也有了生命?当 ChatGPT 注入游戏你能想象吗

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; 目录引言&#xff1a;西部世界元宇宙&#xff0c;还记得吗ChatGPT 的世界&#xff1f;下图就是一个 ChatGPT 小镇&#xff1a; 引言&#xff1a;西部世界 《西部世界》以一个虚构的游戏般的“西部世界”为背景&am…

springboot验证码生成及验证功能

1.easy-captcha工具包 生成验证码的方式有许多种&#xff0c;这里选择的是easy-captcha工具包。 github开原地址为&#xff1a;easy-captcha工具包 其支持Java图形验证码&#xff0c;支持gif、中文、算术等类型&#xff0c;可用于Java Web、JavaSE等项目。 2添加依赖 首先需…

SQL Server的死锁说明

死锁指南一、了解死锁二、检测并结束死锁2.1、可能死锁的资源三、处理死锁四、最大限度地减少死锁4.1、以相同的顺序访问对象4.2、避免事务中的用户交互4.3、保持交易简短且在一个批次中4.4、使用较低的隔离级别4.5、使用基于行版本控制的隔离级别4.6、使用绑定连接4.7、停止事…

【云原生|Docker】04-docker的资源限制

目录 前言 容器的生命周期 1. 容器的启动过程 2. 容器的生命周期 ​编辑 内存限制 1. 内存限制的相关参数 2. 内存限制方式 2.1 设置-m,--memory&#xff0c;不设置--memory-swap 2.2 设置-m,--memorya&#xff0c;--memory-swapb&#xff0c;且b >a 2.…

本地从0搭建Stable Diffusion WebUI及错误记录

从0开始搭建本地Stable Diffusion WebUI环境 一.环境配置 1.使用的电脑配置 系统Windows10处理器英特尔 i7内存24GB显卡NVIDIA GTX 1060(6GB) 2.镜像源 阿里云 清华大学 中国科技大学 3.电脑环境变量配置 我的电脑–属性–高级系统设置–系统属性(高级)–环境变量 新建…

spring框架注解

3.Spring有哪些常用注解呢&#xff1f; Spring常用注解 Web: Controller&#xff1a;组合注解&#xff08;组合了Component注解&#xff09;&#xff0c;应用在MVC层&#xff08;控制层&#xff09;。 RestController&#xff1a;该注解为一个组合注解&#xff0c;相当于Con…

首个ChatGPT开发的应用上线;ChatMind思维导图工具;中文提示词大全;Copilot平替 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 『一本与众不同的AI绘本』ChatGPT 编写故事 Midjourney 绘制插图 作者的女儿特别喜欢迪士尼动画《海洋奇缘》里的主人公莫阿娜&#…

Mybatis分解式查询

目录 一、Mybatis一对多分解式查询 1. 新增持久层接口方法 2. 新增映射文件对应的标签 3. 新增测试方法 4. 运行效果 二、Mybatis一对一分解式查询 1. 新增持久层接口方法 2. 新增映射文件对应的标签 3. 新增测试方法 4. 运行效果 三、Mybatis延迟加载 1. 开启延迟加…

超实用的十个超级实用事半功倍的Python自动化脚本

一淘模板 56admin.com在日常的工作学习当中&#xff0c;我们总会遇到各式各样的问题&#xff0c;其中不少的问题都是一遍又一遍简单重复的操作&#xff0c;不妨直接用Python脚本来自动化处理&#xff0c;今天小编就给大家分享十个Python高级脚本&#xff0c;帮助我们减少无谓的…

【数据结构与算法】栈的实现(附源码)

目录 一.栈的概念和结构 二.接口实现 A.初始化 Stackinit 销毁 Stackdestroy 1.Stackinit 2.Stackdestroy B.插入 Stackpush 删除 Stackpop 1.Stackpush 2.Stackpop C.出栈 Stacktop D. 栈的有效元素 Stacksize 判空 Stackempty 1.Stacksize 2.Stackempty …

Flink进阶篇-CDC 原理、实践和优化采集到Doris中

简介 基于doris官方用doris构建实时仓库的思路&#xff0c;从flinkcdc到doris实时数仓的实践。 原文 Apache Flink X Apache Doris 构建极速易用的实时数仓架构 (qq.com) 前提-Flink CDC 原理、实践和优化 CDC 是什么 CDC 是变更数据捕获&#xff08;Change Data Captur…

Spring《三》DI依赖注入

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; 上一篇&#xff1a;Spring《二》bean的实例化与生命周期 下一篇&#xff1a;敬请期待 目录一、setter注入&#x1f349;1.注入引用数据类型2.注入简单数据类型二、构造器注入&#x1f34a;1.注入引用数据类型2.简单数…