简单连接:
简单连接仅仅是通过select子句和from子句来连接多个表,其查询结果是一个通过笛卡尔积所生成的表。在实际需求中,由于笛卡尔积包含了大量的冗余信息,一般没有任何意义,通常为了避免这种情况,在select语句提供一个连接条件,过滤无意义的数据。例如:
--学生表和性别表关联,拿学生表的性别id和性别表的id来关联过滤
select * from student s,gender g where s.gender = g.id;
Join连接:
1.内连接
内连接是一种常见的连接,用关键字inner join.innner可以省略,也就是说,只使用join连接的为内连接。连接的条件必须用on来进行条件匹配。如果还想进一步限制,则可以加where条件句。
如:
select * from student s join gender g on s.gender = g.id where s.name='张三';
2.自然连接
自然连接与内连接的功能类似,在使用自然连接查询多个表时,oracle会降低一个表中的那些列与第二个表中具有相同名称的列进行连接。在自然连接中,用户不需要明确指定进行连接的列。系统自动完成这一任务。自然连接在实际应用中很少。因为有个限制条件,连接的各个表之间必须有相同名称的列。但这在实际应用中可能和实际引用的含义发生矛盾。
3.外连接
外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,还列出左表(左外连接时候)、右表(右外连接时)或两个表(全外连接时)中所有复合搜索条件的数据行。完全外连接相当于同时执行一个左外连接和一个右外连接。然后将结果集合并,并消除重复记录行。
其中外连接还可以采用一种写法:
--这两种写法一致(右外连接)
select * from student s,gender g where s.gender(+) = g.id;
select * from student s right join gender g on s.gender = g.id;
--这两种写法一致(左外连接)
select * from student s,gender g where s.gender = g.id(+);
select * from student s left join gender g on s.gender = g.id;
4.自连接
自连接是在from子句中两次指定了同一个表,为了在其他子句中区分,分别为表指定了表别名。这样oracle就可以将两个表看作是分离的两个数据源,并且从中获取相应的数据。