当前位置: 首页>数据库>正文

postgresql 关联查询 多个库 plsql关联查询

  

满足实际的需求,例如显示SALES部门位置以及雇员名,这种情况就需要进行连接查询(DEPT和EMP表)。
当使用连接查询时,必须在FROM后指定两个或两个以上的表。
当使用连接查询时,应该在列名前加表名作前缀,如果不同表之间的列名不同就不用,但不同表之间存在相同列名时就要加前缀,
当使用连接查询时,必须在WHERE子句中指定有效地连接条件,如果有错失,可能会造成笛卡尔集。
 

☆相等连接:用 = 指定连接条件
 SELECT name,sal,dname FROM emp,dept
 WHERE emp.deptno = dept.deptno AND dept.deptno=10;
  
  
 ☆不等连接:其实是BETWEEN...AND...
 SELECT ename,sal,grade FROM emp,salgrade
 WHERE emp.sal BETWEEN salgrade.losal AND salgrade.hisal;


 
 
☆自连接
指同一张表之间的连接查询,主要用在自参照表上显示上下级关系或者层次关系。(自参表

指在不同列之间具有参照关系或主从关系的表),例如,EMP表包含有EMPNO(雇员号)和

MGR(管理者号),二者就有参照关系。
  
 SELECT manager.enamec FROM emp manager,emp worker
 WHERE manager.empno = worker.mgr
 AND worker.ename='BLAKE';
  
  
 ☆内连接和外连接
 1.内连接,默认情况下,在执行连接查询时如果没有指定任何连接操作符,都属于内连接
 SELECT a.dname,b.ename FROM dept a,emp b
 WHERE a.deptno=b.deptno AND a.deptno=10;
  
 另外,通过在FROM子句中指定INNER JOIN也可以指定内连接
 SELECT a.dname,b.ename FROM dept a INNER JOIN emp b
 ON a.deptno = b.deptno AND a.deptno=10;
  
 如果主表的主键列和从表的外部键列名相同,那么还可以使用NATURAL JOIN 关键字自动执行内连接操作
 SELECT dname,ename FROM dept NATURAL JOIN emp;
  
 2.左外连接
 左外连接是通过指定LEFT[OUTER]JOIN选项来实现的。不仅会返回满足连接条件的所有记录,而且还会返回不满足连接条件的连接操作符左边表的其他行。
 SELECT a.dname,b.ename FROM dept a LEFT JOIN emp b
 ON a.deptno=b.deptno AND a.deptno=10;


 
3.右外连接
跟左外连接一样
 
 
4.完全外连接
通过FULL[OUTER]JOIN选项来实现的,不仅会返回满足连接条件的所有行,而且还会返回不

满足连接条件的所有其他行。

SELECT a.dname,b.ename FROM dept a FULL JOIN emp b
 ON a.deptno=b.deptno AND a.deptno=10;


 
 
5.使用(+)操作符
当执行外连接时,尽管可以用连接操作符(+)来完成,但还是建议用OUTER JOIN执行外连接。使用(+)进行外连接时,where条件中,对于附表的字段都应带上(+)。

1.使用(+)操作符执行左外连接
 SELECT a.dname,b.ename FROM dept a,emp b
 WHERE a.deptno=b.deptno(+)
 AND b.deptno(+)=10;
  
  
 2.使用(+)操作符执行右外连接
 SELECT a.dname,b.ename FROM dept a,emp b
 WHERE a.deptno(+)=b.deptno AND a.deptno(+)=10
 ORDER BY a.dname;

https://www.xamrdz.com/database/6dq1959948.html

相关文章: