一頭紮進sql之多表操作

2022-08-03 09:42:11 字數 2548 閱讀 2209

select  a.ename,a.conn from emp a  where  a.conn  <  (select b.conn from emp b where b.ename = 'allen') ;

select a.ename,a.conn from emp a where coalesce(a.conn,0) < (select b.conn from emp b from b.ename = 'allen');

null值比較結果還是null,所以這裡需要進行null值的乙個轉化才行

select  e.deptno,

sum(e.sal) as total_sal,

sum(e.sal*eb2.rount) as total_bonus,

from emp 

left join  (select eb.empno,

sum(case when type =1 then 0.1

when type =2 then 0.2

when type =3 then 0.3 end ) as tote 

from emp_bonux  eb 

group by eb.empno) eb2  on eb2.empno = e.deptno 

group by e.deptno

oder by 1;

select e.deptno

e.empno,

e.ename,

(e.sal * case  when  type =1 then 0.1

when  type =2 then 0.2

when  type =3 then 0.3 end ) as  bonus

from emp e 

inner join emp_bonus eb on eb.empno = eb.empno

where d.deptno = 10

order by 1,2

如果聚合的話必須先把獎金按照員工彙總然後在進行聚集

select e.deptno

sum(e.sal) as total_sal,

sum(e.sal*eb.bonus) as total_bonus

from emp e

inner join (select eb.empno,

case when type =1 then 0.1

when type =1 then 0.2

when type =1 then 0.3 end) as bonus

group by eb.empno) eb2  on eb2.empno = e.empno

where e.deptno  = 10;

group by e.deptno;

select  ename as  部門名稱 ,denpno 部門編號, evl(mgr,deptno) as 上級編碼

nnion  all

select  ename as  部門名稱 ,denpno 部門編號, null as 上級編碼 (應該用『』空字串)

74990  30                                 74990  30

7521    30                                  7521    30

7654   30                                  7654   30

7844    30                                 7844    30

7900    30

這兩條資料坐聚合操作就會出現 or就是有5條資料  而用 union就會只出現一條資料 解決辦法就是加入唯一字段

select  empno,deptno  from emp where mgr = 7684

union 

select  empno,deptno  from emp where job = 'saleman' 就可以保證正確的去重資料

select disdintc deptno  from (

select  empno,deptno  from emp where mgr = 7684

union  all

select  empno,deptno  from emp where job = 'saleman'

order by deptno;

select e.deptno,e.ename,e.dname,e.loc

from emp e 

inner join dept d on (e.deptno = d.deptno)

where e.deptno = 10

select e.empno,e.ename,d.dname,d.loc

from emp e,dept d

e.deptno = d.deptno  and  e.deptno = 10

(left   join)     ( right    join)         (inner   join )   ( full   join )

自關聯可以採用 left   join進行查詢

一頭紮進演算法導論 氣泡排序

定義 交換排序的基本思想是,通過比較兩個記錄鍵值的大小,如果這兩個記錄鍵值的大小出現逆序,則交換這兩個記錄,這樣將鍵值較小的記錄向序列前部移動,鍵值較大的記錄向序列後部移動。假設陣列總長度是n,那麼總共需要重頭開始執行n 1次 過程 用自己的話說 1.先判斷一共執行多少次,假設陣列總長度是n,則一共...

一頭紮進演算法導論 shell排序

過程 原文出自白話shell 以n 10的乙個陣列49,38,65,97,26,13,27,49,55,4為例 第一次 gap 10 2 5 49 3865 9726 1327 495541 a1b2a2b 3a3b 4a4b 5a5b 1a,1b,2a,2b等為分組標記,數字相同的表示在同一組,大...

一頭紮進設計模式 單例模式

定義 單例模式是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項 用自己的話說 保證全域性只有乙個物件,即不提供公用的構造方法,通過乙個公用的方法返回具體的例項。package com.jjt.singleton author jia...