SQL进阶教程
「已注销」
这个作者很懒,什么都没留下…
展开
-
1-1 case表达式-SQL进阶教程
1-1 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■ 剩余的WHEN 子句被忽略的写...原创 2019-06-06 15:33:35 · 311 阅读 · 1 评论 -
1-7练习题-SQL进阶教程
练习题1-7-1 :改进“只使用union的比较”在“比较表和表:检查集合相等性之基础篇”部分,我们学习了只使用了union的SQL语句。当时我们提到,在使用这条SQL语句之前需要事先查一下两张表的行数是否相等。实际上,我们稍微修改一下,就可以不需要判断行数也能直接执行。请考虑一下该如何修改select(case when count(*)=(select count(*) from ...原创 2019-08-26 11:24:03 · 164 阅读 · 0 评论 -
1-8 exists谓词的用法-SQL进阶教程
谓词是一种特殊的函数,返回值是真值(true 、false或者unknown)例如,“= 、< 、> ”等比较谓词,以及between、like 、in 、is null等在exists的子查询里, select子句的列表可以有下面这三种写法通配符:SELECT *常量:SELECT ‘这里的内容任意’列名:SELECT col全称量词∀(for All x):所有的x...原创 2019-08-27 16:22:21 · 239 阅读 · 0 评论 -
1-8练习题-SQL进阶教程
练习题1-8-1 :数组表——行结构表的情况在“对列进行量化:查询全是1的行”部分,我们讨论了对模拟数组的表按“列方向”量化的方法。接下来我们将正文中的表改成行结构的表,并通过这张表来练习一下。“i”列表示数组的下标,因此主键是“key, i ”一个实体对应10行数据,所以上面的表省略了一部分以方便显示。A、B、C的元素和正文中是一样的。key为A的行val全都是null,key为B的行中只...原创 2019-08-27 17:36:51 · 200 阅读 · 0 评论 -
1-9 用SQL处理数列-SQL进阶教程
生成连续编号原创 2019-08-28 15:36:43 · 371 阅读 · 0 评论 -
1-9练习题-SQL进阶教程
练习题1-9-1 :求所有的缺失编号——not exists和外连接正文中提到过,SQL里有很多方法可以实现差集运算。正文里介绍了使用except和not in实现的方法。请思考一下使用not exists和外连接实现的方法-- not exists版select seqfrom Sequence Swhere seq between 1 and 12and not exists(...原创 2019-08-28 16:02:34 · 157 阅读 · 0 评论 -
1-10 having子句又回来了-SQL进阶教程
各队,全体点名查出现在可以出勤的队伍。可以出勤即队伍里所有队员都处于“待命”状态-- 用谓词表达全称量化命题select team_id,memberfrom Teams T1where not exists( select * from Teams T2 where T1.team_id=T2.team_id and status<>'待命');-- 用集合...原创 2019-08-29 10:41:47 · 180 阅读 · 0 评论 -
1-10练习题-SQL进阶教程
练习题1-10-1 :单重集合与多重集合的一般化在“单重集合与多重集合”部分,我们只针对material一个字段检查了集合中是否存在重复值。这次我们考虑一下推而广之,针对多个字段检查是否存在重复我们在原来的表中加上“原产国”这样一个字段,作为测试数据请从表中查出材料和原产国两个字段都重复的生产地select centerfrom Materials2group by center...原创 2019-08-29 11:02:13 · 327 阅读 · 0 评论 -
1-11 让SQL飞起来-SQL进阶教程
使用高效的查询参数是子查询时,使用exists代替in-- 从Class_A表中查出同时存在于Class_B表中的员工select * from Class_Awhere id in(select id from Class_B);select * from Class_A Awhere exists (select * from Class_B B where A.id=B.i...原创 2019-08-29 17:39:24 · 316 阅读 · 0 评论 -
1-7 用SQL进行集合运算-SQL进阶教程
导入篇:集合运算的几个注意事项注意事项 1:SQL能操作具有重复行的集合,可以通过可选项all来支持(eg.union all)集合运算符为了排除掉重复行,默认地会发生排序,而加上可选项all之后,就不会再排序,所以性能会有提升注意事项 2:集合运算符有优先级intersect比union和except优先级更高当同时使用union和intersect,又想让union优先执行时,必须用...原创 2019-08-26 11:05:21 · 195 阅读 · 0 评论 -
1-6练习题-SQL进阶教程
练习题1-6-1 :简化多行数据的比较在“用列表展示与上一年的比较结果”部分,我们比较了企业每年的营业额与上一年相比是否增加。其实,第一条SQL的性能还有改善的余地。在三个when子句里,同样的子查询执行了三次,有点多余,所以请把它们整合在一个when子句里练习题1-6-2 :使用overlaps查询重叠的时间区间很多人都不知道,SQL-92提供了overlaps谓词(Oracle和Post...原创 2019-08-23 11:01:14 · 238 阅读 · 0 评论 -
1-6 用关联子查询比较行与行-SQL进阶教程
增长、减少、维持现状-- 求与上一年营业额一样的年份(1):使用关联子查询select year,salefrom Sales S1where sale=(select sale from Sales S2 where S2.year=S1.year-1)order by year;-- 求与上一年营业额一样的年份(2):使用自连接select S1.year,S1.salef...原创 2019-08-23 10:18:13 · 193 阅读 · 0 评论 -
1-1练习题-SQL进阶教程
1-1 CASE 表达式●练习题1-1-1 :多列数据的最大值-- 求x,y和z中的最大值select key,case when case when x<y then y else x end<z then z else case when x<y then y else x end endas greatest...原创 2019-06-06 15:35:45 · 560 阅读 · 0 评论 -
1-2 自连接的用法-SQL进阶教程
针对相同的表进行的连接被称为“自连接”(self join)面向对象语言以对象的方式来描述世界,而面向集合语言SQL以集合(eg.二维表) 的方式来描述世界可重排列、排列、组合有序对(ordered pair)<1, 2> ≠ <2, 1> - 排列无序对(unordered pair){1, 2} = {2, 1} - 组合...原创 2019-06-21 16:57:52 · 428 阅读 · 0 评论 -
1-2练习题-SQL进阶教程
1-2 自连接的用法●练习题1-2-1 :可重组合请使用 P.22 的表 Products,求出两列可重组合。结果应该如下所示因为是组合,所以(香蕉, 橘子)和(橘子, 香蕉)这样顺序相反的对 被视为相同的对。此外,因为允许重复,所以结果里也出现了(橘 子, 橘子)这样的对●练习题1-2-2 :分地区排序P.29 的“排序”部分针对表的所有行计算了位次。这里准备了下面这样增加了“地区”...原创 2019-08-01 13:18:36 · 440 阅读 · 0 评论 -
1-3 三值逻辑和null-SQL进阶教程
二值逻辑布尔型只有true和false两个值三值逻辑布尔型除true和false之外还有第三个值unknownnull既不是值也不是变量,null只是一个表示“没有值”的标记1. 比较谓词和null(1):排中律不成立排中律把命题和它的否命题通过‘or’连接而成的命题全都是真命题由于存在null值,在SQL的世界里,排中律是不成立的-- 添加第3个条件:年龄是20岁,或者不是2...原创 2019-08-01 15:57:21 · 308 阅读 · 0 评论 -
1-5 外连接的用法-SQL进阶教程
用外连接进行行列转换 (1)(行→列):制作交叉表-- 水平展开求交叉表(1):使用外连接select C0.name,(case when C1.name is not null then 'o原创 2019-08-21 10:25:00 · 293 阅读 · 0 评论 -
1-5练习题-SQL进阶教程
1-5 外连接的用法●练习题1-5-1 :先连接还是先聚合在“在交叉表里制作嵌套式表侧栏”部分里,我们通过聚合将DATA视图和MASTER视图转换为一对一的关系之后进行了连接操作。采用这种做法时,代码的确比较好理解,但是这就需要创建两个临时视图,性能并不是很好。请想办法改善一下代码,尽量减少临时视图select MASTER.age_class age_class,MASTER.sex_...原创 2019-08-21 11:00:38 · 254 阅读 · 0 评论 -
1-4 having子句的力量-SQL进阶教程
寻找缺失的编号-- 如果有查询结果,说明存在缺失的编号select '存在缺失的编号' gapfrom SeqTblhaving count(*)<>max(seq);/*having子句是可以脱离group by子句单独使用的但是在这种情况下select子句就不能引用原来表里的字段了,要么像示例里一样使用常量,要么像 select count(*)这样使用聚合函数*...原创 2019-08-16 15:55:50 · 171 阅读 · 0 评论 -
1-4练习题-SQL进阶教程
1-4 having子句的力量练习题1-4-1 :修改编号缺失的检查逻辑,使结果总是返回一行数据在“寻找缺失的编号”部分,我们写了一条SQL语句,让程序只在存在缺失的编号时返回结果。请将SQL语句修改成始终返回一行结果,即存在缺失的编号时返回“存在缺失的编号”,不存在缺失的编号时返回“不存在缺失的编号”select '存在缺失的编号' gapfrom SeqTblhaving coun...原创 2019-08-16 16:27:06 · 215 阅读 · 0 评论 -
1-12 SQL编程方法-SQL进阶教程
表的设计名字和意义命名时允许的字符有以下3种:英文字母阿拉伯数字下划线“_”标准SQL中规定名称的第一个字符应该是英文字母属性和列在数据库中,列代表的是“属性”,因此应该具有一贯性编程的方针注释-- 单行注释-- 从SomeTable中查询col_1select col_1from SomeTable;/*多行注释从SomeTable中查询col_1*/...原创 2019-08-30 10:40:59 · 331 阅读 · 0 评论