表的連線操作 學習筆記

2022-04-19 23:26:35 字數 1987 閱讀 2156

在資料庫中對於資料表的連線操作一共提供了兩種:

內連線:也稱等值連線在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))*

12yearsal,

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

and3500

order

by yearsal,e.hiredate asc;

表的連線操作

在資料庫中對於資料表的連線操作一共提供了兩種 內連線 也稱等值連線在where中消除笛卡爾積的條件就是採用了內連線方式進行的 外連線 內連線中只能顯示等值滿足的條件,不滿足的條件則無法顯示,如果希望顯示特定表中的全部資料就要用要外連線 外連線分3種 在oracle中使用 表示連線 左外連線 左連線 ...

MySql 學習筆記 連線表(JOIN)

inner join內連線 將乙個表中的行與其他表中的行進行匹配 select column list from t1inner join t2 on join condition1 inner join t3 on join condition2 where where conditions 由於...

連線操作 Oracle 學習筆記 3

以前在學資料庫時 就沒搞明白什麼是外連線,今天才弄明白 o o 我是不是很笨 select from table1,table2 這裡from子句的兩個表執行的是笛卡爾積操作。也就是table2中的所有記錄從頭到尾吧table1中的所有記錄對映一遍。得到的記錄數是兩個表記錄數的乘積。select f...