sql的多表链接查询中

来源:百度知道 编辑:UC知道 时间:2024/09/22 10:05:11
在sql中的内链接或外连接中对主表和从表的书写顺序有什么要求?
例如:A表中有a1,a2,a3,a4四列a1为主键
B表中有b1,b2,b3,b4四列b1为外键引用A表中的a1
select A.*,B.*
from A inner join B on(A.a1=B.b1)
from A inner join B中的A B位置能不能交换为什么?
其中的(A.a1=B.b1)能不能换成(B.b1=A.a1)为什么?

select A.*,B.*
from A left outer join B on(A.a1=B.b1)
from A left outer join B中的A B位置能不能交换为什么?
其中的(A.a1=B.b1)能不能换成(B.b1=A.a1)为什么?

还有如链接多表?语法是什么?

联接的原理是这样的
----------------------------------------------------------------------
如有一张表A(4条数据),一张表B(5条数据),2张表通过ID关联
SELECT *
FROM A INNER JOIN B ON A.ID=B.ID
首先A表与B表做笛卡尔集 也就是4*5 =20条数据
先将这20条数据生成一张虚拟表
然后通过ON条件去筛选该虚拟表
最终将输出符合条件(A.ID=B.ID)的结果集(也就是查询器里所看到的数据)
以前看到有人说联接 要把小表放前面 性能会高,位置你可随便换,SQL优化器会自动优化的,自己测试CTRL+L(我用的是SQL2005)

----------------------------------------------------------------------
如果是外部联接left join ,right join,与上面有一点不一样。
如:SELECT *
FROM A LEFT JOIN B ON A.ID=B.ID
首先还是生成20条数据的虚拟表
然后通过ON条件筛选
由于用到LEFT, 将添加外部行, 将以左输入的表(A表)作为基表添加未在B中出现的数据外部行,,然后外部行中的数据B表值将以NULL值填充,总数据将是4条(ID唯一的情况下),
格式像这样,B表中未有A4的ID
A1,B1
A2,B2
A3,B3
A4,NULL
条件位置可以任意换 但表但表的循序在外部联接就不能乱换了
----------------------------------------------------------------------
如果改成这样了
SELECT * FROM B LEFT JOIN A ON A.ID=B.ID

SELECT * FROM A Right JOIN B ON A.ID=B.ID
原理同上,结果将变成这样,总