1 .Where子句中使用的连接语句,在数据库语言中,被称为隐性连接。Inner

join……on子句产生的连接称为显性连接。(其他Join参数也是显性连接)Where 和Inner

join产生的连接关系,没有本质区别,结果也一样。但是!隐性连接随着数据库语言的规范和发展,已经逐渐被淘汰,比较新的数据库语言基本上已经抛弃了隐性连接,全部采用显性连接了。

2

.无论怎么连接,都可以用Join子句,但是连接同一个表的时候,注意要定义别名,否则产生错误!

> Inner

join:理解为“有效连接”,两张表中都有的数据才会显示left join:理解为“有左显示”,比如on

a.field=b.field,则显示a表中存在的全部数据及a\\b中都有的数据,A中有、B没有的数据以null显示。

> Right join:理解为“有右显示”,比如on

a.field=b.field,则显示B表中存在的全部数据及a\\b中都有的数据,B中有、A没有的数据以null显示。

> Full

join:理解为“全连接”,两张表中所有数据都显示,实际就是inner

+(left-inner)+(right-inner)。

3 .Join可以分主次表,外联接有三种类型:完全外联,左联,右联。

完全外联包含两张表的所有记录。

左联是以左边的表为主,右边的为辅,右联则相反。

4.一般要使得数据库查询语句性能好点遵循一下原则:

在做表与表的连接查询时,大表在前,小表在后。

不使用表别名,通过字段前缀区分不同表中的字段。

查询条件中的限制条件要写在表连接条件前。

尽量使用索引的字段做为查询条件。

在 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