【Oracle】——内连接、外连接

前端之家收集整理的这篇文章主要介绍了【Oracle】——内连接、外连接前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

有些业务复杂的时候,在数据层会涉及到几张数据表联查的情况,最近也是在工作中经常会遇到这一部分的内容,所以特此总结一下。

建表语句

CREATE TABLE userser(NAME VARCHAR(20),sex VARCHAR(20));
INSERT INTO userer values ('张三','男');
INSERT INTO userser values ('李四','男');
INSERT INTO userser values ('王五','男');
INSERT INTO userser values ('赵柳','女');
CREATE TABLE student(NAME VARCHAR(20),sex VARCHAR(20));
INSERT INTO students values ('张三','男');
INSERT INTO students values ('李四','男');
INSERT INTO students VALUES ('莉莉','女');
INSERT INTO students VALUES ('张柳','女');

内连接 inner join


代表的数据查询之后结果,就是把两张表中都有的数据筛选出来,例如根据建表语句,筛选表userser和student中姓名相同的数据。

SELECT u.name 用户姓名,u.sex 用户性别,stu.name 学生姓名,stu.sex 学生性别 FROM u inner JOIN students stu ON u.name = stu.name

外连接 out join

1、left join


以左边的表的数据为主,如果右边的表没有,则查询数据显示为空

SELECT u.name 用户姓名,stu.sex 学生性别 FROM students stu left JOIN userer  u ON u.name = stu.name


2、right join


与左连接基本一致,不过是以右侧表为主。

SELECT u.name 用户姓名,stu.sex 学生性别 FROM students stu right JOIN userer  u ON u.name = stu.name

3、full join


其实就是左连接和右连接的集合,在连接过程中不存在的数据填充为空

SELECT u.name 用户姓名,stu.sex 学生性别 FROM students stu full JOIN userer  u ON u.name = stu.name

内外连接中on和where的区别

1、inner join ...on 和 where

一样没有区别。

SELECT u.name 用户姓名,stu.sex 学生性别 FROM students stu,userer u WHERE u.name = stu.name
inner join...on 与where语句达到的效果一致。

2、外连接中on和where的区别

SELECT u.name 用户姓名,stu.sex 学生性别 FROM students stu LEFT JOIN userer  u ON u.name = stu.name WHERE u.sex='男';

SELECT u.name 用户姓名,stu.sex 学生性别 FROM students stu LEFT JOIN userer  u ON u.name = stu.name and u.sex='男'

原因:

1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

总结

数据库方面的知识还是必须的多用多练才能熟悉运用。持续学习。。。

猜你在找的Oracle相关文章