WEB开发网
开发学院数据库Oracle Oracle数据库入门之多表连接与子查询 阅读

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

 2012-11-28 15:26:36 来源:WEB开发网   
核心提示: Oracle表连接概述:SQL/Oracle使用表连接从多个表中查询数据格式:select 字段列表 from table1,table2 where table1.column1=table2.column2;说明:当被连接的多个表中存在同名字段时,必须在该字段前加上“table.”作为前缀

 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)
概述:自连接诶本质就是把一个表当作两个表来使用,只是定义不同的别名而已

1 2 3 4  下一页

Tags:Oracle 数据库 入门

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接