数据库基础:视图和临时表

视图是一个预编译的sql语句,不保存实际的数据,而临时表是保存在tempdb中的实际的表。

一、视图

1.什么是视图?

从一个或多个表中导出的表。

2.视图的特点?

(1)视图是一条预编译的SQL语句,并不保存实际数据、数据库只存储视图的定义

(2)视图不分配空间;

(3)视图主要用于系统的安全、查询和效率

3.视图的应用场景?

(1)保密工作,比如有一个员工工资表,如果你只希望财务看到员工工资这个字段,而其他人不能看到工资字段,那就用一个视图,把工资这个敏感字段过滤掉;

(2)查询方面可以充当一个变量角色:当一个查询语句非常复杂,大概有100行这么多,还要和其他表关联得到结果,可以用一个视图来代替这100行的select语句;

4.视图常用语句

(1)创建临时视图

with e as (select * from emp)
select * from e;
创建一个查询时 一次性的 临时视图 e 只在本次查询中有效

(2)视图创建

--创建视图--
create or replace view v_student as select * from student;
--从视图中检索数据--
select * from v_student;
--删除视图--
drop view v_student;

(3)举例

---创建product产品表
create table product  
(  
product_id int not null,  
name varchar(50) not null,  
price double not null  
);  
insert into product values(1, 'apple ', 5.5);  
---创建purchase表

create table purchase  
(  
id int not null,  
product_id int not null,  
qty int not null default 0,  
gen_time datetime not null  
);  
insert into purchase values(1, 1, 10, now());  

---创建视图
create view purchase_detail as 
select product.name as name, product .price as price, purchase.qty as qty, 
product .price * purchase.qty as total_value 
from product, purchase 
where product.product_id = purchase.product_id;  

---视图查询
select * from purchase_detail;

二、临时表( 临时表主要用来提高效率

1.什么是临时表?

(1)临时表是建立在系统临时文件夹中的表,退出时,其所占的空间会自动被释放;

(2)本地临时表:名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 SQL Server 实例断开连接时被删除。

(3)全局临时表:以两个数字符号 (##) 打头,创建后对任何用户都是可见的,当所有引用该表的用户从 SQL Server 断开连接时被删除。

2.临时表的特点?

(1)临时表会分配空间,临时表只能用在 memory,myisam,merge,或者innodb引擎;

(2)临时表是保存在tempdb中的实际的表、不再使用时会自动删除;

3.临时表的应用场景?

(1)比如京东淘宝亚马逊的购物车表,把东西放购物车(insert),变更数量(update),删除商品(delete),一旦结算金钱后,这些数据就要清掉,这时需要用临时表;

(2)在导出数据时,你可能不想导完整的数据库,或者表,你可能只想要导出符合某些条件的数据,那么你可以创建临时表,把select语句插入到临时表,接着导出这个临时表,导完以后通过结束session或者事务的方式,让这些没用的数据自动清理掉;

(3)你在写存储过程时,有很多的连接,比如你需要连接A,B,C,D,E,F,G,H那么多张表,才能得到你的结果表,同时做连接的消耗太大,你可以先A,B,C连接的结果,放在临时表,接着再把这张临时表,跟D,E,F连接,作为新的结果放在临时表,接着再把临时表与G,H连接,最后得到临时表数据,一次插入到结果表(永久表)。

4.常用语句

1、创建临时表
(1)定义字段
CREATE TEMPORARY TABLE tmp_table (        
name VARCHAR(10) NOT NULL,        
value INTEGER NOT NULL)     
(2)直接将查询结果导入临时表
CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name
3、查询临时表
select * from tmp_table
4、删除临时表
drop table tmp_table

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值