oracle连接总结(内连接、外连接、自然连接,交叉连接,自连接)

摘要:
2.不等联接:使用除相等运算符以外的比较运算符来比较联接条件中连接列的列值。eg1:SELECTSTUDNET.CLASSID,教师DEPTNO FROMSTUDENTNATURALJINE教师;错误:SQL错误:ORA-25155:NATURAL联接中使用的列不能具有有限限定符25155.00000-“NATURAL连接中使用的列不能具有限定符”*原因:用于命名联接的列不能有显式限定符。*操作:删除限定符eg2:SELECT*FROMSTUDENTNATURAL JOINEACHER;分析:两个表中有两个相同的属性,即TEACHERID和DEPTNO,结果根据这两个字段进行连接而不添加限制:以下是使用innerjoin的结果比较:SELECT*FROMSTUDENTJOINTEACHERONSTUDENT。DEPTNO=教师DEPTNO;3) 外部联接外部联接:返回的查询结果集不仅包含满足联接条件的行,还包含左表、右表或两个相邻表中的所有数据行。
1.简述 
1) 两个表的连接,是通过将一个表中的一列或者多列同另一个表中的列链接而建立起来的。用来连接两张表的表达式组成了连接条件。当连接成功后,第二张表中的数据就同第一张表连接起来了,并形成了复合结果集
 
2) 有5种基本类型的的连接,inner,outer,natural,cross连接,自连接。
 
2.说明与例子

1)内连接(inner join (可简写为join))

  内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。 

  1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复属性。 (区别于自然连接)

  2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的 列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。 

teacher 和 student 表
oracle连接总结(内连接、外连接、自然连接,交叉连接,自连接)第1张   oracle连接总结(内连接、外连接、自然连接,交叉连接,自连接)第2张
eg1:等值连接:
SELECT S.*, T.* FROM STUDENT S INNER JOIN TEACHER  T ON S.TEACHERID = T.ID; //注意oracle重命名table 不能加as只需加空格即可,as可用于重命名列

结果:(注意结果中包含重复属性,重复的属性结果中重命名了)

oracle连接总结(内连接、外连接、自然连接,交叉连接,自连接)第3张

eg2:

SELECT * FROM STUDENT JOIN TEACHER ON STUDENT.DEPTNO= TEACHER.DEPTNO;

oracle连接总结(内连接、外连接、自然连接,交叉连接,自连接)第4张


2)自然连接(natural join)

  自然连接是在广义笛卡尔积R×S中选出同名属性上符合相等条件元组,再进行投影,去掉重复的同名属性,组成新的关系。即自然连接是在两张表中寻找那些数据类型和列名都相同的字段,然后自动地将他们连接起来,并返回所有符合条件按的结果。

 eg1:
SELECT STUDNET.CLASSID,TEACHER.DEPTNO FROM STUDENT  NATURAL JOIN TEACHER;

报错:(不能加限定条件)

SQL 错误: ORA-25155: NATURAL 联接中使用的列不能有限定词
25155. 00000 -  "column used in NATURAL join cannot have qualifier"
*Cause:    Columns that are used for a named-join (either a NATURAL join
           or a join with a USING clause) cannot have an explicit qualifier.
*Action:   Remove the qualifier.

eg2:

SELECT * FROM STUDENT  NATURAL JOIN TEACHER;

分析:两个表中有两个相同属性,TEACHERID和DEPTNO,不用加限定条件即按照这两个字段连接

结果:(注意deptno属性只有一个)

oracle连接总结(内连接、外连接、自然连接,交叉连接,自连接)第5张

下面对比使用inner join的结果:(包含重复属性,并且连接方式区别于自然连接)

SELECT * FROM STUDENT JOIN TEACHER ON STUDENT.DEPTNO= TEACHER.DEPTNO;

oracle连接总结(内连接、外连接、自然连接,交叉连接,自连接)第4张

3) 外连接 (outer join)

 外连接,返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接或左连接))、右表(右外连接或右连接)或两个边接表(全外连接)中的所有数据行。

 1.left join(左联接)等价于(left outer join)  返回包括左表中的所有记录和右表中联结字段相等的记录;

 2.right join(右联接)等价于(right outer join)返回包括右表中的所有记录和左表中联结字段相等的记录;

 3. full join (全连接)等价于(full outer join)查询结果等于左外连接和右外连接的和

eg1:

SELECT  S.*, T.* FROM STUDENT S LEFT JOIN TEACHER  T ON S.CLASSNO = T.CLASS;

输出结果:(包含student中的所有记录和满足条件的记录)

oracle连接总结(内连接、外连接、自然连接,交叉连接,自连接)第7张

eg2:

SELECT  S.*, T.* FROM STUDENT S RIGHT JOIN TEACHER  T ON S.CLASSNO = T.CLASS;

结果:

oracle连接总结(内连接、外连接、自然连接,交叉连接,自连接)第8张

eg3:
SELECT  S.*, T.* FROM STUDENT S FULL JOIN TEACHER  T ON S.CLASSNO = T.CLASS;
输出:(因为teacher中有的对应student中都有,所以结果和left join相同)
oracle连接总结(内连接、外连接、自然连接,交叉连接,自连接)第9张
 
 
4) 交叉连接(cross join)

  交叉连接不带ON子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到 结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查 询条件的数据行数。 

eg1:
SELECT  S.*, T.* FROM STUDENT S CROSS JOIN TEACHER  T ;

等价于:

SELECT  S.*, T.* FROM STUDENT S , TEACHER  T ;

输出结果:

oracle连接总结(内连接、外连接、自然连接,交叉连接,自连接)第10张

5)自连接

连接的表是同一张表,使用自连接可以将自身表的一个镜像当作另一个表来对待,从而能够得到一些特殊的数据。

用途举例:计算公交链路换乘问题(见eg2)

eg1:

SELECT  S1.*, S2.* FROM STUDENT S1 , STUDENT S2 WHERE S1.DEPTNO=S2.DEPTNO AND S1.CLASSNO=S2.CLASSNO;

结果:

oracle连接总结(内连接、外连接、自然连接,交叉连接,自连接)第11张

eg2:

table route(num, company, pos, stop)
SELECT * FROM route R1, route R2 WHERE R1.stop=R2.stop;

可查询公用同一公交车站的所有路线

3.总结

1)即使是在连接条件不满足的情况下,外部连接也会在结果集内返回行,而内部连接不会在结果集类返回行 当外部连接不满足连接条件时,通常返回一个表中的列,但是第二个表中没有返回值--为null

2)自然连接不包含重复的属性

3)交叉连接是两个表数据笛卡尔积(相当于不加连接条件)

免责声明:文章转载自《oracle连接总结(内连接、外连接、自然连接,交叉连接,自连接)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇visual studio编译错误集(转)PHP动态修改配置文件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Oracle 字符集的查看和修改

一、什么是Oracle字符集        Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。 影响Oracle数据库字符集最重要的参数是NLS_LANG参...

Oracle基础 索引

一、索引   索引是一种快速访问数据的途径,可提高数据库性能。索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需的数据,就像书的目录,可以快速查找所需的信息,无须阅读整本书。   (一)索引的分类   逻辑分类:单列索引、组合索引、唯一索引、非唯一索引,函数索引。   物理分类:区分索引、非分区索引、B树索引、正向索引、反向索引,位图索引。   ...

ORACLE中能否找到未提交事务的SQL语句

  在Oracle数据库中,我们能否找到未提交事务(uncommit transactin)的SQL语句或其他相关信息呢?  关于这个问题,我们先来看看实验测试吧。实践出真知。   首先,我们在会话1(SID=63)中构造一个未提交的事务,如下所:   SQL> create table test   2  as   3  select * fro...

Oracle的表空间和数据文件

一、 概念  表空间:是一个或多个数据文件的逻辑集合 表空间逻辑存储对象: 永久段-->如表与索引 临时段-->如临时表数据与排序段 回滚段-->用于事物回滚或闪回内存的撤销数据 表空间分类:系统表空间(system、sysaux),非系统表空间 一个表空间至少包含一个数据文件,一个数据文件只能属于一个表空间。 不可或缺的几个表空间:...

oracle之数据限定与排序

数据限定与排序6.1 简单查询语句执行顺序from, where, group by, having, order by, selectwhere限定from后面的表或视图,限定的选项只能是表的列或列单行函数或列表达式,where后不可以直接使用分组函数SQL> select empno,job from emp where sal>2000;...

.Net程序员学用Oracle系列(6):表、字段、注释、约束、索引

1、表 1.1、创建表 1.2、表重命名 & 删除表 2、字段 2.1、添加字段 2.2、修改字段 & 删除字段 3、注释 4、约束 4.1、添加主键约束 4.2、添加外键约束 4.3、添加唯一约束 4.4、添加 CHECK 约束 4.5、空约束和非空约束 4.6、禁用约束 & 启用约束 & 删...