数据表的连接有:
1、内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现
2、外连接: 包括
(1)左外连接(左边的表不加限制)
(2)右外连接(右边的表不加限制)
(3)全外连接(左右两表都不加限制)
3、自连接(连接发生在一张基表内)
select a.studentno, a.studentname, b.classname
from students a, classes b
where a.classid(+) = b.classid;
STUDENTNO STUDENTNAM CLASSNAME
---------- ---------- ------------------------------
1 周虎 一年级一班
2 周林 一年级二班
一年级三班
以上语句是右连接:无论(+)端有没有无对应的记录都会被显示
反之:
select a.studentno, a.studentname, b.classname
from students a, classes b
where a.classid = b.classid(+);
STUDENTNO STUDENTNAM CLASSNAME
---------- ---------- ------------------------------
1 周虎 一年级一班
2 周林 一年级二班
3 钟林达
则是左连接,以上语句是右连接:无论(+)端有没有无对应的记录都会被显示
select a.studentno, a.studentname, b.classname
from students a, classes b
where a.classid = b.classid;
这个则是通常用到的内连接,显示两表都符合条件的记录
总之,
左连接对左边不加限制
右连接对右边不加限制
内连接是只显示满足条件的!
Access:
SELECT A.id,A.name,B.dep,C.class
FROM (test01 AS A LEFT JOIN test02 as B on A.id=B.id) LEFT JOIN test03 AS C on A.id=C.id
SQL Server:
SELECT A.id,A.name,B.dep,C.class
FROM test01 AS A LEFT OUTER JOIN test02 as B on A.id=B.id LEFT OUTER JOIN test03 AS C on A.id=C.id
或
右连接:
SELECT Student .sno,Sname,Ssex,Sage,Cno,Grade FROM Student ,SC WHERE Student.Sno=SC.Sno(*);
左连接:
SELECT Student .sno,Sname,Ssex,Sage,Cno,Grade FROM Student ,SC WHERE Student.Sno(*)=SC.Sno;
Oracle:
SELECT A.id,A.name,B.dep,C.class
FROM test01 A,test02 B,test03 C
WHERE A.id=B.id(+) AND A.id=B.id(+)
或:
SELECT A.id,A.name,B.dep,C.class
FROM test01 A LEFT OUTER JOIN test02 B on (A.id=B.id) LEFT OUTER JOIN test03 C on (A.id=C.id)
注:SqlServer与Oracle左右连接中的OUTER可以省略。
内连接关键字:...inner join...on...