天道酬勤,学无止境

MySQL学习笔记六:表的运算和联结、窗口函数与grouping

表的运算

新建立的product2表格如下:
在这里插入图片描述
对记录取并集,在两个select语句之间用union连接,如果想包含重复行就用union all连接。注意连接的两个表要列数相同、类型一致,且order by只能在末尾用一次。取交集在mysql中可以使用关联子查询:

-- 取并集union(行方向)
select product_id,product_name from product union
 select product_id,product_name from product2;
-- 输出10个不同的商品记录

select product_id,product_name from product union all
 select product_id,product_name from product2 order by product_id;

在这里插入图片描述

-- 取交集intersect、减法except在mysql中不可用,可按照关联子查询方式取交集:
select product_id,product_name from product as p1 where product_id= (select 
product_id from product2 as p2 where p1.product_id=p2.product_id);

在这里插入图片描述

以列为单位的表联结

内联结:inner join…on…,on之后指定两张表联结所使用的联结键,联结条件一般都是“=”。注意on子句要写在from和where子句之间。比如想将shopproduct表格中的商品id找出对应于product表格中的商品名称和售价,那么联结键就是product_id:

-- 内联结:inner join
select sp.shop_id,sp.shop_name,sp.product_id,p.product_name,p.sale_price from
shopproduct as sp inner join product as p on sp.product_id=p.product_id;

在这里插入图片描述
如果只展示名古屋商店的结果,可以在末尾加入where语句:

-- on要写在from和where之间:
select sp.shop_id,sp.shop_name,sp.product_id,p.product_name,p.sale_price from
shopproduct as sp inner join product as p on sp.product_id=p.product_id
 where sp.shop_id='000B';

外联结:left/right outer join…on…,left/right规定联结的主表,选择不同结果一般也不同,最后呈现的行数为主表的行数。比如上述事务中,将shopproduct作为主表的外联结结果和之前的内联结结果一样,将product作为主表则会多出两行:

select sp.shop_id,sp.shop_name,sp.product_id,p.product_name,p.sale_price from
shopproduct as sp left outer join product as p on sp.product_id=p.product_id;
-- 结果与内联结结果相同
select sp.shop_id,sp.shop_name,p.product_id,p.product_name,p.sale_price from
shopproduct as sp right outer join product as p on sp.product_id=p.product_id;
-- 多出两行记录

在这里插入图片描述
注意在规定外联结的主表时,联结键需要是主表的,这样才能呈现最多的信息。比如在上述右侧外联结中,如果选择的是sp.product_id,那么展示出高压锅和圆珠笔的product_id也是null了。对于null值可以用之前学过的coalesce函数来填充:

select coalesce(sp.shop_id,'不确定') as shop_id,coalesce(sp.shop_name,'不确定')
 as shop_name,p.product_id,p.product_name,p.sale_price from shopproduct 
 as sp right outer join product as p on sp.product_id=p.product_id;

在这里插入图片描述
多表联结:先联结两个表,将此作为一个整体再以同样的方式联结第三个表,如此类推。比如有一个管理库存商品的表InventoryProduct包含inventory_id(仓库编号)、product_id和inventory_quantity(库存数量)三列,取出保存在S001仓库中的商品数量,添加到之前内联结的结果中:

select sp.shop_id,sp.shop_name,sp.product_id,p.product_name,p.sale_price,
ip.inventory_quantity from shopproduct as sp inner join product as p
 on sp.product_id=p.product_id
-- 上述语句作为一个整体
inner join InventoryProduct as ip on sp.product_id=ip.product_id where 
inventory_id='S001';

在这里插入图片描述

窗口函数

也称为在线分析处理数据函数,格式为 <窗口函数> () over (partition by < columns > order by < columns >),partition by分组后的记录集合称为窗口,order by决定了排序的规则,语句最后还可以再加一个order by。能够作为窗口函数的有:

  • 聚合函数(SUM、AVG、COUNT、MAX、MIN);
  • RANK、DENSE_RANK、ROW_NUMBER等专用窗口函数。

比如想根据商品种类分组,每组按照商品售价由低到高排序:

select product_name,product_type,sale_price,rank () over 
(partition by product_type order by sale_price) as ranking from product;

在这里插入图片描述
如果不使用partition by就是将整个表看作一个窗口,按照所有商品的售价排序。

  • RANK函数:计算排序时,如果存在相同位次的记录,则会跳过之后的位次。 比如有 3 条记录排在第 1 位时:1 位、1 位、1 位、4 位……
  • DENSE_RANK函数:即使存在相同位次的记录,也不会跳过之后的位次。有 3 条记录排在第 1 位时:1 位、1 位、1 位、2 位……
  • ROW_NUMBER函数:赋予唯一的连续位次。有 3 条记录排在第 1 位时:1 位、2 位、3 位、4 位……

下面看一下它们的区别:

select product_name,product_type,sale_price,rank () over(order by sale_price) as ranking, 
dense_rank () over (order by sale_price) as dense_ranking-- 有相同位次也不会跳过之后的位次 
,row_number () over (order by sale_price) as row_num from product;-- 唯一的连续位次 

在这里插入图片描述
聚合函数也可以作为窗口函数,比如按照id升序计算当前商品为止的累积售价之和:

select product_id,product_name,sale_price,sum(sale_price) over 
(order by product_id) as cum_sum from product;

在这里插入图片描述
计算移动平均时,在order by子句之后加入rows between m preceding and n following语句。假定3行为汇总对象,分别进行3行向前移动平均、3行向后移动平均、前后共3行移动平均:

SELECT product_id, product_name, sale_price,
   AVG(sale_price) OVER (ORDER BY product_id ROWS 2 PRECEDING) AS f_MA3,
   -- 截止到之前2行(加上自身3行)
   AVG(sale_price) OVER (ORDER BY product_id rows between 0 preceding and 2 following) AS b_MA3,
   -- 截止到之后2行(加上自身3行)
   AVG(sale_price) OVER (ORDER BY product_id ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS m_MA3 
   -- 包含前一行和后一行(加上自身3行)
FROM product;

在这里插入图片描述
注意数据不够3行时会按照前1行或2行的平均来算。

grouping运算符

使用grouping运算符可以方便的生成小计和合计行。比如mysql在group by子句之后加上with rollup就可以得到每一类的小计和总合计行:

select product_type,sum(sale_price) as sum_price from product 
group by product_type with rollup;

在这里插入图片描述
相当于同时执行了group by()(即全部数据为一组的“超级分组纪录”)和group by product_type。

也可以基于多个聚合键分组合计:

select product_type,regist_date,sum(sale_price) as sum_price from product
 group by product_type,regist_date with rollup;

在这里插入图片描述
相当于同时执行了①group by()、②group by product_type和③group by product_type,regist_date。在这里插入图片描述
cube函数可以汇总所有可能的合计组合,但是mysql貌似还不支持。

grouping函数:让原数据的null和超级分组纪录的null更加容易分辨,超级分组纪录产生的null返回1(总合计记录行所有展示的列均为1),原始数据null返回0:

select grouping(product_type) as g1,grouping(regist_date)
 as g2,sum(sale_price) as sum_price from product 
 group by product_type,regist_date with rollup;

在这里插入图片描述
合计行的null看起来很奇怪,下面指定合计行的字符串说明,比如每一类的合计称为“小计”,所有商品的合计称为“总计”:

SELECT CASE WHEN grouping(product_type) = 1 
            THEN '所有商品' 
            ELSE product_type END AS product_type,
       CASE WHEN grouping(regist_date) = 1 and grouping(product_type) = 0
            THEN '小计' 
            WHEN grouping(regist_date) = 1 and grouping(product_type) = 1 
            THEN '总计' 
            ELSE regist_date END AS regist_date,
       SUM(sale_price) AS sum_price
  FROM Product
 GROUP BY product_type, regist_date with rollup;

在这里插入图片描述

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • MySQL8.0新特性学习笔记(二):窗口函数
    目录 一,简介 二,窗口函数的两种写法 三,窗口表达式语法 1,PARTITION BY子句 2,ORDER BY子句 3,frame子句 四,窗口函数介绍 1,序号函数:row_number(),rank(),dense_rank() 2,分布函数:percent_rank() / cume_dist() 3,前后函数:lead() / lag() 4,头尾函数:first_val() / last_val() 5,其他函数:nth_value() / nfile() 6,原生聚合函数 MySQL8.0引入的窗口函数,可以比较方便的实现一些分析和统计功能,这些功能不用窗口函数也能实现,不过实现的sql可能会比较复杂。 一,简介 什么是窗口函数 窗口函数引入的其实不只是几个函数,而是一套完整的语法,窗口函数是此语法中的一部分。 语法: 窗口函数 over 窗口表达式。 over是窗口函数语法的关键字。 从语法上来看,窗口函数的使用实际上分为两部分:窗口函数和窗口。 窗口函数在sql中往往使用在查询结果中,返回一列值,就像查询一个字段一样。 窗口 从数据结构上来看,要使用窗口函数,首先我们要有一个窗口,所谓窗口,个人理解是一个数据集,数据集的内容可以类比group by分组之后的一组数据,只不过在使用了窗口函数的sql中,每一行记录都有一个自己的窗口,每行记录所对应的窗口
  • MySQL学习笔记
    SQL学习笔记 数据库概念 数据库:用于存储和管理数据的仓库 数据库特点: 持久化存储数据,其实数据库就是一个文件系统方便存储和管理数据使用了统一的方式操作数据库 SQL SQL: Structured Query Language:结构化查询语言 SQL通用语法: SQL 语句可以单行或多行书写,以分号结尾。可使用空格和缩进来增强语句的可读性。MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。3 种注释 单行注释: – 注释内容 或 # 注释内容(mysql 特有)多行注释: /* 注释 */ SQL分类: DDL(Data Definition Language)数据定义语言 用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等DML(Data Manipulation Language)数据操作语言 用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等DQL(Data Query Language)数据查询语言 用来查询数据库中表的记录(数据)。关键字:select, where 等DCL(Data Control Language)数据控制语言(了解) 用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等 DDL:操作数据库、表 操作数据库:CRUD
  • 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...
    长期持续带来更多项目与技术分享,咨询请加QQ:21497936、微信:yangsir198808 点击此处与博主QQ交谈(并可添加好友) 当前版本:v3.14.0 更新日期:2021年03月27日 最近更新博客(由近及远,显示五篇): 《项目实战:Qt+OSG三维2D文字实时效果查看工具》 《关于 C#使用Console.WriteLine调试没有命令行输出 的解决方法》 《关于 error: C2039: “shared_ptr”: 不是“std”的成员 的解决方法》 《Qt实用技巧:Qt中添加对C++11标准的支持(两种方式)》 《saba开发笔记(一):saba介绍、编译使用以及测试》 导航文件 v3.0.0 本地导航文件粉丝0积分下载地址:https://download.csdn.net/download/qq21497936/15202524 (导航文件、各篇开源的代码、运行Demo和各种文件可在 QQ群:1047134658 中免费下载) 目录 开发专栏:商业项目实战 开发专栏:项目实战 Qt开发专栏:开发技术 Qt开发专栏:三方库开发技术 Qt开发专栏:实用技巧 Qt开发专栏:各种问题解决 Qt开发专栏:qss样式表笔记大全 Qt开发专栏:概念 Qt开发专栏:qml开发 树莓派开发专栏 OSG、OSGEARTH三维开发专栏 OpenCV开发专栏 OpenGL开发专栏
  • 【超全必看】MySQL基础学习总结笔记(附示例代码)
    改良Mysql笔记:MySQL基础笔记 数据库的好处 实现数据持久化存储使用完整的管理系统统一管理,易于查询 数据的相关概念 DB 数据库(database) 存储数据的仓库,保存了一系列有组织的数据DBMS 数据库管理系统(Database Management System)用于管理DB中的数据,数据库是通过DBMS创建和操作的容器。 常见的数据库管理系统:MySQL、Oracle、 DB2、 SQL serverSQL 结构化查询语言(Structure Query Language):专门用来与数据库通信的语言 特点:①不是某个特定数据库供应商专有的语言,几乎所有DBMS都支持SQL。②简单易学。③灵活使用可以进行非常复杂和高级的数据库操作。 数据库存储数据特点 将数据放到表中,表再放到库中一个数据库可以有多个表,每个表都有一个唯一的表名用来标识自己。表具有一些特性,这些特性定义了数据在表中如何存储,类似Java中的类。表由列组成,也称字段。每个表都由一或多个列组成,类似Java中的属性。表中的数据是按行存储的,每一行类似于Java中的对象。 MySQL 优点: 成本低,开源,一般可免费使用。性能高,执行很快。简单,易于安装和使用。 DBMS的分类: 基于共享文件系统的DBMS(access)基于C/S的DBMS(MySQL,Oracle,SQL server)
  • Impala 学习笔记 (一)---入门学习
    目录 一、Impala 基本介绍 二、Impala 与 Hive 关系 三、Impala 与 Hive 异同 1、内存使用 2、调度 3、适用面 4、容错 四、Impala 架构 五、Impala 查询处理过程 六、表数据的准备 七、view视图(这个hive也有) 一、Impala 基本介绍 impala 是 cloudera 提供的一款高效率的 sql 查询工具,提供实时的查询 效果,官方测试性能比 hive 快 10 到 100 倍,其 sql 查询比 sparkSQL 还要更快速,号称是当前大数据领域最快的查询 sql 工具, impala 是基于 hive 并使用内存进行计算,兼顾数据仓库,具有实时,批 处理,多并发等优点。 二、Impala 与 Hive 关系 impala 是基于 hive 的大数据分析查询引擎,直接使用 hive 的元数据库 metadata,意味着 impala 元数据都存储在 hive 的 metastore 当中,并且 impala 兼 容 hive 的绝大多数 sql 语法。所以需要安装 impala 的话,必须先安装 hive,保证 hive 安装成功,并且还需要启动 hive 的 metastore 服务。 客户端连接 metastore 服务,metastore 再去连接 MySQL 数据库来存取元数 据。有了 metastore 服务
  • hive复习日记-持续更新
    hive 一、 概念 1.hive是一个构建在hadoop上的数据仓库管理工具(框架),可以将结构化数据文件映射成一张数据表,并使用类sql的方式对这样的文件进行操作。 hive的执行引擎 可以是 mapreduce spark tez 2.hive的元数据存储在数据库 hive的数据存储在HDFS上 hive的计算是基于mr的 二、优缺点 1.学习成本低: 提供类sql查询语言,避免直接写mr程序 2.可扩展性好:基于hadoop的 3.适合做离线分析处理(OLAP):hive的延迟性比较高 4.延展性:hive支持用户自定义函数 5.良好的容错性:基于hadoop 某个节点有问题hql仍可完成执行 6.统一管理:提供了统一元数据的管理 默认是debry 三、架构 架构体系: 1.用户连接接口:shell命令行,jdbc/odbc,web ui 2.thriftserver:软件框架服务,允许客户端通过编程的方式远程访问hive 3.元数据:hive将元数据存储在数据库 derby、mysql中 4.驱动器(Driver): 1)解析器 SQLParser:将hql语句转换成抽象语法树AST,并对抽象语法树进行语法分析 2)编译器 Compilier:对hql语句进行词法,语法,语义的编译,需要与元数据关联,编译后生成一个有向无环执行计划 即是 一个mr的job 3)优化器
  • 剑指Offer刷题学习笔记汇总
    渣渣鹏的学习记录 1、前言2、题目总结数组(13道):字符串(9道):链表(8道):二叉树(15道):栈(3道):回溯法(2道):递归、动态规划(5道):位运算(1道):其他(11道): 1、前言 本系列为渣渣鹏的《剑指Offer》学习笔记。 刷题平台:牛客网 使用语言:Java GitHub笔记地址:     开始刷题的时间太晚了,草草的结束了第一遍学习,把67道题过了一遍,使用的是java语言进行答题,接下来是Leetcode的学习以及后端学习之路。更新ing~ 2、题目总结 对总共67道题目进行了分类整理,整理如下: 数组(13道): • 剑指Offer(一):二维数组中的查找 • 剑指Offer(六):旋转数组的最小数字 • 剑指Offer(十三):调整数组顺序使奇数位于偶数前面 • 剑指Offer(十九):顺时针打印矩阵 • 剑指Offer(二十八):数组中出现次数超过一半的数字 • 剑指Offer(三十):连续子数组的最大和(dp) • 剑指Offer(三十二):把数组排成最小的数 • 剑指Offer(三十五):数组中的逆序对 • 剑指Offer(三十七):数字在排序数组中出现的次数 • 剑指Offer(四十):数组中只出现一次的数字 • 剑指Offer(五十):数组中重复的数字 • 剑指Offer(五十一):构建乘积数组 • 剑指Offer(六十四):滑动窗口的最大值
  • Java学习笔记目录索引 (持续更新中)
    博主的其他笔记汇总 : 👉 学习数据结构与算法,学习笔记会持续更新: 《恋上数据结构与算法》学习Java虚拟机,学习笔记会持续更新: 《Java虚拟机》学习Java并发编程,学习笔记会持续更新: 《Java并发编程》学习Java设计模式,学习笔记会持续更新: 《Java设计模式》学习网络协议,学习笔记会持续更新: 《网络协议》 Java学习路线目录索引 👍 一、Java基础二、 MySQL数据库三、JDBC四、JavaWeb五、MyBatis & JPA六、Spring七、SpringMVC八、SpringBoot九、SpringCloud十、Redis十一、SpringSecurity、Shiro十二、消息中间件 RabbitMQ十三、ElasticSearch (转载系列)十四、开发工具的使用 附录 : 👉 Github最牛逼的Java知识汇总 : JavaGuide号称最强的Java知识总结 : ThinkWon 一、Java基础 跳转到目录 UML 一 类图关系 (泛化、实现、依赖、关联、聚合、组合)枚举类 — 概述、常用方法、自定义枚举类、Enum创建枚举类抽象类(abstract class)、接口(interface)String类 — 概述、String的性质、内存解析、常用API线程 — 创建方式、常用方法、线程安全问题、通信Java集合 — Collection
  • MYSQL基础学习
    MYSQL基础学习 一、表文件数据行管理 删除一个表文件 drop table 表文件名 查看表文件字段信息 show create table 为表文件添加字段 alter table 表名 add 新字段名 数据类型; 删除表文件字段 alter table 表名 drop 字段名 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ogk9XOK5-1616938260681)(C:\Users\豆豆\AppData\Roaming\Typora\typora-user-images\image-20210328193751805.png)] 二、临时表 作用: ​ 每个查询命令执行时,实际上操作都是上一个查询命令生成的临时表 生命周期: 在当前查询命令执行完毕后,Mysql服务器自动将上一个查询命令生成的临时表从内存中销毁。导致用户最终看到的临时表只能查询语句中,最后一个查询生成的临时表 七个查询命令与临时表的关系 from——>where——>group by——>having——>select——>order by——>limit 七个查询命令中,只有from命令不需要操作临时表,它是将硬盘上表文件加载到内存中生成第一个临时表,剩下的六个查询命令操作的都是上一个查询命令生成的临时表七个查询命令中,只有GRIUOP BY 命令在执行完毕之后
  • 狂神说java~MYSQL学习笔记
    1、数据库 什么是数据库 数据库 ( DataBase , 简称DB ) 概念 : 长期存放在计算机内,有组织,可共享的大量数据的集合,是一个数据 “仓库” 作用 : 保存,并能安全管理数据(如:增删改查等),减少冗余… 数据库总览 : 关系型数据库 ( SQL ) MySQL , Oracle , SQL Server , SQLite , DB2 , …关系型数据库通过外键关联来建立表与表之间的关系 非关系型数据库 ( NOSQL ) Redis , MongoDB , …非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定 什么是DBMS 数据库管理系统 ( DataBase Management System ) 数据库管理软件 , 科学组织和存储数据 , 高效地获取和维护数据 为什么要说这个呢? 因为我们要学习的MySQL应该算是一个数据库管理系统. MySQL简介 概念 : 是现在流行的开源的,免费的 关系型数据库 历史 : 由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。 特点 : 免费 , 开源数据库小巧 , 功能齐全使用便捷可运行于Windows或Linux操作系统可适用于中小型甚至大型网站应用 官网 : https://www.mysql.com/ 安装步骤 1、下载后得到zip压缩包. 2
  • Mysql个人学习笔记
    mysql 进阶一-基础 #进阶1:基础查询 /* 语法: select 查询列表 from 表名; 类似于:System.out.println(打印东西); 特点: 1、查询列表可以是:表中的字段、常量值、表达式、函数 2、查询的结果是一个虚拟的表格 */ USE myemployees; #使用这个数据库 #1.查询表中的单个字段 SELECT last_name FROM employees; #2.查询表中的多个字段 SELECT last_name,salary,email FROM employees; #3.查询表中的所有字段 #方式一: SELECT `employee_id`, `first_name`, `last_name`, `phone_number`, `last_name`, `job_id`, `phone_number`, `job_id`, `salary`, `commission_pct`, `manager_id`, `department_id`, `hiredate` FROM employees ; #方式二: SELECT * FROM employees; #4.查询常量值 SELECT 100; SELECT 'john'; #5.查询表达式 SELECT 100%98; #6.查询函数 SELECT VERSION();
  • Java全栈体系路线(总结不易)
    文章目录 Java全栈工程师Java基础基础语法面向对象工具类集合框架序列化反射机制注解文件处理设计模式视频教程文档教程练习题面试题GUI模块多线程模块Socket模块JDBC模块数据库操作起步JDBC执行sql数据库进阶操作JDBC进阶视频教程文档教程 JVM教程基础实战并发编程视频教程文档教程 Javaweb(必须用html、css、js)Servlet(请求响应,域对象,会话追踪)Filter(过滤器的实现)Listener(监听器的实现)JSP(九大内置对象,EL表达式,JSTL标签库)基础视频推荐实战视频推荐文档教程实战项目 Maven JfinalJfinal文档教程Jfinal视频教程Jfinal实战 Redis为什么用Redis、Redis快再哪里 数据库关系型数据库MySQL学习MySQL的完美卸载MySQL面试题核心必看MySQL学习视频推荐 Oracle学习Oracle学习视频推荐 SQLServer学习SQLServer视频推荐 DB2学习DB2学习视频推荐 非关系型数据库MongoDB学习MongoDB学习视频推荐 Hbase学习Hbase学习视频推荐 Linux 基础环境搭建文档教程Linux学习视频推荐 Go语言Go语言基础教程Go语言实战教程 Java项目实战 Java全栈工程师 Java基础 《疯狂Java讲义》(第5版) 李刚 基础语法
  • MySQL学习笔记
    引言 MySQL菜鸟笔记: https://www.runoob.com/mysql/mysql-tutorial.html 视频学习: https://www.bilibili.com/video/BV1NJ411J79W sql语言菜鸟笔记: https://www.runoob.com/sql/sql-tutorial.html 这个笔记主要记录用MySQL学习sql语法,学习笔记参考了狂神老师的笔记,整理了一下学习顺序。 一、初识MySQL 1、基本概念 数据库 (DataBase, 简称DB) 概念: 长期存放在计算机内,有组织,可共享的大量数据的集合,是一个数据 “仓库” 作用: 保存,并能安全管理数据(如:增删改查等),减少冗余… 数据库总览 : 关系型数据库 ( SQL ) MySQL , Oracle , SQL Server , SQLite , DB2 , …关系型数据库通过外键关联来建立表与表之间的关系 非关系型数据库 ( NOSQL ) Redis , MongoDB , …非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定 RDBMS 术语 在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语: **数据库:**数据库是一些关联表的集合。**数据表:**表是数据的矩阵
  • 互联网MySQL开发规范
    写在前面:无规矩不成方圆。对于刚加入互联网的朋友们,肯定会接触到MySQL,MySQL作为互联网最流行的关系型数据库产品,它有它擅长的地方,也有它不足的短板,针对它的特性,结合互联网大多应用的特点,笔者根据自己多年互联网公司的MySQL DBA经验,现总结出互联网MySQL的一些开发规范,仅供参考。作者是微信订阅号yunweibang特约技术专家刘秋岐,多年数据库经验,如有问题可以订阅yunweibang并留言。 摘要:基础规范命名规范库、表、字段开发设计规范索引规范SQL规范流程规范 一基础规范(1) 使用INNODB存储引擎(2) 表字符集使用UTF8(3) 所有表都需要添加注释(4) 单表数据量建议控制在5000W以内(5) 不在数据库中存储图、文件等大数据(6) 禁止在线上做数据库压力测试(7) 禁从测试、开发环境直连数据库 二命名规范(1) 库名表名字段名必须有固定的命名长度,12个字符以内(2) 库名、表名、字段名禁止超过32个字符。须见名之意(3) 库名、表名、字段名禁止使用MySQL保留字(4) 临时库、表名必须以tmp为前缀,并以日期为后缀(5) 备份库、表必须以bak为前缀,并以日期为后缀三库、表、字段开发设计规范(1) 禁使用分区表(2) 拆分大字段和访问频率低的字段,分离冷热数据(3) 用HASH进散表,表名后缀使进制数,下标从0开始(4)
  • 《MySQL技术内幕InnoDB存储引擎》学习笔记
    接连面试几家公司,都被刷了下来,总结自己, mysql了解的太少了,算法不行,脑子不够用.逻辑思维不好...........人事问题达到不好,情商不够. 所以刷这本书,把mysql看看. 生活加油!依旧,摘一句子:平生不会相似,才会相思,便害相思. 2019.10.19 书的PDF资源在最后 第一章,MySQL体系结构和存储引擎 Mysql被设计为一个单进程多线程架构的数据库,Mysql数据库实例在系统上的表现就是一个进程. mysql体系结构:连接池组件,管理服务和工具组件,SQL接口组件,查询分析器组件,优化器组件,缓存组件,插件式存储引擎.存储引擎. 存储引擎是基于表的,而不是数据库. InnoDB存储引擎 ,InnoDB存储引擎支持事务,其设计目标主要是面向在线事务处理(OLTP)的应用. 特点:行锁设计,支持外键,5.5.8开始为默认存储引擎.InnoDB通过使用多版本并发控制(MVCC)来获得高并发性.对于表中数据的存储,InnoDB采用了聚集的方式,因此每张表的存储都是按主键的顺序进行存储的.没有主键,会生成一个6个字节的ROWID,作为主键.MyISAM存储引擎 ,不支持事务,表锁设计,支持全文索引 MyISAM存储引擎的缓存池只缓存索引文件,不缓存数据文件,NDB存储引擎 ,集群存储引擎,数据全部放在内存中,因此主键查找速度极快
  • MySQL笔记
    数据库的相关概念: 1.DB:数据库,保存一组有组织的数据的容器 2.DBMS:数据库管理系统,又称为数据库软件(产品),用于管理DB中的数据 3.SQL:结构化查询语言,用于和DBMS通信的语言 数据库特点: 1.将数据放到表中,表再放到库中 2.一个数据库中可以有多个表,每个表都有一个名字,用来标识自己,表名具有唯一性 3.表具有一些特性,这些特性定义了数据在表中如何存储,类似java中类的设计 4.表由列组成,我们也称为字段。所有表都是由一个或者多个列组成,每一列类似java中的属性 5.表中的数据是按行存储的,每一行类似java中的对象 MySQL下载:https://www.mysql.com 创建数据库:CREATE DATABASE 数据库名称 [库选项]; CREATE DATABASE表示创建数据库;数据库名称可以是字母、数字和下划线组成的任意字符串;库选项用于设置此数据库的相关特性,如字符集CHARSET,校对集COLLATE. 例:CREATE DATABASE mydb; 如果创建的数据库已经存在,则程序会报错,在创建数据库时可以在数据库名称前添加 IF NOT EXISTS; 例:CREATE DATABASE IF NOT EXISTS mydb; 查看MySQL中已经存在的数据库:SHOW DATABASES; 在完成创建数据库后
  • linux3剑客学习笔记
    linux命令三剑客 1.正则表达式 正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 要想真正的用好正则表达式,正确的理解元字符是最重要的事情。下表列出了所有的元字符和对它们的一个简短的描述。 \ 将下一个字符标记符、或一个向后引用、或一个八进制转义符。例如,“\n”匹配\n。“\n”匹配换行符。序列“\”匹配“\”而“(”则匹配“(”。即相当于多种编程语言中都有的“转义字符”的概念。 ^ 匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。 $ 匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。 匹配前面的子表达式任意次。例如,zo*能匹配“z”,也能匹配“zo”以及“zoo”。 匹配前面的子表达式一次或多次(大于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。 ? 匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或
  • MySQL入门系列(2) - 检索数据
    MySQL入门系列(2) - 检索数据 基础用法 # 检索单列 select column_name from table_name # 检索多列 select column1_name,column2_name,... from table_name # 检索所有列 * 通配符 匹配任意多个字符 select * from table_name # 检索不同的值 select distinct column_name from table_name ## 此时只要(column1_name, column2_name) != (column1_name_another, column2_name_another)时就算不同,即distinct用于多个列时会把它们组合成一个向量,一旦某个分量不同则算作distinct,也就会被检索出来 select distinct column1_name, column2_name from table_name # 限制结果 mysql索引从0开始 ## 从索引1开始(包括索引1)往后取满5条记录 SELECT prod_name FROM Products LIMIT 5 OFFSET 1; ## 也可按如下方式简写 SELECT prod_name FROM Products LIMIT 1,5; ## 不带offset
  • Matlab 学习笔记(一)
    %% Matlab 学习笔记 %清屏函数: clc %清除工作区内容函数:clear all %% 一、一维数组的创建: % 1.1直接输入法: a = [1;2;3] %生成行向量 a = [1 2 3] %生成列向量 a = [1,2,3] %生成列向量 % 1.2冒号生成法: 初值:步长:终值 a = 1:2:6 b = 1:6 %步长为1时可以省略 % 1.3定数线性采样法: x = linspace(a,b,n) %(初值,终值,取点个数)平均取点!!! %n的默认值是100 b = linspace(1,6,5) % 1.4拼接法: a3 = [a1,a2] %行向量拼接 b3 = [b1;b2] %列向量拼接 a4 = a3[1:2:end] %向量抽取 [初值,步长,终值] %% 一维数组的提取 A = [1:2:3:4:5] a = A(3) %注意是圆括号!!! %% 二、二维数组的创建 % 1.1直接输入法: a = [1,2,3;4,5,6;7,8,9]%生成矩阵 a = [1 2 3;4 5 6;7 8 9] a = [1,2,3; 4,5,6; 7,8,9] %矩阵的维数不用提前定义 % 1.2利用函数法: ones(n) %n阶全一矩阵 zeros(n) %n阶全零矩阵 rand(n) %n阶矩阵,元素为(0,1)区间内均匀分布的随机数 eye(n)
  • OpenCV与图像算法笔记
    本博客为《OpenCV算法精解:基于Python与C++》一书(参阅源代码链接)的阅读笔记,根据理解对书中绝大多数算法做了总结和描述,对Numpy较为熟悉,Python方面仅对与C++不同的注意事项做了标注。书作者整体按照冈萨雷斯的经典教材《数字图像处理(第三版)》和OpenCV知识脉络组织内容,每个算法均用Python和C++两种语言实现。除官方函数外本书给出了多数算法函数的自定义版本便于读者理解,以及部分官方未包含的算法(利于导向滤波、Marr-Hildreth边缘检测等) 源代码下载地址 www.broadview.com.cn/32495 文章目录 第二章: 图像的数字化一. 创建一个Mat二. Mat的基本成员变量和函数三. 访问Mat对象中的值四. 列向量Vec五. 多通道矩阵六. 获取矩阵某一区域的值七. 矩阵运算八. 图像灰度化 第三章 几何变换一.仿射变换二. 投影变换三. 极坐标变换 第四章 对比度增强一. 灰度直方图 第五章 图像平滑一. 二维离散卷积二. 高斯平滑三. 均值平滑四. 中值平滑五. 双边滤波六. 联合双边滤波七. 导向滤波 第六章. 阈值分割一. 全局阈值分割二. 局部阈值/自适应阈值分割三. 二值图逻辑运算 第七章 形态学处理一. 腐蚀二. 膨胀三. 开运算和闭运算四. 顶帽和底帽运算五. 形态学梯度 第八章 边缘检测¸