【數據庫】 sql的一些基本語法(三)

(一)from 表1 join 表2 on(連接限制條件)

select ename, sal from emp

join (select max(sal),  deptno from emp group by deptno ) t

on (emp.sal = t.max(sal) and emp.deptno = t.deptno); //顯示每個部門工資最高的人的姓名和工資

注: 兩個表不一定要有相同的屬性才能連接

例:select ename, dname, sal, salgrade from emp e

join dept d on (e.deptno = d.deptno)             //僱員與部員連接 通過 deptno

join salgrade s on(e.sal between s.losal and s.hisal) ;           //工資等級表與僱員表的連接,通過僱員的工資在等級表中比較


遇到了一個問題:

sql:ORA-00918: 未明確定義列的錯誤。(連接的兩個表中屬性名重複,而又需要查詢此屬性。要指定是哪個表裏的屬性)

上面語句

select ename, sal from emp

join (select max(sal),  deptno from emp group by deptno ) t

on (emp.sal = t.max(sal) and emp.deptno = t.deptno); //顯示每個部門工資最高的人的姓名和工資


當我在select 中想要添加查找 deptno 屬性時報錯,最後檢查原因發現在後面的兩張表裏都有deptno屬性,

雖然這個屬性在兩張表裏的內容相同,但在select中必須指定是哪個表裏的deptno


修改後:

select ename, sal , e.deptno from emp

join (select max(sal),  deptno from emp group by deptno ) t

on (emp.sal = t.max(sal) and emp.deptno = t.deptno); //顯示每個部門工資最高的人的姓名和工資


(二) 自連接

在一個表裏兩個相關屬性的連接,比如emp表裏 僱員屬性對應的上司屬性本身也是一個僱員屬性
實現一:  (where)
select e1.ename, e2.ename from emp e1, emp e2 where e1.mgr = e2.empno;  //顯示每個員工及其對應的經理人的姓名
實現二: (join,on)
select e1.ename, e2.ename from emp e1 join emp e2 on (e1.mgr = e2.empno);


(三) 外連接

左外連接 : left join
右外連接: right join
全外連接: full join
顯示連接的兩張表中沒有對應屬性的屬性
發佈了18 篇原創文章 · 獲贊 7 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章