几种多表关联方式
Left Join
左连接: 以左表的数据为主,用某一个字段去关联右表。左表的数据会原封不动,右表中有符合左表数据的关联出来,没有则为空。
在Sql中的具体表现为
select t1.id, t2.name from t1 left join t2 on t1.id = t2.id
这里 left join 左侧 的就是左表,是不是很形象。
举例↓
表A记录如下:
aID aNum
1 a20050111
2 a20050112
3 a20050113
4 a20050114
5 a20050115
表B记录如下:
bID bName
1 2006032401
2 2006032402
3 2006032403
4 2006032404
8 2006032408
1.left join
sql语句如下:
select * from A
left join B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
5 a20050115 NULL NULL
Right Join
同上。区别就是以右表为主。
sql的表现为
select t1.id ,t2.name from t1 right join t2 on t1.id = t2.id
select * from A
right join B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
NULL NULL 8 2006032408
Inner Join
inner join 并不以哪个表为基准。只选取双方都有的记录。
sql表现为
select t1.id , t2.name from t1 inner join t2 on t1.id = t2.id
结果表现为
select * from A
innerjoin B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
结果说明:
很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.
where
如果关联两张表用where这种方式的话
select t1.id,t2.name from t1 , t2 where t1.id = t2.id
据说会出现inner join一样的效果,但有待验证(我并没有验证。)