自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 收藏
  • 关注

原创 SQL进阶教程——SQL中的层级(2-10)

1. 谓词逻辑中的层级,集合论中的层级谓词逻辑中的阶是为了区分集合论中的元素和集合,以及谓词逻辑中的参数和谓词GROUP BY中的阶与元素和集合的区别有关,因此属于集合论中的阶2. 为什么聚合后不能再引用原表中的列在对表进行聚合的时候,只能在SELECT子句中写下面三种内容聚合键聚合函数常量年龄只是每个人的属性,而不是小组的属性。小组的属性只能是评价或者总和等统计性质的属性3...

2019-11-07 04:01:06 963

原创 SQL进阶教程——消灭NULL委员会(2-9)

1. 为什么NULL如此惹人讨厌在进行SQL编码时,必须考虑违反人类直觉的三指逻辑在指定 IS NULL 不会用到索引,因而SQL语句会执行性能低下如果四则运算以及SQL函数的参数中包含NULL,会引起“NULL的传播”在接受SQL查询的宿主语言中,NUL的处理方法没有统一标准与一般的列的值不同,NULL是通过在数据行的某处加上多余的bit来实现的2. 并不能完全消除NULL无法...

2019-11-07 03:52:49 682

原创 SQL进阶教程——人类的逻辑学(2-8)

1. 逻辑学的革命排中律:A或者非A总有一个成立,古典逻辑学中,作为神,无论多难的问题都能瞬间解决,因此古典逻辑学被称为“神的逻辑学”2. 人类的逻辑学数据库的使用者当然是人类,而不是神。因此,数据的表达方式也应该基于有限而且不完善的人类的认知,而不是神的完美无缺的认知。这就是数据库采用三指逻辑的原因...

2019-11-07 03:40:41 638

原创 SQL进阶教程——从面向过程思维向申明式思维,面向集合思维转变的7个关键点(2-6)

前言SQL中没有赋值或者循环的处理,数据也不以记录为单位进行处理,而已集合为单位进行处理1. 用CASE表达式代替IF语句和CASE语句。SQL更像一种函数式语言之所以叫它“CASE表达式”而不是“CASE语句”,是因此CASE表达式与1+1一样,都是表达式,在执行时会被整体当做一个值来处理。既然同样是表达式,那么能写1+1这样的表达式的地方都能写CASE表达式,而且因为CASE表达式最终会...

2019-11-07 03:28:47 644

原创 SQL进阶教程——GROUP BY 和PARTITION BY(2-5)

1. 类group by和partition by的区别在于,group by会在分类之后进行聚合操作划分出的子集都是非空集合所以子集的并集等于划分之前的集合任何两个子集之间都没有交集满足以上三个性质的各子集称为“类”通过对3取余给自然数集合N分类后,我们会得到下面三个类余0的类:M1={0,3,6,9…}余1的类:M2={1,4,7…}余2的类:M3={2,5,8…}...

2019-11-07 02:58:08 1096 1

原创 SQL进阶教程——地址这一巨大怪物(2-4)

1. 前言在关系模型诞生之前的研究工作中,最大动机是明确区分数据管理中的逻辑层和物理层。我们可以把它叫做数据独立性目标——Codd一般来说到关系数据库中没有指针时,并不是说在物理层也完全没有指针。相反,在物理层,指针时存在的。但是,就像前面说过的那样,在关系系统中,物理层的详细存储信息对用户是不可见的2. 关系模型是为摆脱地址而生的在现实世界的各种业务中,归根到底,我们想要的是“数据”,而...

2019-11-07 02:36:40 554

原创 SQL进阶教程——开始于关系,结束于关系(2-3)

1. 从运算角度审视集合封闭性:运算的输入和输出都是关系数学会根据“对于什么运算是封闭的”这样的标准,将集合分为各种类型,对于某种运算封闭的集合在数学上称为“代数结构”群:对加法和减法(或者乘法和除法)封闭环:对加法,减法,乘法封闭域:对加法,减法,乘法,除法封闭,即可以自由进行四则运算2. 实践和原理关系支持加法,减法,乘法,除法运算(除法运算的定义是有的),因此,关系也满足域...

2019-11-07 02:12:44 731

原创 SQL进阶教程——为什么叫“关系”模型(2-2)

1. 关系的定义“为什么叫它关系模型,而不叫他表模型?”“链接数据结构”指的是使用指针连接数据的链表结构,这是分层模型和网状模型数据结构流行的时期特有的关系和表的确相似,实质却不相同关系中不允许存在重复的元组,而表中可以存在关系中的元组没有从上往下的顺序,而表中的行有从上往下的顺序关系中的属性没有从左往右的顺序,额表中的列有从左往右的顺序关系中所有的属性都是不可分割的,而表中列的...

2019-11-07 01:47:04 628

原创 SQL进阶教程——关系型数据库的历史(2-1)

1. 前言关系模型的创始人是E.F.Codd,他在1969年发表的论文《大型数据库中关系存储的可推导性,冗余与一致性》,这篇里程碑的论文奠定了关系模型的理论基础2. 两篇论文写于1969年的《大型数据库中关系存储的可推导性,冗余与一致性》写于1970年的《大型功效数据库的关系基础》3. Codd的贡献定义了关系运算定义了代数运算采用谓词逻辑作为数据库操作的基础4. 196...

2019-11-07 00:52:00 705

原创 SQL进阶教程——SQL编程方法(第十二章)

1. 前言随着编程语言从注重“更容易让机器理解”的低级语言(如计算机语言和编程语言)向“更容易让人类理解”的高级语言发展,人们对“编程语言应该是一种人类可以读得懂,写得出的语言”这样的观点越来越认同,于是从认知心理学的角度研究编程风格的领域应运而生。(认知心理学:能跑起来就行,效率才是一切)2. 表的设计名字和意义名称l包括用来指代具体东西的固有名称,也包含用来指代概念或者集合的一般名...

2019-11-06 03:20:09 815

原创 SQL进阶教程——让SQL飞起来(第十一章)

1. 前言本节主要介绍一些使SQL执行速度更快,消耗内存更少的技巧。查询速度慢并不只是因为SQL本身问题,还可能是因为内存分配不佳,文件结构不合理等其他原因。2. 使用高效的查询在SQL中,很多时候不同代码能够得出相同结果。从理论上来说,得到相同的不同代码应该有相同的性能,但遗憾的是,查询优化器生成的执行计划很大程度上要受到代码外部结构的影响。因此如果想优化查询性能,必须知道如何写代码才能使...

2019-11-05 03:57:35 762

原创 SQL进阶教程——HAVING子句又回来了(第十章)

1. 前言学习HAVING子句的用法是帮主我们顺序的忘掉面向过程语言的思考方式并理解SQL面向集合特性的有效的方法。这是因为,HAVING子句的处理对象是集合而不是记录,所以只有习惯了面向集合的思考方式,才能真正的学好它2. 各位,全体点名Teamsmember(队员)team_id(队伍编号 ID)status(状态)乔1待命肯1出勤中米克...

2019-11-04 22:57:32 611

原创 SQL进阶教程——用SQL处理数列(第九章)

1.前言SQL语言在处理数据时默认地不考虑顺序。因此,如果遇到了需要考虑顺序的情况,处理方法与面向过程语言及文件系统的处理方法很不一样。本节将以数列为例介绍一下SQL的处理方法,并且挖掘出隐藏在背后的基本原理。2.生成连续的编号Digitsdigit( 数字 )0123456789-- 求连续编号(1):求0...

2019-11-04 19:20:35 793

原创 SQL进阶教程——EXISTS谓词的用法(第八章)

1. 前言支撑SQL和关系数据库的基础理论主要有两个:一个是数学领域的集合论;另一个是作为现代逻辑学标准体系的谓词逻辑。2. 理论篇什么是谓词返回值为真值的函数实体的阶层一介谓词:输入值为行(=或者between)二阶谓词:输入值为行的集合(exists)三阶谓词:输入值为集合的集合…关系数据库中实体的阶层0阶:行1阶:表(行的集合)2阶:表的集合全程量化...

2019-11-01 01:22:49 1103

原创 SQL进阶教程——用SQL进行集合运算(第七章)

1. 前言集合论是SQL语言的根基——这是贯穿全书主题之一。因为他的这个特性,SQL也被称为面向集合语言。只有从集合的角度思考,才能明白SQL的强大。2. 集合运算的几个注意事项SQL能操作具有重复行的集合,可以通过可选项ALL来支持。集合运算符为了排除重复行,默认的会发生排序,而加上可选项ALL之后就不会排序,所以性能会有提升。如果不关心结果是否存在重复行,或者确认结果不会产生重复行,可...

2019-11-01 00:29:52 774

原创 SQL进阶教程——用关联子查询比较行与行(第六章)

1. 前言使用SQL对同一行数据进行列间比较很简单,只需要在WHERE子句里写上比较条件就可以了。但是,对不同行数据进行列间的比较却没那么简单。然而,这并不是说我们不能用SQL进行行与行之间的比较。使用SQL进行行间比较时,发挥主要作用的技术是关联子查询,特别是与自连接结合的“关联子查询”。2. 用列表展示与上一年的比较结果Salesyear(年份)sale(年营业额:亿日...

2019-10-31 23:01:37 928

原创 SQL进阶教程——外连接的用法(第五章)

1. 前言很多人对SQL有一个误解:他是一种用于生成报表的语言。确实SQL在生成各种定制化或非定制化报表或统计表里有着广泛的应用。这本身并没有什么问题,但“不幸”的是,数据库工程师开始要求SQL具备并非他原来用途的功能——格式转换。说起来,SQL终究只是主要用于查询数据的语言而已。2. 用外连接进行行列转换(行——>列):制作交叉表Coursesname(员工姓名)co...

2019-10-30 22:27:41 895

原创 SQL进阶教程——HAVING子句的力量(第四章)

1. 用HAVING子句进行子查询:求众数Graduate(毕业生表)name(名字)income(收入)桑普僧400000麦克30000怀特20000阿诺德2000史密斯20000劳伦斯15000哈德逊15000肯特10000贝克10000斯科特10000--求众数的SQL语句:使用谓词...

2019-10-30 01:29:09 648

原创 SQL进阶教程——三指逻辑和NULL(第三章)

1. 关于三值逻辑的理论1.1. 两种NULL两种NULL分别指的是“未知的”和“不适用的”,“不知道戴墨镜的人眼睛是什么颜色”,这就是未知的;“不知道冰箱的眼睛是什么颜色”,这就是“不适用”。总结一下:“未知”指的是“虽然现在不知道,但加上某些条件后可以知道”;“不适用”指的是“无论怎么努力都无法知道”。1.2. 为什么必须写成“IS NULL”,而不是“= NULL”--查询NULL...

2019-10-29 22:56:56 761

原创 SQL进阶教程——自连接的用法(第二章)

1. 什么是自连接针对相同的表进行的连接被称为“自连接”,一旦熟练掌握自连接技术,我们便能快速的解决很多问题。但是,其处理过程不太容易想象,以至于常常被人们敬而远之。理解自连接不仅可以让我们学会实际工作中能用到的技能,还能增进我们对“面向集合”这一SQL语言特征的理解。2. 可重排列,排列,组合假设这列有一张存放了商品名称及价格的表,表里有“苹果,橘子,香蕉”这三条记录。在生成用于查询销售...

2019-10-29 13:45:39 1745

原创 SQL进阶教程——CASE表达式(第一章)

1. CASE表达式概述CASE表达式是从SQL-92标准开始被引入的,可能因为他是相对比较新的技术,所以尽管使用起来非常便利,但其真正的价值却并不怎么为人所知。很多人不用它,或者用他的简版函数,例如DECODE(Oracle),IF(MySQL)等。如果能用好它,那么SQL能解决的问题就会更广泛,写法也会更加漂亮。而且,因为CASE表达式是不依赖于具体数据库的技术,所以可以提高SQL代码的可移...

2019-10-28 19:50:00 757

原创 SQL基础教程——GROUPING运算符(第八章第二节)

1、ROLLUP——同时得出合计和小计select product_type,sum(sale_price) AS sum_pricefrom productgroup by rollup(product_type);2、GROUPING函数——让NULL更加容易分辨--该函数在其参数列的值为超级分钟记录所产生的null时返回1,其他情况返回0SELECT GROUPING(prod...

2019-09-07 11:15:39 682

原创 SQL基础教程——窗口函数(第八章第一节)

1、窗口函数的语法<窗口函数> over ([partition by <列清单>] order by <排序用列清单>)能够作为窗口函数的聚合函数rank,dense_rank,row_number等专用窗口函数SELECT product_name,product_type,sale_price,rank() over (partition ...

2019-09-02 13:46:28 634

原创 SQL基础教程——联结(第七章第二节)

1、内联结——INNER JOINSELECT SP.shop_id,sp.shop_name,sp.product_id,p.product_name,p.sale_pricefrom shopproduct AS sp inner join product AS pon sp.product_id=p.product_id;2、外联结——outer joinSELECT SP.sh...

2019-09-02 13:27:13 561

原创 SQL基础教程——表的加减法(第七章第一节)

1、表的加法——UNIONSELECT product_id,product_nameFROM ProductUNIONSELECT product_id,product_nameFROM product2;注意:1、作为运算对象的记录的列数必须相同2、作为运算对象的记录中列的类型必须一致3、可以使用任何select语句,但order by子句只能在最后使用一次2、选取表中公...

2019-09-02 13:16:44 826

原创 SQL基础教程——case表达式(第六章第三节)

1、case表达式分为简单case表达式和搜索case表达式两种SELECT product_name, CASE WHEN product_type='衣服' THEN 'A:' || product_type ELSE NULL END AS abc_product_type FROM product;...

2019-09-02 13:08:26 686

原创 SQL基础教程——谓词(第六章第二节)

1、什么是谓词谓词的返回值全都是真值(true/false/unknown)2、like谓词-字符串的部分一致查询2.1、前方一致查询select * from samplelike where strcol like 'ddd%';2.2、中间一致查询select * from samplelike where strcol like '%ddd%';2.3、后方一致查询se...

2019-09-02 13:02:15 832

原创 SQL基础教程——各种各样的函数(第六章第一节)

1、函数的种类算术函数字符串函数日期函数转换函数聚合函数2、算数函数2.1、四则运算/2.2、ABS-绝对值SELECT m,abs(m) AS abs_colfrom sampleMath注意:1、绝大多数函数对于null都返回null2.3、mod-求余SELECT n,p,mod(n,p) AS mod_colfrom ...

2019-09-02 12:46:34 562

原创 SQL基础教程——关联子查询(第五章第三节)

1、关联子查询SELECT product_type,product_name,sale_priceFROM product AS P1WHERE sale_price>(select avg(sale_price) from product AS p2where p1.product_type=p2.product_typegroup by product_type);...

2019-09-02 12:15:39 586

原创 SQL基础教程——子查询(第五章第二节)

1、子查询和视图视图并不是用来保存数据的,而是通过保存读取数据的SELECT语句的方法来为用户提供便利。SELECT product_type,cnt_productFROM (SELECT product_type,COUNT(*) AS cnt_productFROM productGROUP BY product_type ) AS ProductSum;注意:1、子查询就...

2019-09-02 10:35:42 609

原创 SQL基础教程——视图(第五章第一节)

1、什么是视图使用视图时并不会讲数据保存到存储设备中,而且也不会讲数据保存到其他任何地方。实际上视图保存的是select语句。我们从视图中读取数据时,视图会在内部执行该select语句并创建出一张临时表。表中保存的是实际数据,视图中保存的是select语句。2、视图的优点视图无需保存数据,因此可以节省存储设备的容量。可以将频繁使用的select语句保存成视图,这样就不用都重新书写了。...

2019-09-02 10:20:04 617

原创 SQL基础教程——事务(第四章第四节)

1、什么是事务事务就是需要在同一个处理单元中执行的一系列更新处理的集合。2、创建事务--postgreSQLBEGIN TRANSACTION;UPDATE productSET sale_price=sale_price-1000WHERE product_name='运动';UPDATE productSET sale_price=sale_price+1000WHER...

2019-08-25 17:30:27 682

原创 SQL基础教程——数据的更新(UPDATE语句的使用方法)(第四章第三节)

1、UPDATE语句的基本语句UPDATE productSET regist_date ='2009-10-10';2、指定条件的UPDATE语句(搜索型UPDATE)UPDATE productSET sale_price = sale_price * 10WHERE product_type='厨房用具';3、使用null进行更新UPDATE productSET re...

2019-08-25 17:14:00 1014

原创 SQL基础教程——数据的删除(DELETE语句的使用方法)(第四章第二节)

1、drop table语句和delete语句drop table语句可以将表完全删除delete语句会留下表,而删除表中的全部数据2、delete语句的基本语句DELETE FROM product;3、指定删除对象的delete语句(搜索型delete)DELETE FROM ProductWHERE sale_price >=4000;注意:1、于select...

2019-08-25 17:05:39 1456

原创 SQL基础教程——数据的插入(INSERT语句的使用方法)(第四章第一节)

1、INSERT语句的基本语法INSERT INTO productIns (product_id,product_name) VALUES ('001','体血衫')--执行一次INSERT语句会插入一行数据2、列清单的省略对表进行全列INSERT时,可以省略表名后的列清单。3、插入nullINSERT INTO product(product_id,product_name) V...

2019-08-25 16:57:30 4688

原创 SQL基础教程——对查询结果排序(第三章第四节)

1、ORDER BY 子句SELECT product_id,product_name,sale_price,purchase_price FROM Product ORDER BY sale_price;注意:子句的书写顺序:SELECT——>FROM——>WHERE——>GROUP BY——>HAVING——>ORDER BY2、指定升序或降序由于AS...

2019-08-25 15:22:11 216

原创 SQL基础教程——为聚合结果指定条件(第三章第三节)

1、HAVING子句SELECT product_type,count(*)FROM productGROUP BY product_typeHAVING COUNT(*)=2;2、HAVING子句的构成要素HAVING子句中能够使用的三种要素如下常数聚合函数GROUP BY子句中指定的列名(聚合键)3、相对于HAVING子句,更适合写在where子句中的条件聚合键所对...

2019-08-25 15:01:33 246 1

原创 SQL基础教程——对表进行分组(第三章第二节)

1、GROUP BY子句SELECT Product_type,count(*)FROM ProductGROUP BY product_type;注意:1、GROUP BY 子句中指定的列称为聚合键或者分组列。2、聚合键中包含null的情况聚合键中包含null时,在结果中会以“不确定”行(空行)的形式表现出来3、使用where子句时group by的执行结果SELECT pu...

2019-08-25 14:45:59 211

原创 SQL基础教程——对表进行聚合查询(第三章第一节)

1、聚合函数用来汇总的函数称为聚合函数或者聚集函数。五个常用的函数COUNT:计算表中的记录数SUM:计算表中数值列数据的合计值AVG:计算表中数值列数据的平均值MAX:求出表中列中数据的最大值MIN:求出表中任意列数据的最小值2、计算表中数据的行数SELECT COUNT(*)FROM Product;3、计算null之外的数据的行数SELECT COUNT(pru...

2019-08-25 14:26:12 268

原创 SQL基础教程——逻辑运算符(第二章第三节)

1、NOT运算符SELECT product_name,product_type,sale_priceFROM productWHERE NOT sale_price >= 1000;--NOT运算符用来否定某一条件,但是不能滥用。2、AND运算符和OR运算符在WHERE子句中使用AND运算符或者OR运算符,可以对多个查询条件进行组合。AND运算符在其两侧的查询条件都成立时整...

2019-08-25 13:32:18 490

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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