取消 提交

自定义博客皮肤

-+

Tony.Dong的专栏

大家好!我是只谈技术不剪发的Tony老师,一个专注于数据库领域的分享者。

我也要用
排序:
按最后发布时间
按访问量
RSS订阅

原创 实战 SQL:银行等金融机构可疑支付交易的监测
原力计划

SQL 窗口函数(Window fuction)或者分析函数提供了强大的数据分析功能,我们介绍了一些聚合窗口函数的实际案例。SUM 函数常常用于计算历史累计值,COUNT 函数可以用于计算数据累计出现的次数,AVG 函数可以用于计算移动平均值。

2020-05-04 08:14:48 11157 18

原创 图解数据库连接查询(JOIN)的三种实现算法: MySQL、Oracle、SQL Server 等
原力计划

我们讨论了 MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite 实现连接查询的三种算法:嵌套循环连接 Nested Loop Join、哈希连接 Hash Join 以及排序合并连接 Sort Merge Join。了解这些算法的原理和优缺点可以帮助我们优化连接查询语句的性能。

2020-04-26 21:09:16 1722

原创 某电商销售数据分析 SQL 面试题解析
原力计划

本文基于某电商销售数据分析 SQL 面试题,解析并给出了 MySQL 中的解决方法。依次使用了 GROUP BY 分组加聚合函数、HAVING 过滤和DISTINCT 去重、ORDER BY 排序加上 LIMIT 子句实现 Top-N 排行榜,以及窗口函数。

2020-04-22 21:56:53 5334 11

原创 SQL 面试题:WHERE 和 HAVING、ON 有什么区别?
原力计划

SQL 中WHERE和HAVING的区别在于:WHERE子句在GROUP BY分组和聚合函数之前对数据行进行过滤;HAVING子句对GROUP BY分组和聚合函数之后的数据行进行过滤。SQL 中WHERE和ON的区别在于:对于内连接查询,WHERE和ON中的过滤条件等效;对于外连接查询,ON中的过滤条件在连接操作之前执行,WHERE中的过滤条件(逻辑上)在连接操作之后执行。

2020-04-09 07:42:16 5980 10

原创 实战 SQL:销售数据的小计/合计/总计以及数据透视表
原力计划

介绍如何在 SQL 中利用聚合函数、GROUP BY 子句的 ROLLUP、CUBE 和 GROUPING SETS 选项以及 CASE 表达式实现类似 Excel 数据透视表的功能,通过展开、折叠、筛选、行列转换等操作得到不同层次和视角的数据小计/合计/总计。本文涉及的数据库包括 Oracle、MySQL、SQL Server 以及 PostgreSQL。

2020-04-02 18:19:18 3467 1

原创 实战 SQL:微信、微博等社交网络中的友好、粉丝关系分析
原力计划

介绍如何将微信、微博这类图结构的社交网络数据使用邻接列表进行描述,并且最终存储为结构化的关系表。利用 SQL 语句中的 JOIN 连接查询、通用表表达式的递归查询等功能对其进行分析,发行其中隐藏的社交关系。这些方法适用于 MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite。

2020-03-28 13:09:07 11506 23

原创 实战 SQL:实现百度、高德等地图中的地铁换乘线路查询
原力计划

本文介绍了一个 SQL 高级功能:通用表表达式(Common Table Expression),也就是 WITH 子句。CTE 可以提高复杂查询的性能和可读性,实现树状结构或者图数据的遍历。例如:生成数字序列;获取员工上下级的组织关系;查询地铁、航班换乘线路;社交网络图谱分析。

2020-03-19 22:48:36 2723

原创 SQL 编程思想:一切皆关系
原力计划

关系模型定义了单一的数据结构:关系,也就是二维表。SQL 是一种面向集合的编程语言,它操作的对象是集合,操作的结果也是集合。在 SQL 中,一切皆关系。

2020-03-01 21:52:02 9210 21

原创 那些年我们踩过的坑,SQL 中的空值陷阱!

在数据库中,空值(NULL)是一个特殊的值,通常用于表示缺失值或者不适用的值。今天我们来详细讨论一下数据库中的空值问题,主要包括 MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite。

2019-12-31 07:31:17 5647 9

原创 五个简单的 SQL 查询性能测试题,只有 40% 及格率。你敢来挑战吗?

五个简单的 SQL 查询性能测试题,只有 40% 及格率。你敢来挑战吗?

2019-11-18 16:40:54 10054 34

原创 Microsoft SQL Server 实现数据透视表

数据透视表是进行数据汇总、分析、浏览和展示的强大工具,可以帮助我们了解数据中的对比情况、模式和趋势。本文介绍了在 Microsoft SQL Server 中实现数据透视表的三种方式,包括 CASE 条件表达式和分组聚合操作相结合、专用的 PIVOT 运算符以及使用动态 SQL 语句生成动态数据透视表。

2020-08-05 17:59:03 46

原创 Oracle 常用脚本之查看数据表、字段、约束、索引等信息

介绍如何通过 Oracle 数据字典查看数据库中的表(dba_tables、all_tables、user_tables)、字段(dba_tab_columns、all_tab_columns、user_tab_columns)、约束(dba_constraints、all_constraints、user_constraints)、索引(dba_indexes、all_indexes、user_indexes)等信息,比较两个模式中的表和字段差异,以及比较两个表中的数据差异。

2020-08-04 18:00:35 525

原创 《MySQL 入门教程》第 17 篇 MySQL 变量

MySQL 中的变量可以分为系统全局变量和会话变量、用户变量以及局部变量。本篇介绍这些变量的设置和使用,包括使用SHOW VARIABLES和SELECT 语句查看系统变量,使用SET命令设置系统变量和用户变量,以及通过用户变量传递数据和构造预编译的动态SQL语句。

2020-08-03 17:46:28 871

原创 MySQL/MariaDB 如何实现数据透视表

介绍 MySQL/MariaDB 中如何实现数据透视表(Pivot table),包括使用 CASE 表达式和分组聚合操作,使用预编译的动态 SQL 语句,以及使用 MariaDB CONNECT 存储引擎中的 PIVOT 类型表三种方式。

2020-07-31 17:49:21 413

原创 Oracle 常用脚本之查看用户、权限、资源配置等信息

介绍如何查看 Oracle 数据库中模式用户的相关信息:用户系统权限、对象权限、字段权限、角色信息、资源配置、表空间配额,以及如何生成创建用户的语句。

2020-07-30 17:44:40 1670 2

原创 Oracle 中实现数据透视表的几种方法

介绍如何在 Oracle 数据库中实现类似于 Excel 的数据透视表(Pivot Table),包括 CASE 表达式和 GROUP BY 分组相结合、Oracle 特定的 PIVOT 子句以及 MODEL 子句等方法。

2020-07-29 17:54:52 2004 1

原创 《MySQL 入门教程》第 16 篇 MySQL 常用函数之日期函数

介绍 MySQL 中常见的日期函数和运算符,包括获取当前日期和时间的 CURRENT_DATE、CURRENT_TIME、NOW、CURRENT_TIMESTAMP、SYSDATE等,构造一个日期时间值的FROM_DAYS、MAKEDATE、MAKETIME、TIMESTAMP等,获取日期时间中的信息的EXTRACT、YEAR、MONTH、DAY、WEEK等,将日期时间转换为其他类型DATE_FORMAT等,以及日期时间的加减运算ADDDATE、SUBDATE、TIMESTAMPDIFF等函数。

2020-07-27 21:44:56 580

原创 Microsoft SQL Server 如何实现一个只有一行数据的表

讨论如何在 Microsoft SQL Server 中实现一个只能存储一行数据的表,介绍了基于计算列创建唯一约束的实现方法。使用 MERGE 插入和更新数据,同时为了防止数据被删除,通过触发器禁止删除操作。

2020-07-24 22:02:24 828

原创 实战 SQL:亚马逊、京东等电商平台的销售排行榜和飙升榜

以亚马逊、京东等电商平台的销售排行榜和销售飙升榜为实战案例,介绍了一些常用的 SQL 排名窗口函数(RANK、ROW_NUMBER等)和取值窗口函数(LAG、LEAD)的数据分析功能。

2020-07-23 22:36:58 4002 4

原创 《MySQL 入门教程》第 15 篇 MySQL 常用函数之字符函数

介绍 MySQL 中常见的字符函数和运算符,包括字符与编码转换ASCII和CHAR、获取字符串长度 CHAR_LENGTH和LENGTH、连接字符串CONCAT和CONCAT_WS、大小写转换LOWER和UPPER、查找子串位置INSTR和FIELD、返回子串SUBSTRING和TRIM、替换子串REPLACE和REVERSE、填充字符串LPAD和RPAD、字符串比较STRCMP、Base64 编码与解码等函数。

2020-07-22 21:00:01 903

原创 乘风破浪的 SQL

随着互联网和大数据等新技术的发展,SQL 早已不仅仅是当年的关系数据库查询语言了;无论是面向对象特性(例如自定义类型)、文档数据(XML、JSON)的存储和处理、时态数据的存储和处理、复杂事件和流数据处理、数据科学中的多维数组以及图形数据库等各种 NoSQL 功能已经或者即将成为 SQL 标准中的一部分,One SQL to Rule Them All!

2020-07-20 21:59:03 22387 24

原创 Oracle 如何实现一个只有一行数据的表

介绍如何在 Oracle 中利用虚拟列加唯一约束,以及函数索引两种方式实现一个只能存储一行数据的表,以及如何通过触发器禁止数据删除的方法。

2020-07-19 22:05:11 881

原创 Microsoft SQL Server 如何生成连续的数字/字符/时间序列

介绍如何在 Microsoft SQL Server 中生成连续的数字、字符或者时间序列值,包括使用系统视图 master.dbo.spt_values 、使用通用表表达式以及自定义的表值函数 generate_series 生成各种数据序列。

2020-07-17 15:59:58 918

原创 Oracle 如何生成连续的数字/字符/时间序列

介绍如何在 Oracle 中生成连续的数字、字符以及时间序列值。包括使用CONNECT BY 层次查询和模拟的 PL/SQL 函数 generate_series 生成连接的数字序列、间隔的数字序列、连续的字符序列以及间隔的时间序列,使用通用表表达式生成等差数字序列、等比数字序列、斐波那契数列、连续的字符序列以及间隔的时间序列。

2020-07-16 18:17:20 5387

原创 MySQL 如何生成连续的数字/字符/时间序列
原力计划

介绍如何在 MySQL 中生成连续的数字、字符以及时间序列值。包括使用视图模拟生成连接的数字序列、间隔的数字序列、连续的字符序列以及间隔的时间序列,使用通用表表达式生成等差数字序列、等比数字序列、斐波那契数列、连续的字符序列以及间隔的时间序列。

2020-07-15 21:52:44 1898

原创 PostgreSQL 如何生成连续的数字/字符/时间序列
原力计划

介绍如何在 PostgreSQL 中生成连续的数字、字符以及时间序列值。包括使用 generate_series 函数生成连接的数字序列、间隔的数字序列、连续的字符序列以及间隔的时间序列,使用通用表表达式生成等差数字序列、等比数字序列、斐波那契数列、连续的字符序列以及间隔的时间序列。

2020-07-14 21:39:35 1224

原创 《MySQL 入门教程》第 14 篇 MySQL 常用函数之数学函数
原力计划

介绍 MySQL 中常用的数学函数,包括算术运算符、绝对值函数、取整/四舍五入函数、指数/对数函数、平方/开方函数、三角函数、最大值/最小值函数、随机数函数、进制转换函数、循环冗余校验码函数。

2020-07-13 18:02:17 1032

原创 PostgreSQL 插件之 system_stats:监控服务器 CPU、内存、磁盘和网络
原力计划

system_stats 是由 EnterpriseDB 开源的一个 PostgreSQL 扩展插件,提供了数据库服务器 CPU、内存、磁盘和网络相关的统计指标,可以用于替代操作系统级别的监控。

2020-07-10 21:02:50 1869

原创 MySQL 字符集不一致导致索引失效的一个真实案例
原力计划

MySQL 字符集不一致导致索引失效的一个真实案例,通过 explain 和 show warnings 发现索引没有被使用,而且存在字符集转换的操作。通过修改字段的字符集之后,解决了慢查询的性能问题。

2020-07-10 11:29:42 1396

原创 查看和终止 PostgreSQL 连接会话
原力计划

当我们连接PostgreSQL遇到FATAL: sorry, too many clients already.或者FATAL: remaining connection slots are reserved for non-replication superuser connections这种连接数过多的错误时,可以通过pg_stat_activity或者ps命令查看连接进程。使用pg_cancel_backend()、pg_terminate_backend()或者kill命令终止正在运行的语句和进程。

2020-07-09 12:25:01 1179

原创 MySQL 如何实现一个只有一行数据的表
原力计划

介绍如何在 MySQL 中实现一个只有一行数据的表。我们可以创建一个 ENUM 枚举数据类型字段或者计算列,并且基于该字段创建唯一索引来实现该功能;MySQL 8.0 新增的函数索引甚至不需要创建额外的字段就可以实现相同的功能。

2020-07-07 16:25:56 1237

原创 《MySQL 入门教程》第 13 篇 CASE 表达式与控制流函数
原力计划

MySQL 为 SQL 语句提供了类似 if-then-else 的逻辑处理功能,可以基于不同的条件返回不同的结果。这些功能包括 CASE 表达式和一些控制流函数:IF 函数、IFNULL 函数、COALESCE 函数以及 NULLIF 函数。

2020-07-06 17:42:29 949

原创 PostgreSQL 如何实现一个只有一行数据的表
原力计划

在 PostgreSQL 中可以利用表达式索引(函数索引)基于常量值创建一个唯一索引,从而限制表中只能包含一行数据。同时,可以使用 INSERT ON CONFLICT 语句实现数据的插入和更新,通过触发器禁止防止数据被删除。

2020-07-03 10:07:24 2404 1

原创 MySQL 优化器原来是这样工作的
原力计划

MySQL 优化器使用基于成本的优化方式(Cost-based Optimization),利用内置的成本模型和数据字典信息以及存储引擎的统计信息决定使用哪些步骤实现查询语句,也就是查询计划。同时,MySQL 为我们提供了控制优化器的各种选项,包括控制优化程度、设置成本常量、统计信息收集、启用/禁用优化行为以及使用优化器提示等。

2020-07-02 14:55:35 2325 1

原创 《MySQL 入门教程》第 12 篇 分组统计
原力计划

聚合函数(Aggregate Function)用于对一组数据进行汇总计算,并且返回单个分析结果。MySQL 中常见的聚合函数包括:COUNT、AVG、SUM、MAX 、MIN以及GROUP_CONCAT。GROUP BY子句可以将数据按照某种规则进行分组,与聚合函数一起使用可以实现分组汇总;WITH ROLLUP选项还会生成小计和总计等,GOUPING函数可以识别出这些汇总数据。HAVING子句可以对分组汇总后的结果进行过滤。

2020-06-30 17:17:58 3315 5

原创 你确定你读懂了 MySQL 执行计划吗?
原力计划

MySQL 执行计划(execution plan,也叫查询计划或者解释计划)是服务器执行 SQL 语句的具体步骤。本文通过具体案例详细介绍了如何使用各种 EXPLAIN 语句获取 MySQL 预期执行计划和实际执行计划,并且深入分析了结果中的每个字段的含义,包括访问谓词与过滤谓词的区别。

2020-06-24 17:09:18 2001 4

原创 《MySQL 入门教程》第 11 篇 限制结果数量
原力计划

MySQL 中的 LIMIT 和 OFFSET 子句可以用于限制查询返回结果的数量,从而实现常见的 Top-N 查询、分页查询以及指定名次的数据等功能。

2020-06-23 22:54:09 1403 2

原创 只要心中有 B-树,SQL 优化就不怵!
原力计划

B-树(B+树、B*树)索引极大地减少了随机磁盘的访问,同时具有对数时间复杂度,几乎不受数据量的影响;因而是我们进行 SQL 优化的最有效、最常用的方法。本文介绍了索引的原理和优缺点,以及如何利用索引优化各种查询条件、连接查询、排序和分组以及 DML 语句,以及我们在创建索引和编写 SQL 语句时需要遵循的原则。

2020-06-22 22:51:14 3008 1

原创 《MySQL 入门教程》第 10 篇 数据排序
原力计划

介绍如何使用 ORDER BY 对查询结果进行排序显示,包括基于单个字段或者多个字段排序、基于表达式排序、空值排序、中文排序以及利用 FIELD 函数实现自定义排序。

2020-06-18 15:40:44 1299

原创 学习 MySQL 必备的几个示例数据库
原力计划

MySQL 官方网站提供了以下几个示例数据库:Sakila、Employees、world、world_x 以及 menagerie。这些数据库既可以用于日常学习和测试,也可以作为我们设计时数据库的一个参考。本文就来介绍一下这些数据库的模式结构以及如何下载和安装。

2020-06-17 16:47:54 2069

提示
确定要删除当前文章?
取消 删除