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

北京中科医院好不好 https://auto.qingdaonews.com/content/2018-06/19/content_20138493.htm
1.2版DB版本

1.1.DB.5

1.2.Oracle19c

1.3.PostgSQL12

1.4.MySQL8.0

1.5.SQLServer

2.子查询

2.1.如果想创建虚拟表,以便对其执行包含窗口函数或聚合函数的查询,那么最简单的做法无疑是使用子查询

2.2.只需编写一个查询并将其放在括号内,然后再编写另一个使用它的查询

2.3.有些RDBMS要求给子查询表指定别名,有些则不要求这样做

2.3.1.Oracle不要求

2.4.示例

2.4.1.sql

selectmax(HeadCount)asHighestJobHeadCountfrom(selectjob,count(empno)asHeadCountfromempgroupbyjob)head_count_tab

3.通用表表达式

3.1.为了克服子查询的一些局限性,引入了CTE

3.1.1.让SQL支持递归

3.2.CTE的可读性更高

3.2.1.sql

withhead_count_tab(job,HeadCount)as(selectjob,count(empno)fromempgroupbyjob)selectmax(HeadCount)asHighestJobHeadCountfromhead_count_tab

3.3.递归CTE来计算前20个斐波那契数

3.3.1.sql

withcursiveworkingTable(fibNum,NextNumber,index1)as(select0,1,1unionallselectfibNum+nextNumber,fibNUm,index1+1fromanchorwheindex1<20)selectfibNumfromworkingTableasfib

3.3.2.关键字RECURSIVE,它在MySQL、Oracle和PostgSQL中必不可少,但在SQLServer和DB2中是可选的

3.3.3.index1列旨在简化在WHERE子句中指定返回行数的工作

3.3.4.WHERE子句至关重要,如果没有它,查询将不会终止

4.根据发音比较字符串

4.1.匹配单词

4.1.1.匹配拼写正确和拼写错误的单词

4.1.2.匹配拼写方式不同(比如英式拼写和美式拼写)的单词

4.1.3.匹配由不同字符串表示的单词

4.1.3.1.查找拼写不同但发音相同的字符串

4.2.函数SOUNDEX将字符串转换为英语发音

4.2.1.SOUNDEX会保留第一个字母,并将其他字母替换为数字

4.2.2.发音相似的字母将被替换为相同的数字

4.3.SQLServer函数DIFFERENCE会使用SOUNDEX对两个字符串进行比较,并返回表示相似程度的数字0~4

4.4.sql

a_name----1Johnson2Jonson3Jonsen4Jensen5Johnsen6Shakespea7Shakspear8Shaekspir9Shakespar

4.4.1.sql

selectan1.a_nameasname1,an2.a_nameasname2,SOUNDEX(an1.a_name)asSoundex_Namefromauthor_namesan1joinauthor_namesan2on(SOUNDEX(an1.a_name)=SOUNDEX(an2.a_name)andan1.a_namenotlikean2.a_name)

5.查找与模式不匹配的文本

5.1.sql

selectemp_id,textfromemployee_


转载请注明:http://www.aierlanlan.com/tzrz/7885.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了