0 序言
以前学数据库就是为了应付考试,现在用起来才发现啥都不懂,这两天抽点时间把数据库的基础知识整理了一下,留着以后用。
1 示例用表
以下示例均以Oracle 10g 自带的emp(雇员表)和dept(部门表)为基础。
1.1 Emp表
(为了讲解方便,先把emp表最后3行的deptno设置为空,大家自行update一下吧^_^) 
1.2 Dept表如下:
2 内连接(inner
join)
只查询两个表相交的部分: 
SELECT
e.empno, e.ename, d.deptno
FROM
emp e, dept d
WHERE
e.deptno = d.deptno ; 
emp表中deptno为空的信息
和 dept表中deptno=40的信息都没有查出来;
3 左外连接(左连接)
查询出 相交的部分 加上 “=”左边表的全部: 
SELECT e.empno, e.ename, d.deptno
FROM emp e, dept d
WHERE e.deptno = d.deptno(+) ;//(+)在右边叫“左连接”哦; 
emp表中deptno为空的信息也查询出来了;
4 右外连接(右连接)
查询出 相交的部分 加上 “=”右边表的全部: 
SELECT e.empno, e.ename, d.deptno
FROM emp e, dept d
WHERE e.deptno(+) = d.deptno ;//(+)在左边叫“右连接”哦; 
dept表中deptno=40的信息查出来了;
5 全外连接
两个表所有信息(不管相不相交)都查询出来: 
SELECT e.empno, e.ename, d.deptno
FROM emp e FULL JOIN dept d
ON
e.deptno = d.deptno ; 
emp表中deptno为空的信息
和 dept表中deptno=40的信息都查出来了;
我现在就有疑问了:何必这么麻烦呢,直接
SELECT e.empno, e.ename, d.deptno
FROM emp e, dept d ;
不就行了嘛。
答案是:不行,会出现笛卡尔积(笛卡尔积是神马小弟看了半天维基百科也没看明白,您自己研究吧)。如下查出了56行(emp表有14行,dept表有4行,14*4=56): 
6 尾声
以上就是最常用的连接了,在网上还看过theta连接神马的,从来没用过,不知道什么时候能用上,咱一直崇尚有用的知识才叫知识,所以想特别全面的了解SQL中的连接的话,建议您维基百科(百度百科)一下。
(小弟写这篇文章的时候就维基百科了一把嘿嘿。。。) |