Oracle数据库入门之多表连接与子查询

  次阅读 来源:互联网(转载协议) 2016-01-28 13:20 我要评论(0)

Oracle表连接

概述:SQL/Oracle使用表连接从多个表中查询数据

格式:select 字段列表 from table1,table2 where table1.column1=table2.column2;

说明:当被连接的多个表中存在同名字段时,必须在该字段前加上“table.”作为前缀

如果没有限定where连接条件,否则就会出现笛卡尔集的不现实或没有实用意义的结果

举例:select empno, ename, sal, emp.deptno, dname, loc from emp, dept;--这时得到的就是笛卡尔集。此时得到70条记录

select empno, ename, sal, emp.deptno, dname, loc from emp, dept where emp.deptno=dept.deptno;--得到14条记录

类型:Oracle8i之前的表连接(支持SQL92标准):等值连接(Equijoin)、非等值连接(Non—Equijoin)、自连接(Self join)

外连接(Outer join):左外连接、右外连接

Oracle9i新引入的连接形式(支持SQL99规范):交叉连接(Cross join)、自然连接(Natural join)、使用Using或On子句建立连接

内连接(Inner join)、外连接(Outer join):左外连接、右外连接、全外连接

补充:多表连接中可使用AND操作符增加查询条件,使用表别名可以简化查询,使用表名(表别名)前缀可提高查询效率

而连接n个表,则至少需要n-1个连接条件。如select a.ename, a.deptno, b.dname from emp a, dept b where a.deptno=b.deptno;

样本:hr帐户也是Oracle自带的样本帐户,里面有很多样本表,其数据量及复杂程度都要比scott强一些

hr帐户缺省是锁定的,可以在OEM中将其解锁并设密码。其中的employees表是scott中的emp表的增强版

另外还有departments和locations表的数据看起来都比较真实。这三个表通常用于复杂的多表连接查询

等值连接(Equijoin)

举例:select empno, ename, emp.deptno, dname from emp, dept where emp.deptno=dept.deptno;

非等值连接(Non—Equijoin)

问题:如何查得每个员工的工资等级

举例:select empno, ename, sal, grade 工资等级 from emp,salgrade where sal between losal and hisal;

外连接(Outer join)

概述:外连接运算符为(+)。使用外连接可以看到参与连接的某一方不满足连接条件的记录

传统的外连接分为左外连接和右外连接两种。实际开发中,外连接的使用频率要比等值连接少一些

语法:select 字段列表 from table1,table2 where table1.column1(+)=table2.column2;

select 字段列表 from table1,table2 where table1.column1=table2.column2(+);

说明:table1.column1(+)=table2.column2;--显示所有符合条件的记录,同时table2中不符合连接条件的记录也会显示出来

table1.column1=table2.column2(+);--显示所有符合条件的记录,同时table1中不符合连接条件的记录也会显示出来

补充:在SQL99规范中,内连接(Inner Join)只返回满足连接条件的数据,而外连接还返回不满足连接条件的行

分类:左外联接(Left Outer Join):即两个表在连接过程中除返回满足连接条件的行以外,还返回左表中不满足条件的行

右外联接(Right Outer Join):即两个表在连接过程中除返回满足连接条件的行以外,还返回右表中不满足条件的行

满外联接(Full Outer Join):即两个表在连接过程中除返回满足连接条件的行以外,还返回两个表中不满足条件的行

举例:select employee_id, last_name, salary, department_id, department_name

form employees left join departments using(department_id);--返回107行

自连接(Self join)

概述:自连接诶本质就是把一个表当作两个表来使用,只是定义不同的别名而已

平时很少使用自连接,但有时确实只有采用自连接的方式才能解决某些问题

问题:如何查得每个员工及其上司的工号和姓名

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 马云的新零售?张近东的智慧零售?抑或是刘强东的第四次零售革命?

    马云的新零售?张近东的智慧零售?抑或是刘强东的第四次零售革命?

  • 区块链最近太火,但A股多家公司明确表态不考虑涉足

    区块链最近太火,但A股多家公司明确表态不考虑涉足

  • 全球陷入"区块链狂热"潮,大规模应用还需等待

    全球陷入"区块链狂热"潮,大规模应用还需等待

  • 汤晓鸥:人工智能的中国式文艺复兴

    汤晓鸥:人工智能的中国式文艺复兴

网友点评网友点评
阅读推荐阅读推荐

算法 任何一个入门的软件开发人员都会听到这句话:算法是软件的灵魂!近年来大火的机器学习即是在算法在人工智能上的集中体现。今日头条通...

据《日本经济新闻》报道,日本东京大学教授稻叶雅幸等人开发出再现日本人骨骼肌肉构造的机器人。机器人各部位的肌肉和骨骼长度与日本人的平...

以奥黛丽-赫本为原型打造的人形机器人索菲娅首次拜访了印度。索菲娅是世界上首位获得公民身份的机器人,她在12月30日出现在了印度理工学院...

在查获现场,代售点电脑旁的一台机器人通过敲击电脑键盘抢票。 广州日报惠州讯 (全媒体记者秦仲阳 通讯员张中铃摄影报道)2018年春运售票已...