程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 表的連接操作(學習筆記),連接操作學習筆記

表的連接操作(學習筆記),連接操作學習筆記

編輯:Oracle教程

表的連接操作(學習筆記),連接操作學習筆記


在數據庫中對於數據表的連接操作一共提供了兩種:

內連接:也稱等值連接在where中消除笛卡爾積的條件就是采用了內連接方式進行的

外連接: 內連接中只能顯示等值滿足的條件,不滿足的條件則無法顯示,如果希望顯示特定表中的全部數據就要用要外連接

外連接分3種

   在Oracle中使用(+)表示連接

  • 示例一 (內連接)

   將emp和dept表聯合查詢

 

SELECT * FROM EMP E,DEPT D
WHERE E.DEPTNO=D.DEPTNO;

 

 

  • 示例二(右外連接)

增加右外連接顯示部門表中40部門的信息

SELECT * FROM EMP E,DEPT D
WHERE E.DEPTNO(+)=D.DEPTNO;
  • 示例三(左外連接)

 

首先在emp表中插入一條沒有部門編號的記錄

INSERT INTO emp(empno,ename,job,mgr,hiredate,sal,comm,deptno)
VALUES(9999,'test','CLERK',7369,SYSDATE,800,100,NULL);

左外連接顯示編號9999的信息

SELECT * FROM emp e,dept d
WHERE e.deptno=d.deptno(+);

自身關聯:

  • 示例四

查詢出每個員工的編號,姓名及上級領導的編號和姓名

SELECT e.empno,e.ename,e.mgr emp表中領導編號,m.empno m表中的領導編號,m.ename
FROM emp e,emp m
WHERE e.mgr=m.empno(+);
  • 示例五

      查詢在1981入職的全部員工的編號,姓名,入職日期(年-月-日顯示),職位,領導姓名,員工月工資sal ,年總工資(sal+comm)*12,工資等級,部門編號,部門名稱,部門位置,並縣且要求這些員工的月工資在1500~3500之間,將最後的結果按年總工資降序排序,有果年工資相等,按入職時間升序排序

SELECT e.empno,e.ename,to_char(e.hiredate,'yyyy-mm-dd') 入職日期,e.job,e.sal 月基本工資,(e.sal+NVL(e.comm,0))*12 yearsal,
m.ename 領導姓名,
DECODE(s.grade,1,'E等工資',
                2,'D等工資',
                3,'C等工資',
                4,'B等工資',
                5,'A等工資'
) 工資等級,
d.deptno,d.dname,d.loc
FROM emp e,emp m,salgrade s,dept d
WHERE to_char(e.hiredate,'yyyy')='1981'
    AND e.mgr=m.empno(+)
    AND e.sal BETWEEN s.losal AND s.hisal
    AND e.deptno=d.deptno(+)
    AND e.sal BETWEEN 1500 AND 3500
ORDER BY yearsal,e.hiredate ASC;

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved