日期:2014-05-17  浏览次数:20975 次

关联查询
什么是关联查询,大侠们能不能举个例子,并把具体的代码格式写出来。
------解决方案--------------------
关联查询多张表,而表与表之间是有联系的,是通过字段中的数据的内在联系来发生,而不是靠相同的字段名来联系的或者是否有主外键的联系是没有关系的,

  select dname,ename from emp,dept;

  笛卡尔积  (无意义的)

  --当2个表作关联查询的时候一定要写关联的条件

  --N个表 关联条件一定有N-1个

  select dname,ename from mydept,myemp

  where mydept.no = myemp.deptno;

  多表查询的时候一定要有关联的条件

  --使用的表的全名

  select dname,ename from emp,dept

  where emp.deptno = dept.deptno ;

  --等值连接(内连接-两个表的数据作匹配a.deptno = b.deptno )

  select dname,ename,a.deptno from

  emp a inner join dept b

  on a.deptno = b.deptno;

  where a.deptno = 10;

  --on写连接条件的

  --where中写别的条件

  --使用where/on

  select dname,ename,a.deptno from emp a,dept b

  where a.deptno = b.deptno and a.deptno=10;

  --on中写连接条件

  --where中写其他的条件

  select dname,ename,a.deptno from

  emp a inner join dept b

  on a.deptno = b.deptno

  where a.deptno = 10 ;

  --外连接

  左外连接 右外连接  全外连接

  (+)写法只有在ORACLE中有效

  select dname,ename,b.deptno

  from emp a,dept b

  where a.deptno(+) = b.deptno;

  --标准写法

  select dname,ename,b.deptno

  from emp a right outer join dept b

  on a.deptno = b.deptno;

  select dname,ename,b.deptno

  from emp a,dept b

  where a.deptno = b.deptno(+);

  --标准写法

  select dname,ename,b.deptno

  from emp a left outer join dept b

  on a.deptno = b.deptno;

  --标准写法(全外联)

  select dname,ename,b.deptno

  from emp a full outer join dept b

  on a.deptno = b.deptno;

例1:

--Oracle 查看一个表对应的主键和外键的约束关系,查看的语句: 
 select a.owner, --主键拥有者  
        a.table_name, --主键表  
      b.column_name, --主键列  
        c.OWNER, --外键拥有者  
      c.table_name, --外键表  
      d.column_name --外键列  
from user_constraints  a  
 left join user_cons_columns b   
             on  a.constraint_name=b.constraint_name  
 left join user_constraints c   
           on c.R_CONSTRAINT_NAME=a.constraint_name  
 left join user_cons_columns d  
         on c.constraint_name=d.constraint_name  
where  a.constraint_type='P'  
    and  a.table_name='C_STORE' --需要查看主外键关系的表  
order by a.table_name;