jjzjj

选读SQL经典实例笔记22_2版增补

1. 2版DB版本1.1. DB211.51.2. Oracle19c1.3. PostgreSQL121.4. MySQL8.01.5. SQLServer20172. 子查询2.1. 如果想创建虚拟表,以便对其执行包含窗口函数或聚合函数的查询,那么最简单的做法无疑是使用子查询2.2. 只需编写一个查询并将其放在括号内,然后再编写另一个使用它的查询2.3. 有些RDBMS要求给子查询表指定别名,有些则不要求这样做2.3.1. Oracle不要求2.4. 示例2.4.1. sqlselectmax(HeadCount)asHighestJobHeadCountfrom(selectjob,co

选读SQL经典实例笔记21_字符串处理

1. SQL并不专门用于处理复杂的字符串1.1. 需要有逐字遍历字符串的能力。但是,使用SQL进行这样的操作并不容易1.2. SQL没有Loop循环功能1.2.1. Oracle的MODEL子句除外2. 遍历字符串2.1. 把EMP表的ENAME等于KING的字符串拆开来显示为4行,每行一个字符2.2. sqlselectsubstr(e.ename,iter.pos,1)asCfrom(selectenamefromempwhereename='KING')e,(selectidasposfromt10)iterwhereiter.pos<=length(e.ename)C-KING2.3.

选读SQL经典实例笔记20_Oracle语法示例

1. 计算一年有多少天1.1. Oracle sql语句实例select'Daysin2005:'||to_char(add_months(trunc(sysdate,'y'),12)-1,'DDD')asreportfromdualunionallselect'Daysin2004:'||to_char(add_months(trunc(to_date('01-SEP-2004'),'y'),12)-1,'DDD')fromdualREPORT-----------------Daysin2005:365Daysin2004:3662. 查找含有数字和字母的字符串2.1. Oraclesql

选读SQL经典实例笔记19_Any和All

1. Any1.1. 任意一个1.2. 选修了任意一门课程的学生1.2.1. 找出选修了至少一门课程的学生1.3. 比任何火车都快的飞机1.3.1. 找出比所有火车都快的飞机2. All2.1. 全部2.2. 吃所有蔬菜的人2.2.1. 没有任何一种蔬菜他们不吃3. 问题123.1. 选修了全部课程的学生3.2. sqlselect*fromstudentwheresnonotin(selects.snofromstudents,coursescwhere(s.sno,c.cno)notin(selectsno,cnofromtake))3.3. 针对每一个学生,找出他们没有选过的课程,最后如

选读SQL经典实例笔记18_Exactly

1. 问题91.1. 只讲授一门课程的教授1.2. sqlselectp.*fromprofessorp,teachtwherep.lname=t.lnameandp.lnamenotin(selectt1.lnamefromteacht1,teacht2wheret1.lname=t2.lnameandt1.cno>t2.cno)LNAMEDEPTSALARYAGE----------------------------------------POMELSCIENCE500651.3. 找到讲授了两门以上课程的教授1.4. 找到讲授了至少一门课程但不存在于第一步返回结果集的教授1.5. DB

选读SQL经典实例笔记17_最多和最少

1. 问题41.1. 最多选修两门课程的学生,没有选修任何课程的学生应该被排除在外1.2. sqlselectdistincts.*fromstudents,taketwheres.sno=t.snoands.snonotin(selectt1.snofromtaket1,taket2,taket3wheret1.sno=t2.snoandt2.sno=t3.snoandt1.cno<t2.cnoandt2.cno<t3.cno)1.3. 两次自连接的解决方案避免了聚合运算1.4. 基于SNO的内连接操作能够确保子查询返回的每一行都是针对同一个学生的数据1.5. 子查询就是为了找出选修了3门以

选读SQL经典实例笔记16_逻辑否定

1. 示例数据1.1. studentinsertintostudentvalues(1,'AARON',20)insertintostudentvalues(2,'CHUCK',21)insertintostudentvalues(3,'DOUG',20)insertintostudentvalues(4,'MAGGIE',19)insertintostudentvalues(5,'STEVE',22)insertintostudentvalues(6,'JING',18)insertintostudentvalues(7,'BRIAN',21)insertintostudentvalues

选读SQL经典实例笔记15_窗口函数

1. 分组1.1. 把相似的行数据聚集在一起2. SQL分组的定义2.1. 数学上的“群”(group)定义为(G,•,e),其中G是一个集合,•表示G的二进制运算,而e则是G中的成员2.2. 一个SQL分组须满足的两个定理2.2.1. 对于G的每一个成员e,e具有唯一性,并且存在一个或者多个e的实例2.2.1.1. 分组不为空2.2.1.1.1. 一个分组至少要拥有一个成员(行2.2.1.1.2. 无法从一个空表中生成任何分组2.2.1.2. 分组具有唯一性2.2.1.2.1. 如果查询语句使用了GROUPBY子句,那么通常而言SELECT列表里就不再需要使用DISTINCT关键字了2.2.

选读SQL经典实例笔记14_层次查询

1. 结果集1.1. sqlselectempno,mgrfromemporderby2EMPNOMGR--------------------7788756679027566749976987521769879007698784476987654769879347782787677887566783977827839769878397369790278392. 展现父子关系2.1. 结果集2.1.1. sqlEMPS_AND_MGRS------------------------------FORDworksforJONESSCOTTworksforJONESJAMESworksforBL

选读SQL经典实例笔记13_case与聚合

1. 识别非小计行1.1. 结果集1.2. DB21.3. Oracle1.4. 超级聚合(superaggregate)值1.4.1. sqlselectdeptno,job,sum(sal)sal,grouping(deptno)deptno_subtotals,grouping(job)job_subtotalsfromempgroupbycube(deptno,job)1.5. SQLServer1.5.1.  sqlselectdeptno,job,sum(sal)sal,grouping(deptno)deptno_subtotals,grouping(job)job_subtot