奇宝库 > SQL多表链接查询、嵌入SELECT语句的子查询技术

SQL多表链接查询、嵌入SELECT语句的子查询技术

高级查询技术主要包括涉及多个表的链接查询技术、嵌入SELECT语句的子查询技术、组合多个查询的union技术。

1.连接查询

您需要同时从两个或多个表中检索数据。链接允许同时从两个或多个表中检索数据,并且这些表中的一列或一些列被指定为连接条件。在SQLServer中,可以使用两种形式的连接语法,一种是ANSI链接语法,这意味着连接条件出现在FROM子句中;SQLServer链接语法的另一种形式是联接条件出现在WHERE条件中。

1.ANSI链接

错误链接可以同时查询两个或多个表中的数据,得到的结果集包含多个表中的字段,因此需要使用偶数表共享的字段来连接多个表。

在连接操作期间,SQL逐行比较指定的字段,然后将比较结果与合格数据合并,以生成新记录。

有三种连接方式:内部连接、外部连接和交叉连接。在SELECT语句中,可以联接多个表;通过扩展SELECT语句的FROM语句,该链接添加了两个关键字:JOIN和ON。

JOIN:指定要链接的表。

开:指定这些表共享的字段。

根据表的主键和外键指定联接条件。

ANSI链接语法如下:

select表名.列名,表名.列名,…

FROM { table _ name[join _ type]JOINtable _ name on search _ conditions }

其中[搜索条件]

其中[join_type]可以采用以下三种关键字形式:

内部联接:链接查询的结果集只包含满足条件的行。INNERJOIN是SQLServer的默认连接方法,因此可以将inner JOIN缩写为join。

外部(外部联接):链接查询的结果集不仅包含满足条件的行,还包含表中的所有行。外部联接有三种形式:左外部联接、右外部联接和所有外部联接。

举个例子:已经上了4号课程的学生的信息的例子,涉及学生表和选修课:

选择学生表

从学生表连接学生表上的选修表。学号选修表。学生编号

其中课程表课程号=4

2.SQLServer链接

多表连接,可以在FROM子句后直接指定多个表,语义上是指从这些表的笛卡尔积中检索数据,可以用WHERE子句设置过滤条件。

SQLServer链接语法如下:

select表名.列名,表名.列名,…

来自{表名,表名,…}

其中表名.列名join _ operator表名.列名

在这种语法形式中,FROM子句列出连接中使用的所有表名,WHERE子句指定哪些行应该出现在结果集中,也就是说,WHERE子句设置筛选条件。在WHERE子句中,链接运算符用于两个联接的列。

例如:检索至少通过一门课程的学生的信息。示例:

选择不同的学生表单*

来自学生表选修表

学生形成的地方。学号=选修表。学生证和选修表。分数=60

3.子查询

子查询是一系列SELECT语句。SELECT语句可以嵌套在许多其他语句中,如SELECT、INSERT、UPDATE、DELETE等。这些嵌套的SELECT语句称为子查询。查询可以将复杂的查询分解成一系列逻辑步骤,这样复杂的查询问题就可以用一条语句解决。当一个查询依赖于另一个查询的结果时,子查询会很有用。

使用子查询时,您应该注意:

查询应该用括号括起来。

只需要一个值或一系列值,并且可以使用子查询来代替表达式。

不能查询包含数据类型为文本或图像的字段的子查询。

子查询还可以包含子查询,最多有32个嵌套级别。

1.将子查询用作派生表。

您可以使用子查询来生成派生表,该派生表可用于替换FROM子句中的表。指示子查询在derived FROM子句中的特殊用法,并通过别名或用户定义的名称来引用此派生表。FROM子句中的子查询将返回一个结果集,由该结果集形成的表将由外部SELECT语句使用。

例如,内部查询生成一个带有子查询的派生表,外部查询将使用内部查询的结果集。在功能上,派生表本身相当于一个完整的查询。

斯莱克塔*

从学生表中选择学生ID、姓名、年龄

Class Where=' gz02计数6'asa

2.将子查询用作表达式

在T-SQL中,所有表达式都可以被子查询替换。此时,子查询必须返回单个值或字段值。子查询可以返回一系列值,而不是出现在WHERE子句中的in关键字的表达式。

比如查询7班GZ02学生的平均年龄以及每个学生的年龄与平均年龄的差异。

从学生表中选择avg(年龄)作为平均年龄

计算结果作为选择列表中的输出列,并作为算术表达式的一部分输出:

年龄-(从学生表中选择年龄)作为年龄差

3.相关子查询

子查询可以用作动态表达式,该表达式的值会随着外部查询的每一行而变化。查询处理器为外部查询的每条记录计算子查询的值,一次一行,并且该子查询每次都作为表达式计算并返回给外部查询。相关子查询是动态执行子查询和外部查询的有效结合。

当使用相关子查询时,内部子查询会重复执行,并且内部子查询的齿数与外部子查询中的记录数一样多。

例如,查看选修课编号为1且分数在90分以上的学生的学号和姓名:

选择学生姓名

来自学生表

其中90=(选择分数

从课程选择表

学生桌在哪里。学号=选课表。学生编号和课程编号=1)

4.使用EXISTS和NOTEXISTS运算符

可以在相关子查询中使用EXISTS和NOTEXISTS运算符来确定某个值是否在一系列值中。当SQLServer使用EXISTS和NOTEXISTS运算符处理子查询时:

外部查询测试子查询返回的记录是否存在。

子查询根据查询指定的条件返回TRUE或FALSE。

子查询不产生任何数据。

例如:选修了课程1和课程2的学生的信息:

选择学号、姓名、班级

来自学生表

存在于何处(从选课表中选择*

其中学号=学生表格。学生编号和课程编号=1)

ANDEXISTS(从选课表中选择*)

其中学号=学生表格。学生编号和课程编号=2)

找到外层表“学生表”的第一行,根据其“学生号”值处理内层查询。

将外层的“学号”与内层的“选课表”的“学号”进行对比,从而判断外层的条件是真是假。如果为真,则该记录为合格结果;否则不会输出。

依次处理外表“学生表”中的第2、3、4、线条

检索每门选修课的几个学生的信息。

SELECT*FROM student表,其中

不存在(从选课表中选择*)

不间断空格

本文来自网络,不代表本站立场,转载请注明出处: