您的位置:程序门 -> ms-sql server -> 基础类



join和inner join一样吗?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


join和inner join一样吗?[已结贴,结贴人:jskscxy]
发表于:2008-02-27 11:45:41 楼主
无意在论坛上见有人用   join连接,
我自己也试了,join和inner   join结果一样,但join在access里不能用?

麻烦朋友解答一下!
发表于:2008-02-27 11:46:571楼 得分:3
那就是access不支持
发表于:2008-02-27 11:50:222楼 得分:3
是可行的(比如mysql数据库)
但是不知道access里是否支持
发表于:2008-02-27 11:52:103楼 得分:6
t-sql里是的.   join   默认为   inner   join.

jetsql里支持inner   join.   其实就是join.   写法的区别而已.

就像   jetsql里的使用vbs的mid   与   t-sql里的substing.
发表于:2008-02-27 11:56:374楼 得分:5
我认为是一样的,请看具体说明.

使用内联接
内联接是用比较运算符比较要联接列的值的联接。

在   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


说明     表达式   not   column_name   =   column_name   与表达式   column_name   <   >   column_name   等效。


下面的   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)

发表于:2008-02-27 13:43:155楼 得分:3
sql   server   05   ,对不同的表作连接,包括相同表不同的连接条件,如果只写join的话,sql   server会做不同的处理,所以说join   和inner   join   是不一样的。

其实sql   server在最底层处理连接就只有三种连接方式:
1.merge   join
2.loop   nested   join
3.hash   join


快速检索

最新资讯
热门点击