Oracle/MySQL数据库的表间关联查询_多表关联查询的SQL语句详解
文章目錄
- 內連接 inner join
- 示例
- 外連接 outer join
- left outer join 左外連接
- 示例
- right outer join 右外連接
- 示例
- full outer join 全外連接
- 示例
- 外連接總結
內連接 inner join
內連接又稱為等值連接,語法結構:
表1 inner join 表2 on 條件 -- inner可以省略PS.外鍵所在的表叫子表或者從表,主鍵所在的表叫父表或者主表,所謂驅動表,就是必須遍歷的表
示例
select ename , dname , location from emp_xxx t1 join dept_xxx t2 --t1 驅動表 , t2 被匹配表 on t1.deptno = t2.deptno ;上述連接的方式可以稱之為“顯式內連接”,下面這種方式稱之為“隱式內連接”:
select ename, dname, location from emp_xxx t1,dept_xxx t2 where t1.deptno = t2.deptno;外連接 outer join
left outer join 左外連接
左外連接的語法結構:
表 1 left outer join 表 2 on 條件 -- outer可以省略1.左外連接以左邊的表為驅動表,并且左邊的表的記錄必須全部保留,所以左邊的表亦稱之為保留表。
2.驅動表和被匹配表不能互換
示例
下面的例子中,驅動表:emp_xxx;被匹配表:dept_xxx,結果集中包括有部門的員工和沒有部門的員工:
select e.empno , ename , d.deptno , d.dname , d.location from emp_xxx e left outer join dept_xxx d on e.deptno = d.deptno ;right outer join 右外連接
右外連接語法結構:
表 1 right outer join 表 2 on 條件 -- outer可以省略1.右外連接以右邊的表為驅動表,并且右邊的表的記錄必須全部保留,所以右邊的表又稱之為保留表
2.驅動表和被匹配表不能互換
示例
下面的語句中,驅動表:emp_xxx;被匹配表:dept_xxx,結果集中包括有部門的員工和沒有部門的員工:
select e.empno , ename , d.deptno , d.dname , d.location from dept_xxx d right outer join emp_xxx e on e.deptno = d.deptno ;full outer join 全外連接
全外連接語法結構:
表 1 full outer join 表 2 on 條件1.全外連接左右兩張表互為驅動表和被匹配表,即兩張表都會遍歷一遍
2.全外連接可以把兩個表中的記錄全部查出來。左右兩張表的記錄全部都保留,即兩張表都是保留表
3.全外連接的結果集 = 內連接的結果集 + 兩張表找不到匹配數據的記錄(對應的被匹配表的字段為空值)
示例
select e.empno , e.ename , d.deptno , d.dname from emp_xxx e full outer join dept_xxx d on e.deptno = d.deptno ;外連接總結
1.如果驅動表在被匹配表中找不到匹配記錄 , 則匹配一行空行
2.外連接的結果集 = 內連接的結果集 + 驅動表在被匹配表中匹配不上的記錄(對應被匹配表的字段都是空值)
3.外連接的本質是驅動表中的數據一個都不能少
4.寫外連接的習慣:
a.先寫內連接
from 表1 join 表2 on 條件b.再確定誰做驅動表,從而決定寫 left、right、full
關鍵是確定誰做驅動表
總結
以上是生活随笔為你收集整理的Oracle/MySQL数据库的表间关联查询_多表关联查询的SQL语句详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: macOS下配置环境变量/查看环境变量
- 下一篇: MySQL的存储过程和函数简单写法