免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 733 | 回复: 0
打印 上一主题 下一主题

ORACLE基础 一 各种连接 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-21 08:44 |只看该作者 |倒序浏览
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中的连接的话,建议您维基百科(百度百科)一下。

(小弟写这篇文章的时候就维基百科了一把嘿嘿。。。)

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP