时间:2021-07-01 10:21:17 帮助过:16人阅读
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属性只有一个)
下面对比使用inner join的结果:(包含重复属性,并且连接方式区别于自然连接)
SELECT * FROM STUDENT JOIN TEACHER ON STUDENT.DEPTNO= TEACHER.DEPTNO;
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中的所有记录和满足条件的记录)
eg2:
SELECT S.*, T.* FROM STUDENT S RIGHT JOIN TEACHER T ON S.CLASSNO = T.CLASS;
结果:
eg3:SELECT S.*, T.* FROM STUDENT S FULL JOIN TEACHER T ON S.CLASSNO = T.CLASS;输出:(因为teacher中有的对应student中都有,所以结果和left join相同) 4) 交叉连接(cross join)
交叉连接不带ON子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到 结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查 询条件的数据行数。
eg1:SELECT S.*, T.* FROM STUDENT S CROSS JOIN TEACHER T ;
等价于:
SELECT S.*, T.* FROM STUDENT S , TEACHER T ;
输出结果:
5)自连接
连接的表是同一张表,使用自连接可以将自身表的一个镜像当作另一个表来对待,从而能够得到一些特殊的数据。
用途举例:计算公交链路换乘问题(见eg2)
eg1:
SELECT S1.*, S2.* FROM STUDENT S1 , STUDENT S2 WHERE S1.DEPTNO=S2.DEPTNO AND S1.CLASSNO=S2.CLASSNO;
结果:
eg2:
table route(num, company, pos, stop)
SELECT * FROM route R1, route R2 WHERE R1.stop=R2.stop;
可查询公用同一公交车站的所有路线
1)即使是在连接条件不满足的情况下,外部连接也会在结果集内返回行,而内部连接不会在结果集类返回行 当外部连接不满足连接条件时,通常返回一个表中的列,但是第二个表中没有返回值--为null
2)自然连接不包含重复的属性
3)交叉连接是两个表数据笛卡尔积(相当于不加连接条件)
oracle 连接
标签:either column route http each 公交车 remove strong 9.png