内联接是用比较运算符比较要联接列的值的联接。
在 SQL-92 标准中,内联接可在 FROM 或 WHERE 子句中指定。这是 WHERE 子句中唯一一种 SQL-92 支持的联接类型。WHERE 子句中指定的内联接称为旧式内联接。
下面的 Transact-SQL 查询是内联接的一个示例:
USE pubs
SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city = p.city
ORDER BY a.au_lname DESC
此内联接称为相等联接。它返回两个表中的所有列,但只返回在联接列中具有相等值的行。
下面是结果集:
au_id au_lname au_fname phone address city
----------- -------- -------- ------------ --------------- --------
238-95-7766 Carson Cheryl 415 548-7723 589 Darwin Ln. Berkeley
409-56-7008 Bennet Abraham 415 658-9932 6223 Bateman St. Berkeley
state zip contract pub_id pub_name city state country
----- ----- -------- ------ --------------------- -------- ----- -------
CA 94705 1 1389 Algodata Infosystems Berkeley CA USA
CA 94705 1 1389 Algodata Infosystems Berkeley CA USA
(2 row(s) affected)
在结果集中,city 列出现两次。由于重复相同的信息没有意义,因此可以通过更改选择列表消除两个相同列中的一个。其结果称为自然联接。可以重新表述前面的 Transact-SQL 查询以形成自然联接。例如:
USE pubs
SELECT p.pub_id, p.pub_name, p.state, a.*
FROM publishers p INNER JOIN authors a
ON p.city = a.city
ORDER BY a.au_lname ASC, a.au_fname ASC
下面是结果集:
pub_id pub_name state au_id au_lname au_fname
------ --------------- -------- ----------- -------- -------- 1389 Algodata Infosystems CA 409-56-7008 Bennet Abraham
1389 Algodata Infosystems CA 238-95-7766 Carson Cheryl
phone address city state zip contract
--------------- ------------- -------- ----- ----- ---------
415 658-9932 6223 Bateman St. Berkeley CA 94705 1
415 548-7723 589 Darwin Ln. Berkeley CA 94705 1
(2 row(s) affected)
本示例中,publishers.city 没有出现在结果中。
使用等号以外的运算符的联接
也可以联接两个不相等的列中的值。用于内联接的运算符和谓词同样也可用于不相等联接。有关联接中可用的运算符和谓词的更多信息,请参见在表达式中使用运算符和 WHERE。
下面的 Transact-SQL 示例是一个大于 (>) 联接,可用于查找住在 Massachusetts 之后(按字母顺序排列)的州的 New Moon 作家,Massachusetts 是 New Moon Books 的所在地。
USE pubs
SELECT p.pub_name, p.state, a.au_lname, a.au_fname, a.state
FROM publishers p INNER JOIN authors a
ON a.state > p.state
WHERE p.pub_name = 'New Moon Books'
ORDER BY au_lname ASC, au_fname ASC
下面是结果集:
pub_name state au_lname au_fname state
---------------- ------- -------------------- -------------------- -----
New Moon Books MA Blotchet-Halls Reginald OR
New Moon Books MA del Castillo Innes MI
New Moon Books MA Greene Morningstar TN
New Moon Books MA Panteley Sylvia MD
New Moon Books MA Ringer Albert UT
New Moon Books MA Ringer Anne UT
(6 row(s) affected)
使用不等运算符的联接
很少使用不等联接 (< >)。通常不等联接只有与自联接同时使用才有意义。例如,可以使用下面的不等 Transact-SQL 联接和自联接查找包含不同价格的两本或多本廉价(低于 $15)书的类别:
USE pubs
SELECT DISTINCT t1.type, t1.price
FROM titles t1 INNER JOIN titles t2
ON t1.type = t2.type
AND t1.price <> t2.price
WHERE t1.price < $15 AND t2.price < $15
<!--NOTE-->
说明表达式 NOT column_name = column_name 与表达式 column_name < > column_name 等效。
<!--/NOTE-->
下面的 Transact-SQL 示例中,使用不等联接和自联接的组合查找 titleauthor 表中的所有行,在该表中有两行或多行具有相同的 title_id 但 au_id 号不同(即一本书有多个作者):
USE pubs
SELECT DISTINCT t1.au_id, t1.title_id
FROM titleauthor t1 INNER JOIN titleauthor t2
ON t1.title_id = t2.title_id
WHERE t1.au_id <> t2.au_id
ORDER BY t1.au_id
下面是结果集:
au_id title_id
----------- --------
213-46-8915 BU1032
267-41-2394 BU1111
267-41-2394 TC7777
409-56-7008 BU1032
427-17-2319 PC8888
472-27-2349 TC7777
672-71-3249 TC7777
722-51-5454 MC3021
724-80-9391 BU1111
724-80-9391 PS1372
756-30-7391 PS1372
846-92-7186 PC8888
899-46-2035 MC3021
899-46-2035 PS2091
998-72-3567 PS2091
(15 row(s) affected)
<!--RELATEDTOPICSLIST-->
分享到:
相关推荐
SQL优化--使用内连接(inner join)代替外连接(left join,right join)
以上就是VB6.0中使用内连接查询数据的基本流程。在实际应用中,可能还需要处理错误、分页查询、参数化查询等更复杂的情况。了解这些基本概念后,你可以根据需求进行扩展,实现更高级的功能。记住,数据库操作时一定...
如果我们想要获取 table1 和 table2 中的公共记录,可以使用内连接查询。 结果将是: | table1.name | table1.city | table2.name | table2.city | | --- | --- | --- | --- | | Person A | BJ | Person W | BJ | ...
如果只想查看有分数的学生,则使用内连接。如果想要所有可能的学生和分数的组合,无论是否存在匹配,就使用交叉连接。 总的来说,理解这些连接类型是SQL查询的基础,能帮助我们有效地组合和分析来自不同数据源的...
数据库管理与应用 5.3.1使用内连接(INNER JOIN)进行多表查询.pdf 学习资料 复习资料 教学资源
例如,在 authors 表和 publishers 表中,使用内连接可以检索所有作者和出版社的信息,并显示他们的城市信息。 ```sql SELECT a.au_fname, a.au_lname, p.pub_name FROM authors a INNER JOIN publishers p ON a....
例如,在查询表 a 和表 b 时,可以使用内连接、左向外连接或右向外连接,具体选择哪种连接方式取决于实际情况。 此外,SQL 查询语句还可以根据实际情况进行修改和组合,以满足不同的查询需求。例如,可以使用 WHERE...
当我们需要将两个或多个List集合中的元素根据特定条件进行匹配并合并时,可以使用内连接(Inner Join)操作。内连接会返回两个集合中满足指定条件的匹配元素。在C#中,我们可以通过两种方法实现List集合之间的内连接...
在实际项目中,选择使用内连接还是左外连接,通常取决于需求。内连接适用于只关注匹配数据的情况,而左外连接则在需要完整展示第一张表数据,即使第二张表无匹配数据时更为适用。 总之,掌握Hibernate中的内连接和...
例如,在一个`students`和`courses`表中,如果要找到学生ID相同的所有行,可以使用内连接。 ```sql SELECT students.*, courses.* FROM students INNER JOIN courses ON students.student_id = courses....
实验二 数据库连接 掌握 PowerBuidler9.0数据库的创建与连接方法; (2) 创建一个SQL Server数据库,为其配置ODBC数据源和DBProfile,
例如,假设我们有两个表,一个是客户信息表,另一个是订单信息表,我们想获取所有客户的订单信息,可以使用内连接将两个表连接在一起。 外连接是指在连接操作中,除了返回匹配的行之外,还返回一个表中的所有行,...
如果使用内连接,可能会排除掉没有上级部门的记录,而使用左连接则能确保包含所有部门,即使它们的上级部门为空。 总结起来,理解和熟练运用各种SQL连接是数据库查询和数据整合中的基础技能,可以根据具体需求选择...
例如,在学生表和成绩表中,我们可以使用内连接来查询出已经选课学生的正确选课结果。 Select 学生表.学号, 学生表., 成绩表.成绩 From 学生表 Inner Join 成绩表 On 学生表.学号 = 成绩表.学号 二、自然连接...
本文将详细介绍六种主要类型的 JOIN:左连接(LEFT JOIN)、右连接(RIGHT JOIN)、全连接(FULL JOIN)、内连接(INNER JOIN)、交叉连接(CROSS JOIN)以及自连接(SELF JOIN)。通过实例讲解每种连接的特点和应用...
本文将深入探讨三种主要的连接类型:左外连接、右外连接和内连接,并通过具体的例子来阐述它们之间的区别。 首先,让我们从内连接(INNER JOIN)开始。内连接返回的是两个表中满足特定连接条件的记录。在示例中,`...
### SQL内连接与外连接详解 #### 一、SQL内连接(INNER JOIN) **定义**: 内连接(INNER JOIN)是一种最常用的连接方式,它仅返回两个数据集合中具有匹配关系的那些行。具体来说,它会从位于两个互相交叉的数据...
例如,查询每个学生及其选修课程的情况,可以使用内连接将 Student 表和 SC 表连接起来。外连接和交叉连接也可以用于不同的查询场景。 在进行多表连接查询时,需要注意连接谓词的使用。连接谓词是指连接条件中用来...
例如,要查询每个已经选课的学生的情况,可以使用内连接查询语句:SELECT * FROM 学生 INNER JOIN 成绩 ON 学生.学号 = 成绩.学号。 在实际应用中,需要根据具体情况选择合适的查询方式,以提高查询效率和数据准确...
例如,如果我们想找出所有在特定部门工作的员工,可以使用内连接结合`department_id`和`location_id`来过滤结果。这有助于获取满足特定条件的数据子集,提高查询效率。 在实际的软件开发中,理解并熟练掌握这些连接...