内容正文:
查询操作
第五章
02
连接查询
连接查询
02
内连接
1.等值连接
用来连接两个表的条件称为连接条件或连接谓词,其一般格式如下:
2.非等值连接
使用>、<、>=、<-等运算符作为连接条件的连接称为非等值连接。但在实际应用中很少使用非等值连接,并且非等值连接只有与自身连接同时使用才有意义。
3.自身连接
连接操作不仅可以在两个表之间进行,也可以是一个表与其自身进行连接,这种连接称为表的自身连接。自身连接一般很少用于查询数据,主要用于使用INSERT、UPDATE语句对一个表中满足特定条件的行进行操作的情况。
连接查询
02
外连接
1.左外连接
左外连接包括第一个命名表(“左”表,出现在JOIN子句的最左边)中的所有行,但不包括右表中不满足条件的行。
2.右外连接
右外连接包括第二个命名表(“右”表,出现在JOIN子句的最右边)中的所有行,但不包括左表中不满足条件的行。
3.完整外部连接
完整外部连接将包括所有连接表中的所有行,而不论它们是否匹配。
连接查询
02
交互连接
连接运算中还有一种特殊情况,即卡氏积连接,卡氏积是不带连接谓词的连接。两个表的卡氏积是两表中记录的交叉乘积,即其中一表中的每条记录都要与另一表中的每条记录做拼接,因此结果表往往很大。
【任务3-8】对商品信息表和类别表进行交叉连接,完成语句有以下两种:
03
子查询
子查询
03
子查询类型
1.使用IN或NOT IN的子查询
带有IN谓词的子查询是指父查询与子查询之间用N进行连接,判断某个属性列值是否在子查询的结果中。由于在嵌套查询中,子查询的结果往往是一个集合,所以谓词IN是嵌套查询中最常使用的谓词。
子查询
03
子查询类型
2.使用比较运算符的子查询
带有比较运算符的子查询是指父查询与子查询之间用比较运算符进行连接。当用户能确切知道内层查询返回的是单值时,可以使用>、<、=、>=、<-、!-或<>等比较运算符。单值情况下使用-,多值情况下使用IN 或NOT IN谓词。
子查询
03
子查询类型
3.使用ANY 或ALL的子查询
子查询返回单值时可以使用比较运算符,而使用ANY或ALL谓词时必须同时使用比较运算符,其含义如表5-4所示。
子查询
03
子查询规则
子查询也是由SELECT语句组成的,所以在使用SELECT 语句时应注意的问题也同样适用于子查询,同时,子查询还受下列条件的限制。
(1)通过比较运算符引入的子查询的选择列表只能包括一个表达式或列名称。
(2)如果外部查询的WHERE子句中包括某个列名,则该子句必须与子查询选择列表中的该列兼容。
(3)子查询的选择列表中不允许出现ntext、text和 image数据类型。
(4)无修改的比较运算符引入的子查询中不能包括GROUPBY 和 HAVING子句。
(5)包括GROUP BY的子查询不能使用DISTINCT关键字。
子查询
03
子查询规则
(6)不能指定COMPUTE 和 INTO子句。
(7)只有同时指定了TOP,才可以指定ORDER BY。
(8)由子查询创建的视图不能更新。
(9)通过EXISTS 引入的子查询的选择列表由星号(*)组成,而不使用单个列名。
(10)当-、! =、<、<=、>或>-被用在主查询中时,ORDER BY子句和 GROUP BY子句不能用在内层查询中,因为内层查询返回的一个以上的值不可被外层查询处理。
04
联合查询
联合查询
03
每个SELECT语句都能获得一个或一组记录。若要把多个SELECT语句的结果合并为一个结果,可用集合操作来完成。集合操作主要包括并操作UNION、交操作INTERSECT和差操作MINUS。
当使用UNION将多个查询结果合并起来,形成一个完整的查询结果时,系统会自动去掉重复的记录。默认情况下,使用UNION运算符的结果集会从所联合的查询中删除重复行,而如果使用了ALL子句,重复行也会显示出来。
联合查询
03
【任务】需要了解“三星”的商品,以及价格不高于2000的商品,完成语句如下:
运行结果如图5-49所示。
05
交叉表查询
交叉表查询
05
PIVOT
PIVOT通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任意其余列值执行聚合。
PIVOT指定在FROM子句中,其基本语句格式如下:
交叉表查询
05
UNPIVOT
UNPIVOT 与PIVOT执行相反的操作,即将表值表达式的列转换为列值。但 UNPIVOT不完全是PIVOT的逆操作。PIVOT 会执行一次聚合,从而将多个可能的行合并为输出中的单个行。而UNPIVOT不会重现原始表值表达式的结果,因为行已经被合并了。另外,UNPIVOT的输入中的空值不会显示在输出中,而在执行PIVOT操作之前,输入中可能己有原始的空值。
UNPIVOT指定在FROM子句中,其基本语句格式如下:
06
在SSMS中实现查询
在SSMS中实现查询
05
在SQL Server Management Studio中提供了图形化的查询方式,数据库用户只需要进行简单的选择就可以完成查询操作。
(1)启动SQL Server Management Studio,在“对象资源管理器”中依次展开【数据库】节点、【WebShop】节点。
(2)右击要执行查询的表,在弹出的快捷菜单中选择【编辑前200行】选项。在显示表的记录区域右击,在弹出的快捷菜单中选择【窗格】→【条件】选项,如图5-56所示。
在SSMS中实现查询
05
(3)在查询条件选择界面中,选择要输出的列、指定排序方式和查询条件,然后右击,在弹出的快捷菜单中选择“执行SQL”选项,如图5-57所示。
在SSMS中实现查询
05
(4)在结果窗格中显示执行查询后的结果,如图5-58所示。
$$