在上篇博⽂中介绍了T-SQL查询的基础知识,本篇主要介绍稍微复杂的查询形式。
表运算符苏小沫儿
包场中学表运算符的作⽤是把为其提供的表作为输⼊,经过逻辑查询处理,返回⼀个表结果。SQL Server⽀持四个表运算符:JOIN、APPLY、PIVOT、UNPIVOT,其中JOIN是标准SQL中的运算符,APPLY、PIVOT和UNPIVOT是T-SQL的扩展。
APPLY:⽤于FROM⼦句中,分为CROSS APPLY和OUTER APPLY两种形式
批判理论PIVOT:⽤于⾏转列
UNPIVOT:⽤于列传⾏
联接查询
联接查询分为外联接、内联接、交叉联接,三者的区别在于如何应⽤逻辑查询处理阶段:
他有个二弟汉寿亭侯
内联接应⽤两个阶段——笛卡尔乘积和基于谓词ON的筛选;荔枝叶瘿蚊
外联结应⽤三个极端——笛卡尔乘积,基于谓词ON的筛选,添加外部⾏;
内部⾏ & 外部⾏
内部⾏指的是基于谓词ON与另⼀侧匹配的⾏,外部⾏则是未匹配的⾏,外部⾏⽤NULL进⾏填充。内联接结果集仅保留内部⾏,外联接结果集返回内部⾏和外部⾏。
笛卡尔乘积
将⼀个输⼊表的每⼀⾏与另⼀个表的所有⾏匹配,即,如果⼀张表有m⾏a列,另⼀张表n⾏b列,笛卡尔乘积后得到的表有mn⾏,a+b列*。由此可以看出,对于数据量较⼤的表进⾏关联的话,会得到⼀张数据量更⼤的表,会有可能造成内存溢出的。 以下是⽹络上关于笛卡尔乘积的解释:
在数学中,两个集合X和Y的笛卡⼉积(Cartesian product),⼜称直积,表⽰为X × Y,第⼀个对象 是X的成员⽽第⼆个对象是Y的所有可能有序对的其中⼀个成员。假设集合A=a, b,集合B=0, 1, 2,则两个集合的笛卡尔积为(a, 0), (a,
1), (a, 2), (b, 0), (b, 1), (b, 2)。类似的例⼦有,如果A表⽰某学校学⽣的集合,B表⽰该学校所有课程的集合,则A与B
的笛卡尔积表⽰所有可能的选课情况。A表⽰所有声母的集合,B表⽰所有韵母的集合,那么A和B的笛卡尔积就为所有可能的汉字全拼。
举例如下:
零花钱不够偷电脑