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左连接查询和右连接查询随便举个例子谢谢!的主要内容,如果未能解决你的问题,请参考以下文章

在mysql查询中结合左连接和右连接

sql面试题_sql_分组查询左连接和右连接的区别

mysql左连接和右连接的区别

oracle学习篇四:多表查询

linq 左连接和右连接的写法有啥区别

外连接查询