天天看點

sqlsever視圖的學習

為什麼需要視圖:

總結:

簡化查詢

避免了代碼的備援

筆迷那了屬性大量重複的sql語句

什麼是視圖:

視圖從代碼上來看是select語句

視圖從邏輯上來看是臨時表

視圖格式

create view 視圖名字

as

—-select前面不能寫begin

select 語句

—-select後面不能寫end

視圖優點:

簡化查詢

增加資料的保密性

視圖的缺點:
            增加了資料庫的維護的成本
            比如  如果原始表删除了列 而視圖還是原來的 ,運作時就會報錯
            視圖隻是簡化了查詢,并沒有加快查詢的速度,這也是視圖使用不足的地方


    注意的問題:
       建立視圖的select語句必須的為所有的計算列指定别名         
           
-----error
           create view v$_a
           as
               select avg(sal) from emp;  
           ----ok
           create view v$_a
           as
               select avg(sal) as "avg_sal" from emp;           
視圖不是實體表,是虛拟表
    不建議通過視圖更新視圖所依附的原始表的資料或者結果       
           

總結:通常用視圖來查詢,而不是操作修改原始表

執行個體:求出平均工資最高的部門的編号和部門的平均工資

select *
from (
    select deptno,AVG(sal) "avg_sal"
    from emp
    group by deptno
)"T"
where "T".avg_sal=(
select MAX("E"."avg_sal") from( select deptno,AVG(sal) "avg_sal"
from emp
group by deptno
)"E"
)           

等效于下面的

create view v$_emp_1  //建立視圖
as
    select deptno,AVG(sal) "avg_sal"
    from emp
    group by deptno

    select *from v$_emp_1
    where avg_sal=(select MAX(avg_sal) from v$_emp_1)           

select deptno,AVG(sal) “avg_sal”

from emp

group by deptno

用視圖v$_emp_1 來代替