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_