oracle左连接查询和右连接查询随便举个例子谢谢!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle左连接查询和右连接查询随便举个例子谢谢!相关的知识,希望对你有一定的参考价值。
1、等值连接是最常见的一种连接查询,通常是在主外键关联关系的表间建立,并将连接条件设定为有关系的列,使用“=”连接相关的表。
2、非等值连接是指在多个表中使用非等号连接,查询在多个表中有非等值关联关系的数据,非等值连接操作符包括>、>=、<、<=、<>以及BETWEEN...AND、LIKE、IN等。
3、自连接是一种比较特殊的连接查询,数据来源是一个表。
4、左外连接是内连接的一种扩展,不止会返回满足连接条件的记录,还会返回那些不满足连接条件的操作符左边表的其他记录。
5、右外连接和左外连接相似,右外连接不止会返回满足连接条件的记录,还会返回那些不满足连接条件的操作符右边表的其他记录。
参考技术A 只要是两张以上的表关联查询的时候,就会返回一个笛卡尔乘积,数据库会去掉那些冗余的数据,只返回有用的数据。我们用左连接和右连接查询的时候就会把那些冗余的数据也查询出来,还有双向连接也是。Oracle数据库的左连接和右连接
在Oracle PL-SQL中,左连接和右连接以如下方式来实现
查看如下语句:
SELECT emp_name, dept_name FORM Employee, Department WHERE Employee.emp_deptid(+) = Department.deptid
此SQL文使用了右连接,即“(+)”所在位置的另一侧为连接的方向,右连接说明等号右侧的所有记录均会被显示,无论其在左侧是否得到匹配,也就是说上例中无论会不会出现某个部门没有一个员工的情况,这个部门的名字都会在查询结果中出现。
反之: SELECT emp_name, dept_name FORM Employee, Department WHERE Employee.emp_deptid = Department.deptid(+)
则是左连接,无论这个员工有没有一个能在Department表中得到匹配的部门号,这个员工的记录都会被显示
一般的相等连接
select * from a,b where a.id = b.id;
这个是内连接本回答被提问者采纳 参考技术B table1
col1 col2
1 2
3 4
table2
col3 col4
1 2
select * from table1 a left join table2 b
on a.col1=b.col3
结果
col1 col2 col3 col4
1 2 1 2
3 4 参考技术C SELECT emp_name, dept_name FORM Employee, Department WHERE Employee.emp_deptid(+) = Department.deptid
数据库表连接(内连接,外连接左连接右连接全连接交叉连接)
左连接和右连接:
左连接:以左表为基准进行查询,左表数据全部进行显示,右表中显示与左表匹配的全部数据,不匹配的则显示为null
右连接(与左连接完全相反):以右表为基准进行查询,右表数据全部显示出来,左表中与右表匹配的数据全部显示出来,不匹配的则显示为null
全连接(左连接与右连接的结合体):先以左表为基准进行查询显示,再以右表为基准进行查询显示
基准:以某张表的限制条件查询为准!
book表
bookID | bookName | studentID |
1 | 《红楼梦》 | 0003 |
2 | 《水浒传》 | 0005 |
3 | 《三国演义》 | 0003 |
4 | 《西游记》 | 0002 |
5 | 《朝花夕拾》 | 0006 |
6 | 《西厢记》 | 0010 |
student表
studentID | studentName |
0001 | 张飞 |
0002 | 关羽 |
0003 | 王五 |
0004 | 李四 |
0005 | 赵敏 |
0006 | 黄聪 |
null | null |
1.内连接:
select * from [book] as b,[student] as where b.studentID=s.studentID
等价于
select * from [book] as b inner join [student] as s on b.studentID=s.studentID
结果为:
bookID | bookname | studentID | studentID | studentname |
1 | 《红楼梦》 | 0001 | 0001 | 张飞 |
2 | 《水浒传》 | 0002 | 0002 | 关羽 |
3 | 《三国演义》 | 0003 | 0003 | 李四 |
4 | 《西游记》 | 0004 | 0004 | 赵敏 |
5 | 《朝花夕拾》 | 0005 | 0005 | 黄聪 |
2.左连接
select * from [book] as b left join [student] as s on b.studentID =s.studentID
结果
bookID | bookname | studentID | studentID | studentname |
1 | 《红楼梦》 | 0003 | 0003 | 李四 |
2 | 《水浒传》 | 0005 | 0005 | 赵敏 |
3 | 《三国演义》 | 0003 | 0003 | 李四 |
4 | 《西游记》 | 0002 | 0002 | 关羽 |
5 | 《朝花夕拾》 | 0006 | 0006 | 黄聪 |
6 | 《西厢记》 | 0010 | null | null |
3.右连接
select * from [book] as b right join [student] as s on b.studentID = s.studentID
bookID | bookname | studentDI | studentID | studentname |
null | null | null | 0001 | 张飞 |
4 | 《西游记》 | 002 | 0002 | 关羽 |
3 | 《三国演义》 | 003 | 0003 | 王五 |
null | null | null | 0004 | 李四 |
2 | 《水浒传》 | 005 | 0005 | 赵敏 |
5 | 《朝花夕拾》 | 006 | 0006 | 黄聪 |
4.全连接
select * from [book] as b full out join [student] as s on b.studentID = s.studentID
bookID | bookname | studentID | studentID | studentname |
以上是关于oracle左连接查询和右连接查询随便举个例子谢谢!的主要内容,如果未能解决你的问题,请参考以下文章