欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PROC SQL(八)——视图

程序员文章站 2022-04-19 14:17:13
一、视图1、功能视图是一系列的查询语句,在使用时被执行,用来从其他的数据集或视图中获取想要的子集(subset)或者超集(superset)。只包含访问数据的逻辑,而不包含数据本身。2、优点1、与数据集相比,更节省空间2、减少重复的查询语句3、想用户隐藏复杂的查询关系4、动态获取最新数据3、注意1、避免在视图定义中使用ORDER BY子句,在引用视图的查询中指定ORDER BY子句更有效。2、如果同样的data要用很多次,那么最好不要创建视图而是直接创建静态表...

一、视图

1、功能

视图是一系列的查询语句,在使用时被执行,用来从其他的数据集或视图中获取想要的子集(subset)或者超集(superset)。

只包含访问数据的逻辑,而不包含数据本身。

2、优点

1、与数据集相比,更节省空间

2、减少重复的查询语句

3、想用户隐藏复杂的查询关系

4、动态获取最新数据

3、注意

1、避免在视图定义中使用ORDER BY子句,在引用视图的查询中指定ORDER BY子句更有效。

2、如果同样的data要用很多次,那么最好不要创建视图而是直接创建静态表

3、避免创建基于结构可能更改的表的视图。当视图引用的列不存在时,视图的列也就无效了

二、创建视图

CREATE VIEW语句

1、语法:

CREATE VIEW proc-sql-view AS 
    SELECT column-1<, ... column-n> 
        FROM table-1 | view-1 ... table-n | view-n> 
        <optional query clauses>;

2、注意:

1、在提交代码时,sas并不执行select语句,而是将SELECT语句部分编译并将其存储在视图文件中。

2、SAS日志中的消息确认已经定义了视图。
             NOTE: SQL view CERTADV.FAVIEW has been defined.

三、描述视图

DESCRIBE VIEW语句

1、语法:

DESCRIBE VIEW proc-sql-view-1<,...proc-sql-view-n>;

2、注意:

1、可以在SAS日志中显示视图的定义

2、如果建立的视图基于另一个视图上,那么需要在PROC SQL语句中使用FEEDBACK选项。

四、管理视图

1、省略库名:

如果DESCRIBE VIEW后面的视图指定了库名,那么from后的如果不指定库名则默认为在sasuser中。

proc sql; 
	create view sasuser.payrollv as 
		select * 
			from payrollmaster; 
quit;

2、USING语句:

  • 语法:
USING libname-clause-1<,... libname-clause-n>;
  • 注意:

    1、只能与PROC SQL视图一起使用。

    2、using 语句创建的库名,不会与SAS会话中的库名冲突,可以理解为局部语句。

    3、无论视图和基础表是否位于同一个库中,都可以使用它

    4、USING子句必须是CREATE VIEW语句中的最后一个子句

  • 举例:
    proc sql; 
    	create view certadv.payrollv as 
    		select* 
    			from airline.payrollmaster 
    			using libname airline 'SAS-library-one'; 
    quit; 	
    proc print data=certadv.payrollv; 
    run;

     

五、更新视图.

1、功能:

更新视图不会更改视图的存储指令。只更新基础表中的数据。

2、注意:

只有在指定条件下可以对视图进行INSERT、UPDATE 、DELETE操作

1、只能通过视图更新单个表,该表不能联接或链接到另一个表,也不能包含子查询;

2、不能更新派生列(表达式生成的列)

3、不能更新包含任何其他子句(如ORDER BY或HAVING子句)的视图

4、不能更新包含GROUP BY子句的视图

3、举例:

1、虽然MonthlySalary是派生列,不能使用UPDATE语句更改,但它会被更新,因为它是从Salary派生的。

2、当提交PROC SQL步骤时,SAS日志中会出现一个说明,指出有多少行被更新。
             NOTE: 2 rows were updated in CERTADV.RAISEV.

/*创建视图*/
proc sql; 
	create view certadv.raisev as 
		select empid, jobcode, salary format=dollar12., 
		          salary/12 as MonthlySalary format=dollar12. 
			from certadv.payrollmaster; 
quit; 
proc sql; 
	select * 
		from certadv.raisev 
		where jobcode in ('PT2','PT3'); 
quit;

/*更新视图*/
proc sql; 
	update certadv.raisev 
		set salary=salary * 1.20 
		where jobcode='PT3'; 
quit;

六、删除视图

DROP VIEW语句

1、语法:

DROP VIEW view-name-1 <,...view-name-n>;

2、注意:

提交该步骤后,SAS日志中会出现一条消息,确认视图已被删除。

本文地址:https://blog.csdn.net/weixin_44450031/article/details/107143199