SQL中表的类型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL中表的类型相关的知识,希望对你有一定的参考价值。

书上说SQL中表的类型有3中,依次是 基本表、视图和导出表。我想请问一下 他们各自的定义是什么?还有就是,视图和导出表的区别在哪里?

在SQL里,基本表的关键字是TABLE,是一张二维表,存放数据集的表。视图的关键字是VIEW,视图可以理解为虚拟表,里边是不存放数据的,只是存放一条查询语句,查询视图时显示的数据都是从基本表中根据条件筛选出来的结果。 其具体定义如下:(1)所谓基本表,是这样的一种表,它本身是实际存在的,每个表在存储中可用一个存储文件来表示(一个基本表就是一个关系),它不是由其他表导出的表。
(2)视图是数据库中的虚拟表,由一个或几个基本表导出,用于让用户变换角度来操作基本表。数据库中只保存视图的定义,视图中不存放对应的数据。 (3)导出表: 在基本表的基础上通过定义视图而生成的表,称为导出表。导出表是虚表,其本身不存储于数据库中,数据库仅在数据字典中存储其定义。
视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系
参考技术A 不知道什么叫“导出表”是什么,把表导出?基本表就是你创建的一个表。视图是通过SELECT语句,外加JOIN,把这些基本表链接成一个逻辑表。

oracle中表名能否用变量?怎么用

比如这条sql:

select * from ok201003

不能直接表示成:
select * from ok||to_char(trunc(sysdate),'yyyymm')

请问该怎么做呢?

呵呵 我只能说介绍一下我的几点经验。。。

表名是不可以使用变量的。。。
我碰到这种情况的话,一般我先定义一个VARCHAR2的变量,例如v_sql,然后把DDL或者DDM语句写进去。仿照你的情况。。

v_tablename:='ok'||to_char(trunc(sysdate),'yyyymm');
v_sql:='select * from '||v_tablename||';';

然后通过对v_tablename 的动态赋值,再执行。。

execute immediate v_sql;

类似的,
OPEN cur_out FOR v_sql;

值得说明的是要注意空格。。

望指正、。。。
参考技术A

表名可用变量,但一般需要用到动态sql,举例如下:

declare 
v_date varchar2(8);--定义日期变量
v_sql varchar2(2000);--定义动态sql
v_tablename varchar2(20);--定义动态表名
begin
 select to_char(sysdate,'yyyymmdd') into v_date from dual;--取日期变量
 v_tablename := 'T_'||v_date;--为动态表命名
 v_sql := 'create table '||v_tablename||'
 (id int,
 name varchar2(20))';--为动态sql赋值
 dbms_output.put_line(v_sql);--打印sql语句
 execute immediate v_sql;--执行动态sql
end;

执行以后,就会生成以日期命名的表。

参考技术B 没懂你 意思, 表名不能修改,只能在写SQL的时候另外给个别名(为了简化)

select * from ok||to_char(trunc(sysdate),'yyyymm')
|| 此符号用于字符串的连接,但是并不是字符串相同就能表示表名,'ok'||to_char(trunc(sysdate),'yyyymm') 这个字符串连接好后,其实是'ok201003' 并不是表名

以上是关于SQL中表的类型的主要内容,如果未能解决你的问题,请参考以下文章

SQL十进制的ADO VBA类型?

sql数据库中常用的数据类型有啥

sql数据库中的时间类型

如何在 php 7.1 中表示返回类型是当前子类型?

如何在 TypeScript 中表示包含多种类型的二维数组?

mysql中表的数据类型