请问from table1 inner join table2 和 from table1,table2 的区别?

时间:2021-05-20 17:04:00
from table1 inner join table2 on table1.field1=table2.field1
我知道上句是将table1表和table2表通过共有的field1字段关联起来,那么from table1,table2这句和用inner join功能上区别在哪儿呢?

3 个解决方案

#1



create table table1(id int,name int)
insert into table1 select 1,1
union select 2,2
union select 3,3
union select 4,4
create table table2(id int,name int)
insert into table2
select 1,3
union select 2,4
union select 6,4
select *
from table1 inner join table2 on table1.id=table2.id
go
select *
from table1,table2
where table1.id=table2.id
go
drop table table1
drop table table2
go 

#2


 inner join 和where 区别

1 .WHERE子句中使用的连接语句,在数据库语言中,被称为隐性连接。INNER JOIN……ON子句产生的连接称为显性连接。(其他JOIN参数也是显性连接)WHERE 和INNER JOIN产生的连接关系,没有本质区别,结果也一样。但是!隐性连接随着数据库语言的规范和发展,已经逐渐被淘汰,比较新的数据库语言基本上已经抛弃了隐性连接,全部采用显性连接了。

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

a> inner join:理解为“有效连接”,两张表中都有的数据才会显示left join:理解为“有左显示”,比如on a.field=b.field,则显示a表中存在的全部数据及a\\b中都有的数据,A中有、B没有的数据以null显示

b> right join:理解为“有右显示”,比如on a.field=b.field,则显示B表中存在的全部数据及a\\b中都有的数据,B中有、A没有的数据以null显示

c> full join:理解为“全连接”,两张表中所有数据都显示,实际就是inner +(left-inner)+(right-inner)

3 .join可以分主次表   外联接有三种类型:完全外联,左联,右联.
完全外联包含两张表的所有记录.
左联是以左边的表为主,右边的为辅,右联则相反

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

    *    在做表与表的连接查询时,大表在前,小表在
    * 不使用表别名,通过字段前缀区分不同表中的字段
    * 查询条件中的限制条件要写在表连接条件前
    * 尽量使用索引的字段做为查询条件

#3


本人不習慣2000的舊語法,如果這種語法經常用很容易跟WHERE篩選器混淆.
我的習慣是,JOIN步驟用ON篩選器并用新語法,特別對于INNER及OUTER.

#1



create table table1(id int,name int)
insert into table1 select 1,1
union select 2,2
union select 3,3
union select 4,4
create table table2(id int,name int)
insert into table2
select 1,3
union select 2,4
union select 6,4
select *
from table1 inner join table2 on table1.id=table2.id
go
select *
from table1,table2
where table1.id=table2.id
go
drop table table1
drop table table2
go 

#2


 inner join 和where 区别

1 .WHERE子句中使用的连接语句,在数据库语言中,被称为隐性连接。INNER JOIN……ON子句产生的连接称为显性连接。(其他JOIN参数也是显性连接)WHERE 和INNER JOIN产生的连接关系,没有本质区别,结果也一样。但是!隐性连接随着数据库语言的规范和发展,已经逐渐被淘汰,比较新的数据库语言基本上已经抛弃了隐性连接,全部采用显性连接了。

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

a> inner join:理解为“有效连接”,两张表中都有的数据才会显示left join:理解为“有左显示”,比如on a.field=b.field,则显示a表中存在的全部数据及a\\b中都有的数据,A中有、B没有的数据以null显示

b> right join:理解为“有右显示”,比如on a.field=b.field,则显示B表中存在的全部数据及a\\b中都有的数据,B中有、A没有的数据以null显示

c> full join:理解为“全连接”,两张表中所有数据都显示,实际就是inner +(left-inner)+(right-inner)

3 .join可以分主次表   外联接有三种类型:完全外联,左联,右联.
完全外联包含两张表的所有记录.
左联是以左边的表为主,右边的为辅,右联则相反

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

    *    在做表与表的连接查询时,大表在前,小表在
    * 不使用表别名,通过字段前缀区分不同表中的字段
    * 查询条件中的限制条件要写在表连接条件前
    * 尽量使用索引的字段做为查询条件

#3


本人不習慣2000的舊語法,如果這種語法經常用很容易跟WHERE篩選器混淆.
我的習慣是,JOIN步驟用ON篩選器并用新語法,特別對于INNER及OUTER.