oracle跨数据库查询表,Oracle数据库多表查询

多表查询就是说从多个表中获取相应的数据。

(1)笛卡尔积【连接条件无效或被省略,两个表的所有行都发生连接,所有行的组合都会返回(n*m)】

SQL> select e.ename,d.dname from emp e,dept d;//无效

SQL> select e.ename,d.dname from emp e,dept d

2  where e.ename='SCOTT';//有效

(2)等值连接(内连接或简单连接)

两个表的连接条件的列值必须相等,通常这样的连接包含一个主键和一个外键

SQL> select e.ename,d.dname from emp e,dept d

2  where e.deptno=d.deptno

3  and e.ename='SCOTT';

(3)多于两个表的连接

SQL> create table manager

2  as

3  select ename,deptno,sal,job

4  from emp;   //创建manager表

SQL> select e.empno,m.ename,m.deptno,d.loc

2  from emp e,manager m,dept d

3  where m.deptno=d.deptno

4  and m.ename=e.ename

5  and e.job=UPPER('manager');

(4)非等值连接【使用其他连接运算符】

SQL> select e.empno,e.ename,e.sal,s.grade

2  from emp e,salgrade s

3  where e.sal

4  between s.losal and hisal;

(5)外部连接【外部连接不只列出与连接条件向匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行】

SQL> select e.ename,e.deptno,d.dname

2  from emp1 e,dept1 d

3  where

e.deptno(+)=d.deptno;//dept1表为不缺乏连接信息的表,emp1表为缺乏连接信息的表外部连接运算符(+)放在缺少相关连接信息的表的一侧,它能返回该表中那些在另一个表中没有得到匹配的记录。

SQL> select e.ename,e.deptno,d.dname

2  from emp1 e left outer join dept1 d

3  on e.deptno=d.deptno;//左外连接

SQL> select e.ename,e.deptno,d.dname

2  from emp1 e right outer join dept1 d

3  on e.deptno=d.deptno;//右外连接

SQL> select e.ename,e.deptno,d.dname

2  from emp1 e full outer join dept1 d

3  on e.deptno=d.deptno;//全外连接

(6)自然连接

在oralce中使用natural join,也就是自然连接。在Oracle中的join连接中使用using关键字,是相对于natural

join的。如果是使用natraul

join,并且两张表中如果有多个字段是具有相同的名称和数据类型的,那么这些字段都将被oracle自作主张的将他们连接起来。但实际上我们有时候是不需要这样来连接的。我们只需要将他们的多个具有相同的名称和数据类型的字段中挑选一两个。这时候我们就需要用到using

关键字了。

SQL> select ename,dname

2  from emp1 natural join dept1;//自然连接(会自动搜索表结构,判断是否有列完全相同,完全相同就作为连接的条件)

SQL> select ename,deptno,dname

2  from emp join dept using (deptno);//using的使用

SQL> select ename,emp.deptno,dname

2  from emp join dept using (deptno);//using()里面的字段不能指定前缀,否则会出错

1、如果在使用using关键字时,而且select的结果列表项中包含了using关键字所指明的那个关键字,那么请不要在select的结果列表项中对该关键字指明它属于哪个表。

2、using中仅能使用一个列名。

3、natural

join关键字和using关键字是互斥的,也就是说不能同时出现。

(7)自连接【把一个表看做两张表,起两个别名,然后再根据要求进行连接】

SQL> select e.ename as "Employee Name",e.mgr,m.ename "Manager Name"

2  from emp1 e,emp1 m

3  where e.mgr=m.empno

4  and e.ename='SMITH';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值