oracle 连接查询
- 等值连接
eg: select s.sno, s.sname, sc.cno from student s, sc where s.sno=sc.sno; (可以使同一表自身连接)
- 非等值连接
eg: select s.sno, s.sname, cno, grade from student s, sc where grade between x and y;
- 外连接
1、左外连接:使用 left outer join 子句 后用 on 来创建链接条件,该连接方式输出满足连接条件的结果以及左表不满足连接条件的结果
eg: select s.sno, s.sname, sc.cno, sc.grade from student s left outer join sc on s.sno=sc.sno
2、右外连接:使用 right outer join 子句 后用 on 来创建链接条件,该连接方式输出满足连接条件的结果以及右表不满足连接条件的结果
eg: select s.sno, s.sname, sc.cno, sc.grade from student s right outer join sc on s.sno=sc.sno
3、全外连接:使用 full outer join 子句 后用 on 来创建链接条件,该连接方式输出满足连接条件的结果以及两表不满足连接条件的结果
eg: select s.sno, s.sname, sc.cno, sc.grade from student s full outer join sc on s.sno=sc.sno
4、使用on子句创建多表连接:
eg: select s.sno, s.sname, c.cno, c.cname, sc.grade from student s join sc on s.sno=sc.sno join course on c.cno=sc.cno
- 自然连接
- 使用 natural join 子句,会以两表之中具有相同名字的列为条件创建等值连接
- 查询表中满足等职条件的数据
- 两表存在同名的列,但是数据类型不同会产生错误
select sno, sname, cno from student natural join sc; 注:自然连接时可以使用using子句指定等值连接中所需要用到的列,natural join 和 using 经常同时使用,并且using当中不要给列加上表名前缀
顺便一记:以上例子都用到了别名,按照oracle的执行方式(先进执行from子句,在执行where等条件查询,最后执行select),最好在from子句中定义好别名,不然可能出错