JAVA入門到精通-第62講-複雜查詢
阿新 • • 發佈:2018-11-28
每個部門的平均工資是不一樣的;
--from子句中使用查詢 分析: 1.首先要知道各個部門的平均工資 select avg(sal), deptno from emp group by deptno 2.把上面的查詢結果當做一個臨時表對待 兩張表,sal進行比較
tem 臨時表
tem表和emp表關聯起來:
給所在部門的平均工資取別名 myavg
不給子查詢取別名,會訪問不到需要的欄位;
--top ID *
top 取5到10個 top 後面的數表示要取出幾條記錄; top挑出6條,從emp表來,編號不能在xxx裡面 not in
排除不要的4個人,排除前4個人;
top查詢: 100萬條記錄,1-2秒鐘可以出結果
identity(1, 1)表示該欄位testID欄位自增長,從1,每次+1 通過這條語句進行瘋狂地複製,用於壓力測試;
欄位越多,速度越慢;上百萬的資料,分頁查詢,越到最後,速度越慢;
--如何刪除一張表中的重複記錄
1.把cat表的記錄distinct後的結果放入到臨時表#temp3中 2.把cat表的記錄清空 3.把#temp表的資料(沒有重複的記錄),插入到cat表中 ; 4.刪除臨時表#temp3
--左外連線和右外連線 -要求沒有上級的人名字也要顯示出來null left join 左外連 where換成on select w.ename, b.ename from emp w left join emp b on w.mgr=b.empno
左外連線: 指左邊的表的記錄全部顯示, 如果 沒有匹配的記錄就用null填 emp w 表的記錄全部出現;
--內連線:只有匹配上的才會出現 inner join xx on
--左外連線和右外連線
--思考題:顯示公司每個員工和他的上級領導的名字
--內連線的處理方式(內連線只顯示匹配的資訊)
select worker.ename"員工名字",boss.ename"領導名字" from emp worker,emp boss where worker.mgr=boss.empno
--思考題:顯示公司每個員工和他的上級領導的名字,沒有上級領導的也要顯示出來
--左外連線:指如果左邊的表記錄全部顯示,如果沒有匹配的記錄,就用null填寫
select worker.ename"員工名字",boss.ename"領導名字" from emp worker left join emp boss on worker.mgr=boss.empno
--右外連線:指如果右邊的表記錄全部顯示,如果沒有匹配的記錄,就用null填寫
select worker.ename"員工名字",boss.ename"領導名字" from emp worker right join emp boss on worker.mgr=boss.empno
來自為知筆記(Wiz)