当前位置:首页 » 操作系统 » 数据库虚表

数据库虚表

发布时间: 2023-02-09 17:36:03

数据库视图运行为什么是空表

视图就是一个虚表,本身不存储数据。根据查询相关公开信息显示,所有数据均存在于select操作涉及的每一张基础表当中。

❷ Django里面怎么实现数据库视图啊 就是虚拟表

视图相当于虚拟的表,可以使用正常sql语句进行增删查改的操作,返回一张表。其实说白了与表的功能基本一样。
触发器,是在执行增 删 改的时候触发的一些SQL操作。可以在增删改之后触发 SQl,也可以在增删改的时候替代SQL。有两种不同的触发模式而已。
一下是来自官方的标准解释:
什么是视图?
在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。
视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。
注释:数据库的设计和结构不会受到视图中的函数、where 或 join 语句的影响。
SQL CREATE VIEW 语法
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
注释:视图总是显示最近的数据。每当用户查询视图时,数据库引擎通过使用 SQL 语句来重建数据。

触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程。触发器主要是通过事件进行触发被自动调用执行的。而存储过程可以通过存储过程的名称被调用。
Ø 什么是触发器
触发器对表进行插入、更新、删除的时候会自动执行的特殊存储过程。触发器一般用在check约束更加复杂的约束上面。触发器和普通的存储过程的区别是:触发器是当对某一个表进行操作。诸如:update、insert、delete这些操作的时候,系统会自动调用执行该表上对应的触发器。SQL Server 2005中触发器可以分为两类:DML触发器和DDL触发器,其中DDL触发器它们会影响多种数据定义语言语句而激发,这些语句有create、alter、drop语句。

DML触发器分为:
1、 after触发器(之后触发)
a、 insert触发器
b、 update触发器
c、 delete触发器

2、 instead of 触发器 (之前触发)

其中after触发器要求只有执行某一操作insert、update、delete之后触发器才被触发,且只能定义在表上。而instead of触发器表示并不执行其定义的操作(insert、update、delete)而仅是执行触发器本身。既可以在表上定义instead of触发器,也可以在视图上定义。

触发器有两个特殊的表:插入表(instered表)和删除表(deleted表)。这两张是逻辑表也是虚表。有系统在内存中创建者两张表,不会存储在数据库中。而且两张表的都是只读的,只能读取数据而不能修改数据。这两张表的结果总是与被改触发器应用的表的结构相同。当触发器完成工作后,这两张表就会被删除。Inserted表的数据是插入或是修改后的数据,而deleted表的数据是更新前的或是删除的数据。

❸ 数据库和数据表的联系和区别是什么

联系:视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系
区别:1、视图是已经编译好的sql语句。而表不是
2、视图没有实际的物理记录。而表有。
3、表是内容,视图是窗口
4、表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时四对它进行修改,但视图只能有创建的语句来修改
5、表是内模式,视图是外模式
6、视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
7、表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。
8、视图的建立和删除只影响视图本身,不影响对应的基本表。

❹ 数据库里什么是虚拟表

select * from a返回该表所有列
select bb from a返回该表bb对应的列

不懂你说的虚拟表什么意思

❺ 数据库常用查询操作

--注释

--select *|字段名1,字段名2... from 表名;

--1)

--查询|检索|获取 所有员工的所有信息

--查询的数据: 员工的所有信息

--数据的来源:员工表  emp

--条件:

select * from emp;

--2)

--查询所有的员工名字

select ename from emp;

--3)

--查询所有的员工编号和员工名称,员工上级的编号

--查询的数据: empno,ename,mgr

--数据的来源:员工表  emp

select empno,ename,mgr from emp;

--4)

--查询所有部门部门编号

select deptno from dept;

--5)

--查询出所有员工所在的部门的部门编号

select distinct  deptno from emp;

--对查询数据进行去重(非字段去重) distinct

--6)

--查询出所有存在员工的部门的部门编号,以及员工名称

select deptno,ename from emp;

select distinct sal,deptno from emp;

--7)

--查询表达式,结果是表达式的值,显示的字段名就是表达式,计算值

select 1+1 from emp;

select 'a' from emp;

--8)

--给字段取别名  select 字段1 (as) 别名1,字段2 别名2 from 表名 别名;  表的别名不能加as

--查询所有员工的名称(别名为:名字),员工编号(编号)

--别名默认变大写,别名中的内容原封不动出现 ""->中的内容原封不动出现

select 123+456 "get sum" from emp;

select empno as 员工编号,ename "员工 姓名" from emp;

--9)

--字符串 ''  原封不动显示""

select distinct '哈哈' 笑 from emp e;

--10)

--字符串拼接 java中使用+  这里使用||

--查询 ab--cd  表达式

select distinct 'ab-'||'-cd' from emp;

--查询所有的员工名字,给他们来一个前缀SXT

select 'sxt-'||ename from emp;

--11)

--伪列 : 不存在的列就是伪列  比如:表达式,字符串

--12)

--虚表: 在oracle中不存在的表,也可以说是这个表中没有任何数据,没有任何字段 --oracle中的虚表:al

--虚表的作用:可以不使用distinct就可以去重的效果,因为里面没有数据,不会出现多行

select * from al;

select distinct 123*456 from emp;

select 123*456 from al;

select sysdate from al;

--比如查询当前时间

--13)

--给每一个员工在原来的基础上+100块钱奖金

--null 空

--null与数字运算,结果还为null

--null与字符串运算,结果原串

--nvl(参数1,参数2) 处理null使用  如果参数1为null,最终结果参数2,如果参数1不为null,最终的结果就是参数1

select comm 原奖金,comm||'100' 新奖金 from emp;

select comm 原奖金,nvl(comm,0)+100 新奖金  from emp

--一节结尾小练习

--查询所有员工的名字, 工种, 年薪(不带奖金)

select ename,job,sal*12 年薪 from emp;

--查询所有员工的名字,工种,年薪(带12月奖金的)

select ename,job,(sal+nvl(comm,0))*12 年薪 from emp;

--查询所有员工的名字, 工种, 年薪(带一次奖金的)

select ename,job,sal*12+nvl(comm,0) 年薪 from emp;

--select *|表达式|字符串|伪列|字段1 别名1,字段2 as 别名2... from 表名 别名|结果集 where 行过滤条件;

--执行流程: from-->where-->select确定结果集

-- 查询20部门的员工信息

--数据: *

--来源: emp

--条件: deptno=20

select * from emp where deptno=20;

-- > < >=  <=  = !=  <>

-- 查询工资大于1000的员工的姓名 工作岗位  工资  所属部门编号

--数据: ename,job,sal,deptno

--来源: emp

--条件: sal>1000

select ename,job,sal,deptno from emp where sal=1000;

-- 查询不在20部门工作的员工信息

select * from emp where deptno != 20;

select * from emp where deptno <> 20;

--where 中不能使用字段的别名

-- 查询员工的年薪大于20000的 员工名称、岗位 年薪

select ename 姓名,job 岗位,(sal+nvl(comm,0))*12 sum from emp where ((sal+nvl(comm,0))*12)>20000;

select ename 姓名,job 岗位,(sal+nvl(comm,0))*12 sum from emp;

select 岗位, sum

  from (select ename 姓名, job 岗位, (sal + nvl(comm, 0)) * 12 sum from emp)

where sum > 20000;

-- 查询  any(任意一个)  some(任意一个)  all(所有)

select * from emp where deptno = any(10,20);

select * from emp where deptno = some(10,20);

--大于最小的

select * from emp where sal> any(1500,2000); --薪资>1500的就可以

--大于最大的

select * from emp where sal> all(1500,2000); --薪资>2000的就可以

-- 查询 工种不为’SALESMAN’的员工信息 (注意 内容区分大小写)

select * from emp where not job ='SALESMAN';

--or或 and并且|都  not取反

-- -检索 工资 1600, 3000员工名称 岗位 工资

select ename,job,sal from emp where sal=1600 or sal=3000;

select ename,job,sal from emp where not (sal=1600 or sal=3000);

-- 工资在2000到3000之间的员工信息

select * from emp where sal>2000 and sal<3000;

--between 小范围值  and 大范围的值  两者之间  <= >=

select * from emp where sal between 1600 and 3000;

---查询 岗位 为 CLERK 且部门编号为 20的员工名称 部门编号,工资

select ename ,deptno ,sal from emp where job='CLERK' and deptno=20;

-- 查询 岗位 为 CLERK 或部门编号为 20的员工名称 部门编号,工资

select ename ,deptno ,sal,job from emp where job='CLERK' or deptno=20;

--查询 岗位 不是 CLERK 员工名称 部门编号,工资

select ename ,deptno ,sal,job from emp where job!='CLERK';

select ename ,deptno ,sal,job from emp where not job='CLERK';

select ename ,deptno ,sal,job from emp where job<>'CLERK';

-- 查询 岗位 不为 CLERK 并且部门编号不为 20的员工名称 部门编号,工资

select ename ,deptno ,sal,job from emp where job!='CLERK' and deptno!=20;

select ename ,deptno ,sal,job from emp where not (job='CLERK' or deptno=20);

--存在佣奖金的员工名称

select ename,comm from emp where not comm is null;

select ename,comm from emp where comm is not null;

--不存在奖金的员工名称

select ename,comm from emp where comm is null;

--集合

--Union,并集(去重) 对两个结果集进行并集操作,不包括重复行同时进行默认规则的排序;

--Union All,全集(不去重) 对两个结果集进行并集操作,包括重复行,不进行排序 ;

--Intersect,交集(找出重复) 对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;

--Minus,差集( 减去重复 ) 对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序

--查询工资大于1500 或 含有佣金的人员姓名

select ename,sal,comm from emp where sal>1500 or comm is not null;

select ename,sal,comm from emp where sal>1500;

select ename,sal,comm from emp where comm is not null;

--并集

select ename,sal,comm from emp where sal>1500

Union

select ename,sal,comm from emp where comm is not null;

select ename,sal,comm from emp where sal>1500

Union all

select ename,sal,comm from emp where comm is not null;

--查询显示不存在雇员的所有部门号。

--求出所有的部门号

select deptno from dept;

--有员工的部门号

select distinct deptno from emp;

select deptno from dept

Minus

select distinct deptno from emp;

-- 查询显示存在雇员的所有部门号。

select deptno from dept

Intersect

select distinct deptno from emp;

--模糊匹配  like %任意任意字符  _一个任意字符  一起使用

--查询员工姓名中包含字符A的员工信息

select * from emp where ename like '%A%';

--完全匹配

select * from emp where ename like 'SMITH';

--查询员工姓名以'A'结尾的员工信息

select * from emp where ename like 'A%';

--查询员工姓名中第二个字母为A的员工信息

select * from emp where ename like '_A%';

insert into emp(empno,ename,sal) values(1000,'t_%test',8989);

insert into emp(empno,ename,sal) values(1200,'t_tes%t',8000);

--escape('单个字符')指定转义符

--查询员工姓名中包含字符%的员工信息

select * from emp where ename like '%B%%' escape('B');

--当执行插入数据,删除数据,修改的时候,默认开启事务

--可提交  commit 

--可回滚  rollback

--多个人中任意一个值就可以

select * from emp where sal=1600 or sal=3000 or sal=1500;

select * from emp where sal in(1500,1600,3000);

--select 字段.. from 结果集 where 行过滤条件 order by 排序字段 desc降序|asc升序(默认)..;

--执行流程: from--> where-->select-->排序

select empno,ename,sal from emp order by sal desc,empno asc;

--按照奖金升序排序,如果存在null值,所有的奖金null值的数据最先显示

select empno,ename,sal,comm from emp where deptno in (10,30) order by comm asc nulls first;

❻ 数据库中的实表、虚表、临时表的定义

实表是基本关系,又称基本表或者基表,是实际存储数据的逻辑表示,临时表是查询表,查询结果对应的结果,视图表是虚表有基本表或其他的表导出的表,不对应实际存储的数据。

热点内容
linux监控tomcat 发布:2025-07-23 07:50:40 浏览:742
php文件上传后缀名 发布:2025-07-23 07:44:57 浏览:560
市场配置失灵如何弥补 发布:2025-07-23 07:42:54 浏览:923
mysql允许内网访问 发布:2025-07-23 07:42:51 浏览:688
电脑脚本信息错误 发布:2025-07-23 07:39:58 浏览:663
win还是linux 发布:2025-07-23 07:39:58 浏览:879
用气球做解压玩具小猪 发布:2025-07-23 07:39:10 浏览:895
微博自动访问 发布:2025-07-23 07:32:36 浏览:645
电脑上出现脚本怎么关闭 发布:2025-07-23 07:32:26 浏览:451
垃圾桶怎么配置 发布:2025-07-23 07:31:36 浏览:15