SQL进阶教程
《SQL进阶教程》个人读书笔记
氧小氢
心怀浪漫宇宙,也珍惜人间日常
展开
-
EXISTS谓词的用法
支持SQL的基础理论有两个:一个是数学领域的集合论,另一个是作为现代逻辑学标准体系的谓词逻辑(predicate logic),准确地说是“一阶谓词逻辑”,下面将重点介绍EXISTS谓词。EXISTS不仅可以将多行数据作为整体来表达高级的条件,而且使用关联子查询时性能仍然非常好,这对SQL来说是不可或缺的功能引入EXISTS这个谓词的目的是为了实现谓词逻辑中“量化”(quantification)这一强大功能谓词到底是什么?实际上,谓词是一种特殊的函数,返回值是真值(true、false、unk.原创 2020-11-29 11:10:08 · 567 阅读 · 0 评论 -
用SQL进行集合运算
集合论是SQL语言的根基——因为它的这个特性,SQL也被称为面向集合语言顾名思义,集合运算符的参数是集合,从数据库实现层面上来说就是表或者视图,集合运算有以下几个注意事项:SQL能操作具有重复行的集合,可以通过可选项ALL来支持一般的集合论是不允许集合里存在重复元素的,因此集合{1,1,2,3,3,3}和集合{1,2,3}被视为相同的集合。但是关系数据库里的表允许存在重复的行,称为多重集合集合运算符为了排除掉重复行,默认地会发生排序,而加上可选项ALL之后,就不会再排序,所以性能会有提升。 这.原创 2020-11-28 23:27:07 · 597 阅读 · 0 评论 -
HAVING子句的力量
表不是文件,记录也没有顺序,所以SQL不进行排序SQL不是面向过程语言,而是面向集合语言寻找缺失的编号在以前的SQL标准里,HAVING子句必须和GROUP BY子句一起使用,但是,按照现在的SQL标准来说,HAVING子句是可以单独使用的。不过这种情况下,就不能在SELECT子句里引用原来的表里的列了,要么使用常量,要么就得像SELECT COUNT(*)这样使用聚合函数-- 如果有查询结果,说明存在缺失的编号SELECT '存在缺失的编号'FROM SeqTblHAVING COU..原创 2020-11-28 22:32:15 · 171 阅读 · 0 评论 -
SQL性能优化
本文将介绍一些使SQL执行速度更快、消耗内存更少的优化技巧参数是子查询时,使用EXISTS代替IN在大多数时候,[NOT] IN 和 [NOT] EXISTS返回的结果是相同的,但是两者用于子查询时,EXISTS的速度会更快一些,原因如下:当IN的参数是子查询时,数据库首先会执行子查询,然后将结果存储在一张临时的工作表里(内联视图),然后扫描整个视图。很多情况下这种做法都非常耗费资源。使用EXISTS的话,数据库不会生成临时的工作表避免排序会进行排序的代表性的运算包括:GRO.原创 2020-11-27 21:53:52 · 97 阅读 · 0 评论 -
三值逻辑和NULL
对NULL使用比较谓词后得到的结果总是unknown,因为NULL既不是值也不是变量。NULL只是一个表示“没有值”的标记,而比较谓词只适用于值。因此,对并非值的NULL使用比较谓词本来就是没有意义的三值逻辑的真值表NOTxNOT xtfuuftANDANDtufttufuuufffffORORtufttttutuuftuf这三个真.原创 2020-11-23 22:33:31 · 252 阅读 · 0 评论 -
自连接的用法
针对相同的表进行的连接被称为“自连接”面向对象语言以对象的方式来描述世界,而面向集合语言SQL以集合的方式来描述世界,自连接技术充分体现了SQL面向集合的特性获取列的组合使用等号“=”以外的比较运算符,如“<、>、<>”进行的连接称为“非等值连接”将非等值连接与自连接结合使用称为“非等值自连接”,在需要获取列的组合时,我们经常需要用到这个技术注意:”<"、">"等比较运算符不仅可以用于比较数值大小,也可以用于比较字符串(比如按字典序进行比较)或者日期等无论.原创 2020-11-23 22:33:18 · 3544 阅读 · 0 评论 -
case表达式
CASE表达式的写法CASE表达式有简单CASE表达式和搜索CASE表达式两种写法-- 简单CASE表达式CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女'ELSE '其他' END-- 搜索CASE表达式CASE WHEN sex = '1' THEN '男' WHEN SEX = '2' THEN '女'ELSE '其他' END使用CASE表达式的时候,需注意以下几点:统一各分支返回的数据类型不要忘记写END养.原创 2020-11-23 22:33:01 · 484 阅读 · 0 评论