首页 理论教育 使用简单联接查询返回学员表详细信息及班级名称

使用简单联接查询返回学员表详细信息及班级名称

时间:2023-11-03 理论教育 版权反馈
【摘要】:图4.42使用简单联接此查询会返回学员表中的详细信息,并显示出这些学员的班级名称。图4.43联接多张表联接选择列表可以引用联接表中的所有列或任意一部分列。图4.44自联接与自联接尽管在多数情况下,联接的条件是两表的主键和外键的关系运算,但是也有其他情况,查询出和张强同一个班级的所有学员姓名。图4.46比较运算符或关系运算符另外,联接条件中用到的列不必具有相同的名称或相同的数据类型。

使用简单联接查询返回学员表详细信息及班级名称

通过联接,可以从两个或多个表中根据各个表之间的逻辑关系来检索数据。联接指明了SQL应如何使用一个表中的数据来选择另一个表中的行。

小节主要讲解内联接查询的用法,其他联接查询的详细信息,将在后继的课程中详细介绍。

1.联接分类

联接可分为以下几类:

➢内部联接(典型的联接运算,使用类似于=或 <> 的比较运算符):内部联接使用比较运算符,根据每个表的通用列中的值匹配两个表中的行。

➢外部联接:外部联接可以是左向外部联接、右向外部联接或完整外部联接。

➢交叉联接:交叉联接也称作笛卡尔积。

2.联接条件

联接条件可通过以下方式定义两个表在查询中的关联方式:

➢指定每个表中要用于联接的列。典型的联接条件在一个表中指定一个外键,而在另一个表中指定与其关联的键。

➢指定用于比较各列的值的逻辑运算符(例如=或 <>)。

联接条件可在FROM或WHERE子句中指定,建议在FROM子句中指定联接条件。因为这样有助于将这些联接条件与WHERE子句中可能指定的其他任何搜索条件分开。结合WHERE和 HAVING子句中所包含搜索条件,以进一步筛选根据联接条件选择的行。

3.语法

由此,简化的FROM子句联接语法如下:

参数说明:

➢join_type:指定要执行的联接类型:内部联接(Inner Join)、外部联接(Left|Right Outer Join)或交叉联接(Cross Join)。

➢join_condition:定义用于对每一对联接行进行求值的谓词(取值为TRUE、FALSE或UNKNOWN的表达式。谓词用于WHERE子句和HAVING子句的搜索条件中,以及FROM子句的联接条件中)。

4.示例

下面是使用内联接的一个简单SELECT语句,SQL语句如下:

执行以上SQL语句,查询结果如图4.42所示。

图4.42 使用简单联接

此查询会返回学员表中的详细信息,并显示出这些学员的班级名称。

当在单个查询中引用多个表时,所有列引用都必须是明确的。在上例中,Students和Classes表都含有名为classNo的一列。在查询所引用的两个或多个表中,任何重复的列名都必须用表名加以限定。因此,我们为其加上了Studnets以确定其来源。

将所有的列都用它们的表名加以限定,这是一个好的做法,因为这样会提高查询的可读性。当然,为了简单起见,我们会使用表的别名,这使得代码可读性进一步提高。(www.xing528.com)

下例与上例基本相同,只不过分配了表的别名并且用表的别名对列加以限定,从而提高了可读性。SQL语句如下:

虽然每个联接规范只联接两个表,但 FROM 子句可包含多个联接规范。这样一个查询可以联接许多表,以下查询给出了成绩的详细信息。SQL语句如下:

执行以上SQL语句,查询结果如图4.43所示。

图4.43 联接多张表

联接选择列表可以引用联接表中的所有列或任意一部分列。选择列表不必包含联接中每个表的列。例如,在三表联接中,只能用一个表作为中间表来联接另外两个表,而选择列表不必引用该中间表的任何列。

表可以通过自联接与自身联接,以下的例子查询出《SQL SERVER应用开发》的先导课程的详细信息。SQL语句如下:

执行以上SQL语句,查询结果如图4.44所示。

图4.44 自联接与自联接

尽管在多数情况下,联接的条件是两表的主键和外键的关系运算,但是也有其他情况,查询出和张强同一个班级的所有学员姓名。SQL语句如下:

执行以上SQL语句,查询结果如图4.45所示。

图4.45 查询出和张强同一个班的所有学员姓名

虽然联接条件通常使用相等比较(=),但也可以像指定其他谓词一样指定其他比较运算符或关系运算符。SQL语句如下:

执行以上SQL语句,查询结果如图4.46所示。

图4.46 比较运算符或关系运算符

另外,联接条件中用到的列不必具有相同的名称或相同的数据类型。但如果数据类型不相同,则必须兼容,或者是可由SQL Server进行隐式转换的类型。如果数据类型不能进行隐式转换,则联接条件必须使用CAST函数显式转换数据类型。

大多数使用联接的查询可以用子查询(嵌套在其他查询中的查询)重写,并且大多数子查询可以重写为联接。有关子查询的详细信息,将在后续的课程中有所介绍。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈