ORACLE SQL 多表查询
开发工具与关键技术:Oracle sql*plus PLSQL Developer
作者:张国军
撰写时间:2019年04月07日
多表查询跟我们的单表查询差不多,只是在单表查询上复杂了一点。
我们看一下oracle基本查询方法
Select * from table1 a,table b
Where a.tablec_id=b.tablec_id;
这种连接是通过等值进行连接的,值得注意的是:当我们使用这种方法进行多表连接的时候很容易忘记写where的语句(也就是连接条件),产生的笛卡尔积,那么查询出来的数据就不是我们需要的数据了。
多表连接又可以分为:等值连接、非等值连接、外连接等连接。
1.等值连接:这个我想应该不难理解,也就是通等值连接。
例如:select * from student a,score b
where a.sno=b.sno;
查询学生的成绩
每一个连接ID是对应的,如果没有匹配的上的话,那么它就不会显示出来。
这就是我们的等值连接。
2.非等值连接:不等值连接,我们可以将它理解为(区间值)
SELECT e.last_name, e.salary, j.grade_level
FROM employees e, job_grades j
WHERE e.salary
BETWEEN j.lowest_sal AND j.highest_sal;
就好比如:一个员工工资在(1000,3000)区间评为A级(3000,5000)评为B级
然后就用我们的between关键词定在那个区间就行了,就是:如果在第一个区间范围内就评为A,在第二个区间范围内就评为B,以此类推。
这就是我们的不等值连接。
3. 外连接:外连接我们还可以细分为(左外连接、右外连接、满外连接)这三个。
外连接,那边是外就将那边数据都留下来,然后去匹配另外的表。简单理解就是(对于外来的客人我们一般都是来多少就接纳多少,也就是谁是外来的数据就留多少数据)
左外连接:从字面我可以读出左外(左边是外)然后我们就把左边的表数据都留下
Select * from student a,score b
Where a.sno=b.sno(+);
这个是oracle的语法,对于这个我将它理解为((+)这个在那边那边就是主,另外一边就是客人(外来的))所以我们可以从下面的数据可以看出外来的我们都要保留下来,然后成绩表进行配对。
还有另外一种语法就是:1999 语法,这个语法相对oracle语法,我个人感觉还是1999语法好用一点,当然那得个人的喜欢。
Select * from student a Left Join score b
ON a.sno=b.sno;
1999语法主要的关键字是(left join on)。
看了左连接,尤连接我想应该也能搞明白了,应为他们都是一样的,只是留下的表数据不一样而已。
满外连接:那么我们来看一下满外连接,满外满外我将它理解为都是外来的客人(意思就是两张表都是外来的,所以我们将两张表的数据都留下来,如果匹配上的那么两边都有数据,没有匹配上的另外一边为null。)
Select * from student a Full Join score b
ON a.sno=b.sno;
也可以将它理解为左外连接和右外连接的结合。
这是我个人的理解,如有不同,欢迎分享。