举个例子: 假设a表和b表的数据是这样的。 a b id name id stock 1 a 1 15 2 b 2 50 3 c select * from a inner join b on a.id=b.id 这个语法是连接查询中的内连接,它产生的结果是 两个表相匹配的记录出现在结果列表中。 根据上面的表,出现的结果是这样的 a.id name b.id stock 1 a 1 15 2 b 2 50 ---------------------------- select * from a,b where a.id=b.id 这个语法是内连接的另外一种写法,其执行结果与inner join 一样 -------------------------------- select * from a left/right join b on a.id=b.id 这个是外连接语法中的左外连接或右外连接 如果是左外连接的话,它将显示a表的所有记录, select a.*,b.* from a left join b on a.id=b.id 查询的结果是这样的: a.id name b.id stock 1 a 1 15 2 b 2 50 3 c null null -------------------------------------------- 如果是右外连接的话,它将显示b表的所有记录, select a.*,b.* from a right join b on a.id=b.id 查询的结果是这样的: a.id name b.id stock 1 a 1 15 2 b 2 50
4 完全连接:
select * from test1,test2 where test1.a=test2.a(+)【左连接】unionselect * from test1,test2 where test1.a(+)=test2.a; 【右连接】
和以下写法等价:
select * from test1 full join test2 on test1.a=test2.a
5 笛卡尔积
select * from test1,test2;
【详细内容参见下文】
insert into dali.test1 values(1,456); insert into dali.test1 values(2,427); insert into dali.test2 values(1,45456); insert into dali.test2 values(3,45656); ---内连接 select * from dali.test1 a, dali.test2 b where a.a=b.a; ---左连接 select * from dali.test1 a, dali.test2 b where a.a=b.a(+); ---右连接 select * from dali.test1 a, dali.test2 b where a.a(+)=b.a; ---完全连接 select * from dali.test1 a, dali.test2 b where a.a=b.a(+) union select * from dali.test1 a, dali.test2 b where a.a(+)=b.a; ---迪卡尔 select * from dali.test1, dali.test2;'==================================================================9i和sqlserver一样 left join,right join,full join
内连接结果: A B A B1 1 456 1 45456'----------------------------左连接结果: A B A B1 1 456 1 454562 2 427'====================右连接结果: A B A B1 1 456 1 454562 3 45656'=============================完全连接结果: A B A B1 1 456 1 454562 2 4273 3 45656'========================笛卡尔结果: A B A B1 1 456 1 454562 2 427 1 454563 1 456 3 456564 2 427 3 45656