读SQL进阶教程
文章平均质量分 85
读SQL进阶教程笔记、感想与总结
躺柒
书既可以读薄也可以读厚
1. 输出才能检验输入;
2. 分享才能集思广益;
3. 完成才能完善,无限完善才能逼近完美;
4. 万事开头难,坚持更难,长期坚持难上加难。
展开
-
SQL进阶教程读后总结与感想
以前我是用过程(命令)式思维去看这个世界,到后来我才明白也可以用集合论或者函数式思维去看这个世界。套用大话西游的台词“以前我是用肉眼去看这个世界,到后来我才明白应该用心去看这个世界。查不出,查不快,很可能就是null这个幽灵在作祟,你又无法根除它,只能时刻保持警惕。另外,原书练习题和第三章附录答案等,也很有意思,有兴趣的同学可以找来做做。书到用时方恨少,读了之后,发现SQL还可以这么玩,果然牛掰!所以,近一段时间,阅读函数式编程和SQL编程的书籍较多。两者很像,都不同于过程(命令)式。SQL解惑(第2版)原创 2023-05-27 06:30:00 · 1134 阅读 · 0 评论 -
读SQL进阶教程笔记16_SQL优化让SQL飞起来
5.8.1. 在col_1和col_2上分别建立了不同的索引,或者建立了(col_1, col_2)这样的联合索引时,如果使用OR连接条件,那么要么用不到索引,要么用到了但是效率比AND要差很多。HAVING子句是针对聚合后生成的视图进行筛选的,但是很多时候聚合后的视图都没有继承原表的索引结构。3.1.1.1. 当IN的参数是子查询时,数据库首先会执行子查询,然后将结果存储在一张临时的工作表里(内联视图),然后扫描整个视图。2.2. 遗憾的是,查询优化器生成的执行计划很大程度上要受到代码外部结构的影响。原创 2023-05-15 06:30:00 · 308 阅读 · 0 评论 -
读SQL进阶教程笔记15_SQL编程思维
8.3.3.1. 同样的功能也可以用HAVING子句或者ALL谓词来实现。原创 2023-05-08 06:30:00 · 331 阅读 · 0 评论 -
读SQL进阶教程笔记14_SQL编程要点
因为结果的格式依赖1.1.3. 四则运算以及SQL函数的参数中包含NULL,会引起“NULL的传播”1.1.4. 接收SQL查询结果的宿主语言中,NULL的处理方法没有统一标准1.1.4.1. Oracle不区分空字符串和NULL1.1.4.2. Visual Basic是区分的1.3.3.1. ISO的性别编号1.3.3.1.1. “1:男性”“2:女性”1.3.3.1.2. “0:未知”“9:不适用”1.3.3.1.2.1. 编号9可用于法人的情况1.3.3.1.2.2. 由Codd区分的两原创 2023-05-01 06:30:00 · 685 阅读 · 0 评论 -
读SQL进阶教程笔记01_CASE表达式
1.1. SQL-92标准里加入的最有用的特性1.2. 写法1.2.1. 简单CASE表达式CASE sexWHEN '1' THEN ’男’WHEN '2' THEN ’女’ELSE ’其他’ END1.2.1.1. 写法简单,但能实现的事情比较有限1.2.2. 搜索CASE表达式CASE WHEN sex ='1'THEN’男’WHEN sex ='2'THEN’女’ELSE ’其他’ END1.2.2.1. 简单CASE表达式能写的条件,搜索CASE表达式也能写。转载 2023-03-29 06:30:00 · 115 阅读 · 0 评论 -
读SQL进阶教程笔记02_三值逻辑和NULL
3.5. IS NULL这样的谓词是由两个单词构成的,所以人们容易把IS当作谓词,而把NULL当作值。5.4.4. --3.unknown OR unknown的结果是unknown。10.2.1. --查询比住在东京的学生的平均年龄还要小的A班学生的SQL语句?7.3.2. --查询与B班住在东京的学生年龄不同的A班学生的SQL语句?8.3.1. --查询比B班住在东京的所有学生年龄都小的A班学生。9.1. --查询比B班住在东京的年龄最小的学生还要小的A班学生。转载 2023-03-30 06:30:00 · 71 阅读 · 0 评论 -
读SQL进阶教程笔记03_自连接
6.1.2.3. 如果修改成COUNT(DISTINCT P2.price),那么存在相同位次的记录时,就可以不跳过之后的位次,而是连续输出(相当于DENSE_RANK函数)4.3. “表”“视图”这样的名称只反映了不同的存储方法,而存储方法并不会影响到SQL语句的执行和结果。1.1. 相同的表的自连接和不同表间的普通连接并没有什么区别,自连接里的“自”这个词也没有太大的意义。6.1.1.1. 在出现相同位次后,rank_1跳过了之后的位次,rank_2没有跳过,而是连续排序。转载 2023-03-31 06:30:00 · 36 阅读 · 0 评论 -
读SQL进阶教程笔记04_集合运算
6.4.1. PostgreSQL里的相应名字是oid,如果要使用,需要事先在CREATE TABLE的时候指定可选项WITH OIDS。3.5.2. (A UNION B) EXCEPT (A INTERSECT B)的结果集是不是空集就可以了。3.5.1. 如果A UNION B = A INTERSECT B,则集合A和集合B相等。3.4.2. 这个查询的结果与tbl_A及tbl_B的行数一致,则两张表是相等的。6.2. --用于删除重复行的高效SQL语句(1):通过EXCEPT求补集。转载 2023-04-01 06:30:00 · 55 阅读 · 0 评论 -
读SQL进阶教程笔记05_关联子查询
5.1.7. A3.prc_date在以A2.prc_date为起点,以A1.prc_date为终点的区间内移动。1.2. 使用SQL进行行间比较时,发挥主要作用的技术是关联子查询,特别是与自连接相结合的“自关联子查询”2.2.2. S2.year = S1.year -1这个条件起到了将要比较的数据偏移一行的作用。5.1.3. 从性能方面来看,表的扫描和数据排序也都只进行了一次。2.2.3. --求与上一年营业额一样的年份(2):使用自连接。5.1.8. --移动累计值(3):不满3行的区间按无效处理。转载 2023-04-02 06:30:00 · 63 阅读 · 0 评论 -
读SQL进阶教程笔记06_外连接
4.1.6. 对于不支持CROSS JOIN语句的数据库,可以像FROM TblAge,TblSex这样不指定连接条件,把需要连接的表写在一起,其效果与交叉连接一样。2.1.1.4.2. 其实在SELECT子句里,聚合函数的执行结果也是标量值,因此可以像常量和普通列一样使用。2.1.1.4.1. CASE表达式可以写在SELECT子句里的聚合函数内部,也可以写在聚合函数外部。因此,当表之间是一对多的关系时,连接后行数不会增加。6.5. 外连接的思想和集合运算很像,使用外连接可以实现各种集合运算。转载 2023-04-03 06:30:00 · 80 阅读 · 0 评论 -
读SQL进阶教程笔记07_EXISTS谓词
6.1.1.1.6.1.1.2. 所有人都参加了全部会议时6.1.1.3. --求出缺席者的SQL语句(1):存在量化的应用(SELECT *6.1.1.3.1. ----求出缺席者的SQL语句(2):使用差集运算EXCEPT6.1.1.3.2. NOT EXISTS直接具备了差集运算的功能。转载 2023-04-04 06:30:00 · 122 阅读 · 0 评论 -
读SQL进阶教程笔记08_处理数列
SELECT seqEXCEPT4.1.1.1. --NOT IN版SELECT seq。转载 2023-04-05 06:30:00 · 67 阅读 · 0 评论 -
读SQL进阶教程笔记09_HAVING上
5.1.1.3.2. -- 比较男生和女生平均分的SQL语句(2):对空集求平均值后返回NULL。5.1.1.3.1. -- 比较男生和女生平均分的SQL语句(1):对空集使用AVG后返回0。5.1.1.2. 查询出分数在50分以上的男生的人数比分数在50分以上的女生的人数多的班级。5.1.1.1. 查询出75%以上的学生分数都在80分以上的班级。3.1.1.2. --存在重复的集合:使用EXISTS。2.1.1.2. -- 用集合表达全称量化命题(1)3.1.1.1. -- 选中材料存在重复的生产地。转载 2023-04-06 06:30:00 · 56 阅读 · 0 评论 -
读SQL进阶教程笔记10_HAVING下
6.3.1.2. 如果去掉等号,将条件改成“>COUNT(*)/2”,那么当元素个数为偶数时,S1和S2就没有共同的元素了,也就无法求出中位数了。6.3.1.3. 如果事先知道集合的元素个数是奇数,那么因为FROM子句里的子查询结果只有一条数据,所以外层的AVG函数可以去掉。7.3.1.1. --查询“提交日期”列内不包含NULL的学院(1):使用COUNT函数。7.3.1.2. --查询“提交日期”列内不包含NULL的学院(2):使用CASE表达式。5.2.1.2.1. 用极值函数来代替。转载 2023-04-07 06:30:00 · 38 阅读 · 0 评论 -
读SQL进阶教程笔记11_关系数据库基础
正式的关系模型术语非正式的日常用语关系(relation )表(table )元组(tuple )行(row )或记录(record )势(cardinality )行数(number of rows )属性(attribute )列(column )或字段(field )度(degree )列数(number of columns )定义域(domain )列的取值集合(pool of legal values )10.5.3.1. “泛文件主义”原创 2023-04-14 06:30:00 · 53 阅读 · 0 评论 -
读SQL进阶教程笔记12_地址与三值逻辑
我认为,明年的某一个时间点(比如12月21日正午)我是否在华沙,在今天这一天看来无法肯定也无法否定,这并不矛盾。因此在指定的时间点我也许在华沙这件事是可能的,但却不是必然的。进而,“明年的12月21日正午我也许在华沙”这个命题,在今天这一天看来既不可能是真也不可能是假。……因此,在今天这一天,这个命题的值只能是一个全新的值,不同于表示真的数值“1”,也不同于表示假的数值“0”。我们可以用“1/2”来表示这个值。它的含义是“可能”,它是和“真”“假”并列的第三个值。原创 2023-04-19 06:30:00 · 369 阅读 · 0 评论 -
读SQL进阶教程笔记13_SQL中的分组和层级
2.6.2.1. 这两个层级的区别分别对应着SQL中的WHERE子句和HAVING子句的区别2.6.2.2. WHERE子句用于处理“行”这种0阶的对象2.6.2.3. HAVING子句用来处理“集合”这种1阶的对象。原创 2023-04-21 06:30:00 · 475 阅读 · 0 评论