例如这样的sql
select a.name,b.male from a,b where a.id = b.id;
这样的查询是内连接还是外连接呢?

解决方案 »

  1.   


    一般的相等连接: 
    select * from a, b where a.id = b.id; 
    这个就属于内连接。 
      
    对于外连接: 
    Oracle中可以使用“(+) ”来表示,9i可以使用left/RIGHT/FULL outer join  
      
    left outer join:左外关联  
    SELECT e.last_name, e.department_id, d.department_name  
    FROM employees e  
    left outer join departments d  
    ON (e.department_id = d.department_id);  
    等价于  
    SELECT e.last_name, e.department_id, d.department_name  
    FROM employees e, departments d  
    WHERE e.department_id=d.department_id(+)  
    结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录。  
      
    RIGHT outer join:右外关联  
    SELECT e.last_name, e.department_id, d.department_name  
    FROM employees e  
    RIGHT outer join departments d  
    ON (e.department_id = d.department_id);  
    等价于  
    SELECT e.last_name, e.department_id, d.department_name  
    FROM employees e, departments d  
    WHERE e.department_id(+)=d.department_id  
    结果为:所有员工及对应部门的记录,包括没有任何员工的部门记录。  
      
    FULL outer join:全外关联  
    SELECT e.last_name, e.department_id, d.department_name  
    FROM employees e  
    FULL outer join departments d  
    ON (e.department_id = d.department_id);  
    结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录和没有任何员工的部门记录。