資料庫04去重,內連線,外連線,自連線

2021-10-17 04:38:47 字數 2682 閱讀 5935

去重

select distinct job from emp;//distinct只能出現在所以欄位最前面。

selsect distinct deptno,job from emp;//兩個字段一起去重

統計崗位數量:select count(distinct job) from emp;

連線查詢

實際開發中,大部分情況都不是從單錶中查詢資料,一般都是多張表聯合查詢。一般乙個業務都會對應多張表,比如:學生和班級,起碼兩張表 。

根據語法出現年代分類:sql92(一些老的dba可能還在使用這種語法。dba:資料庫管理員)sql99(比較新)

根據表的連線方式來劃分:

內連線:等值連線,非等值連線,自連線

外連線:左外連線(左連線),右外連線(右連線)

全連線(很少用)

在表的連線查詢方面有一種現象被稱為笛卡爾現象。

找出每乙個員工的部門名稱,要求顯示員工名和部門名:(有兩張表,emp表,dept表)

select name,dname from emp,dept;

當兩張表進行連線查詢的時候,沒有任何條件進行限制,最終結果條數是兩張記錄條數的乘積。

關於表的別名:select e.name,dname from emp e,dept d;//執行效率高,可讀性好。

怎麼避免笛卡爾積現象?加條件過濾,不會減少匹配次數,只是顯示有效記錄。

內連線之等值連線:最大特點是:條件是等量關係。

找出每乙個員工的部門名稱,要求顯示員工名和部門名:

sql92(太老,不用了):select e.name,d.dname from emp e,dept d where e.deptno = d.deptno;

sql99(常用):select e.name,d.name from emp e join dept d on e.deptno = d.deptno;//省略了inner,加了可讀性更好

select e.name,d.name from emp e inner join dept d on e.deptno = d.deptno;

語法:…a join b on 連線條件 where …

內連線之非等值連線:最大的特點是:連線條件中的關係是非等值關係。

找出每個員工工資等級,要求顯示員工名,工資,工資等級:(e表有員工名工資,s表有工資等級)

selsct e.name,e.sal,s.grade from emp join salgrade s on e.sal between s.losal and s.hisal;

自連線:最大特點是一張表看做兩張表,自己連自己。

查詢每個員工的上級領導,要求顯示員工名和對應的領導名:(a員工表:empno編號,name姓名,mgr領導編號。b領導表:empno編號,name姓名)

員工的領導編號=領導的員工編號

select a.name as '員工名『,b.name as '領導名』 from emp a inner join emp b on a.mgr = b.empno;

外連線:ab外連線,有一張是主表,一張是副表,主要查詢主表中的資料,捎帶查詢副表,當副表中的資料沒有和主表中的資料匹配上,副表自動模擬出null與之匹配。

分類:左外連線(左連線):左邊的表是主表

右外連線(右連線):右邊的是主表

左連線有右連線寫法,右連線有左連線寫法

查詢每個員工的上級領導,所以員工必須全部查詢出來:(a員工表:empno編號,name姓名,mgr領導編號。b領導表:empno編號,name姓名)

select a.name '員工名『,b.name '領導名』 from emp a left outer join emp b on a.mgr = b.empno;//left左邊是主表

select a.name as '員工名『,b.name as '領導名』 from emp b right join emp a on a.mgr = b.empno;//right右邊是主表,右外連線,outer可省略

外連線最重要的特點是:主表的資料無條件全部查出來。

三張表連線查詢:注意 …a join b join c on …表示a表和b表先進行連線,連線後a表繼續和c表進行連線

找出每個員工的部門名稱以及工資等級:

emp e(empno,name,sal,deptno。員工編號,員工 姓名,工資,部門編號)

dept d(dempno,dname,loc。部門編號,部門名)

salgrade s(grade工資等級,losal最低工資,hisal最高工資)

select e.name,d.dname,s.grade from emp e join dept d on e.depton = d.depton join salgrade s on e.sal between s.losal and s.hisal;

找出每個員工的部門名稱以及工資等級,以及上級領導:

select e.name,d.dname,s.grade from emp e join dept d on e.depton = d.depton join salgrade s on e.sal between s.losal and s.hisal left join emp e1 on e.mgr = e1.empon;

資料庫 連線(自然連線 外連線 內連線)

1 自然連線 只考慮那些在兩個關係模式中都出現的屬性上取值相同的元組對natural join join.using select a1,a2,an from r1 natural join r2 natural join natural join rn where p select name1,c...

資料庫 左外連線 右外連線 內連線

資料庫 左外連線 1.左外連線的主表在左邊,即連線兩個表時,保留左表中的不匹配部分,右表的相應項用null 或0 值表示。如圖 表ax 表bx from bx left outer join ax 左表,是指from 句中的左邊的表 bx.on ax.id bx.id 結果如圖 2.右外連線 右表的...

資料庫的內連線 外連線

sql資料庫的連線 內連線 和外連線 左外連線 右外連線 和全連線 本次實驗在mysql資料庫中進行,資料庫初始表如下 一 內連線 結果僅包含符合連線條件的兩表中的行。如下 二 外連線 結果包含符合條件的行,同時包含不符合條件的行 分為左外連線 右外連線和全外連線 1 左外連線 左表全部行 右表匹配...