精华内容
下载资源
问答
  • 创建视图的原因
    千次阅读
    2022-04-26 17:33:40

    oracle的视图是一个很有用的工具,在很多应用中的应用到。

    在oracle视图中,对于简单视图,oracle 允许进行 dml 操作 ,这就是说明如果我们在一个表上创建了一个视图,前提是没有限制对它 dml 操作,我就可以通过这个视图往表里插入数据。正是由于这种原因,如果我们在创建视图时,用到 where 子句进行了限制。那么我们通过视图插入数据时,又会不会同样受到 where 子句的限制呢?答案是,如果你在创建视图时,使用where 子句限制时没有使用到 with check option 子句 时,当你在通过视图插入数据时,oracle 就不会检查 where 子句的限制条件。 

    SQL> create table test1(id int);
    
    Table created.
    
    SQL> create or replace view test1_view as select * from test1 where id < 5;
    
    View created.
    
    SQL> insert into test1_view values (1);
    
    1 row created.
    
    SQL> insert into test1_view values (20);
    
    1 row created.
    
    SQL> select * from test1_view;
    
            ID
    ----------
             1
    
    SQL> select * from test1;
    
            ID
    ----------
             1
            20

    创建视图加上with check option

    SQL> create or replace view test1_view as select * from test1 where id < 5 with check option;
    
    View created.
    
    SQL> delete from test1;
    
    2 rows deleted.
    
    SQL> insert into test1_view values (1);
    
    1 row created.
    
    SQL> insert into test1_view values (20);
    insert into test1_view values (20)
                *
    ERROR at line 1:
    ORA-01402: view WITH CHECK OPTION where-clause violation
    
    SQL> select * from test1;
    
            ID
    ----------
             1
    
    SQL> select * from test1_view;
    
            ID
    ----------
             1

    更多相关内容
  • navicat怎么创建视图

    千次阅读 2021-01-18 23:19:32
    下面是本人学习使用navicat for mysql 创建视图的图文记录,感兴趣的小伙伴可以看一看。下面正式开始1、打开navicat for mysql软件之后打开相应的数据库。然后点击视图。2、点击新建视图。这里的话你可以通过sql语句...

    4f2d242469de5f9cf60e52342feb8f1f.png

    Navicat for mysql 是mysql数据库的一个视图管理工具,它可以让我们不用面对dos那种小画面。下面是本人学习使用navicat for mysql 创建视图的图文记录,感兴趣的小伙伴可以看一看。

    下面正式开始

    1、打开navicat for mysql软件之后打开相应的数据库。然后点击视图。

    6f45d0e78178e0517f10da74bb4d8d96.png

    2、点击新建视图。这里的话你可以通过sql语句来创建。

    95c47dc003d895fe4af3a1726bce9663.png

    0a45310021fb02a9955eeccfea5b47ed.png

    3、当然也可以选择navicat for mysql视图创建工具来创建。如图,把表一个一个的挪过去,如果你的表设计主外键的关联关系没问题的话,它们就会自动的连上线了。

    bc684ab724c533446ed456f3976b2103.png

    4、然后如图所示为你要展示的内容打上勾,点击保存就可以了。(注意一定要选择,不能都是空)

    208271a7d180fe251bfcd49336da6cd3.png

    5、用工具创建好视图之后呢,你可以点击定义查看刚才视图相应的sql语句,这是navicat for mysql 帮你生成的。

    0b0f9fd2ff77ab27e97495667a3f38ea.png

    6、然后点击数据库下视图,你就可以查看你刚才所创建的视图效果了。你可以看到视图本质其实就是一张合成表。

    8541273f0f0c3b115e41ef643991e82d.png

    扩展资料

    视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

    从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据。从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表。从数据库系统内部来看,视图是由一张或多张表中的数据组成的,从数据库系统外部来看,视图就如同一张表一样。视图可以查询,但不可以新增、删除、修改。

    视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。分布式查询也可用于定义使用多个异类源数据的视图。

    视图是存储在数据库中的查询的SQL 语句,它主要出于两种原因:安全原因, 视图可以隐藏一些数据,如:社会保险基金表,可以用视图只显示姓名,地址,而不显示社会保险号和工资数等,另一原因是可使复杂的查询易于理解和使用。

    视图:查看图形或文档的方式。

    视图一经定义便存储在数据库中,与其相对应的数据并没有像表那样又在数据库中再存储一份,通过视图看到的数据只是存放在基本表中的数据。对视图的操作与对表的操作一样,可以对其进行查询、修改(有一定的限制)、删除。

    当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化,同时,若基本表的数据发生变化,则这种变化也可以自动地反映到视图中。

    展开全文
  • 创建视图SQL:在SQL Server中创建视图

    万次阅读 2020-07-17 13:42:32
    可以通过说出CREATE VIEW后跟一个具有WITH视图属性的名称来创建视图: ENCRYPTION – Using this attribute prevents the view from being published as part of SQL Server replication 加密 –使用此属性可防止...

    介绍 (Introduction)

    In this article, we are going to see how to use the CREATE VIEW SQL statement to create a view. This is the first article in a series that will be a programmatical approach of creating, altering and working with views using T-SQL. If you are a beginner and you don’t even know what a view is, don’t worry. We will kick off with a definition, and then move on to some basics like syntax, examples, use cases, etc.

    在本文中,我们将了解如何使用CREATE VIEW SQL语句创建视图。 这是本系列的第一篇文章,它将是使用T-SQL创建,更改和使用视图的编程方法。 如果您是初学者,甚至不知道视图是什么,请不要担心。 我们将从定义开始,然后继续一些基础知识,例如语法,示例,用例等。

    A view is simply a virtual table. Think of it as just a query that is stored on SQL Server and when used by a user, it will look and act just like a table but it’s not. It is a view and does not have a definition or structure of a table. Its definition and structure is simply a query that, under the hood, can access many tables or a part of a table.

    视图只是一个虚拟表。 可以将其视为仅存储在SQL Server上的查询,并且当用户使用它时,它的外观和作用就像表一样,但事实并非如此。 它是一个视图,没有表的定义或结构。 它的定义和结构只是一个查询,它可以在后台访问许多表或表的一部分。

    Views can be used for a few reasons. Some of the main reasons are as follows:

    出于某些原因,可以使用视图。 一些主要原因如下:

    • To simplify database structure to the individuals using it

      为了简化使用它的个人的数据库结构
    • As a security mechanism to DBAs for allowing users to access data without granting them permissions to directly access the underlying base tables

      作为DBA的安全机制,允许用户访问数据而无需授予他们直接访问基础基表的权限
    • To provide backward compatibility to applications that are using our database

      为了向后兼容使用我们数据库的应用程序

    Having said that, those reasons are a topic for designing views which we will not touch in this series. In this article, we are going to go through the CREATE VIEW SQL syntax, see what views are all about, and what we can do with them.

    话虽如此,这些原因是设计视图的主题,在本系列中我们将不作讨论。 在本文中,我们将介绍CREATE VIEW SQL语法,查看所有视图的含义以及如何使用它们。

    句法 (Syntax)

    CREATE  OR ALTER  VIEW  schema_name.view_name
    WITH <view_attribute>
    AS select_statement   
    [WITH CHECK OPTION]
    

    We all know how complicated syntax can get but this is not the case with views. A view can be created by saying CREATE VIEW followed by a name WITH view attributes:

    我们都知道语法会变得多么复杂,但是视图却并非如此。 可以通过说出CREATE VIEW后跟一个具有WITH视图属性的名称来创建视图:

    • ENCRYPTION – Using this attribute prevents the view from being published as part of SQL Server replication 加密 –使用此属性可防止视图作为SQL Server复制的一部分发布
    • SCHEMABINDING – Binds the view to the schema of the underlying table. We will use this one in another article when indexing a view SCHEMABINDING –将视图绑定到基础表的架构。 索引视图时,我们将在另一篇文章中使用它
    • VIEW_METADATA – Causes SQL Server to return to the DB-Library, ODBC, and OLE DB APIs the metadata information about the view VIEW_METADATA –使SQL Server返回DB-Library,ODBC和OLE DB API有关视图的元数据信息

    After the AS, it goes the actual SELECT statement that defines the query. This is usually the bulk of a query AKA the DML statement that is going to make the view and its results.

    在AS之后,它将进入定义查询的实际SELECT语句。 这通常是查询(即要生成视图及其结果的DML语句)的大部分。

    The WITH CHECK OPTION is very useful when inserting data through a view. When a row is modified through a view, this option gives us control over inserted data into the table that follows the WHERE clause in the view’s definition. More about this in the upcoming article.

    通过视图插入数据时,WITH CHECK OPTION非常有用。 通过视图修改行时,此选项使我们可以控制插入到表中的数据,该数据紧随视图定义中的WHERE子句。 在即将到来的文章中对此有更多的了解。

    CREATE VIEW SQL语句 (CREATE VIEW SQL statement)

    Without further ado, let’s fire up SQL Server Management Studio and start working on views. Before we use the CREATE VIEW SQL statement, let’s create a new database from Object Explorer called SQLShackDB, and then create a few tables in it by running the script from below:

    事不宜迟,让我们启动SQL Server Management Studio并开始处理视图。 在使用CREATE VIEW SQL语句之前,让我们从Object Explorer创建一个名为SQLShackDB 的新数据库 ,然后通过从下面运行该脚本在其中创建一些表:

    CREATE TABLE Employees
    (EmployeeID    INT NOT NULL, 
     FirstName     NVARCHAR(50) NOT NULL, 
     MiddleName    NVARCHAR(50) NULL, 
     LastName      NVARCHAR(75) NOT NULL, 
     Title         NVARCHAR(100) NULL, 
     HireDate      DATETIME NOT NULL, 
     VacationHours SMALLINT NOT NULL, 
     Salary        DECIMAL(19, 4) NOT NULL
    );
    GO
    CREATE TABLE Products
    (ProductID INT NOT NULL, 
     Name      NVARCHAR(255) NOT NULL, 
     Price     DECIMAL(19, 4) NOT NULL
    );
    GO
    CREATE TABLE Sales
    (SalesID    UNIQUEIDENTIFIER NOT NULL, 
     ProductID  INT NOT NULL, 
     EmployeeID INT NOT NULL, 
     Quantity   SMALLINT NOT NULL, 
     SaleDate   DATETIME NOT NULL
    );
    GO
    

    T-SQL script for creating three sample tables in SQLShack database

    Now, that we have our sample database with tables in it, we can create a view called vEmployeesWithSales using the script from below as an example:

    现在,我们有了包含表的示例数据库,我们可以使用下面的脚本作为示例,创建一个名为vEmployeesWithSales的视图:

    USE SQLShackDB;
    GO
    CREATE VIEW vEmployeesWithSales
    AS
         SELECT DISTINCT 
                Employees.*
         FROM Employees
              JOIN Sales ON Employees.EmployeeID = Sales.EmployeeID;
    GO
    

    This is a simple view with a simple SELECT statement that returns a list of employees that have a sale. As a matter of fact, you can always test the query before creating the view by executing only the SELECT part of the CREATE VIEW SQL statement and it’s a good idea to see if the query will return something. Make sure that you are connected to the appropriate database first, then mark the SELECT part of the code, and hit Execute:

    这是带有简单SELECT语句的简单视图,该语句返回具有销售记录的雇员的列表。 实际上,您始终可以通过仅执行CREATE VIEW SQL语句的SELECT部分​​来在创建视图之前测试查询,这是个好主意,看看查询是否会返回某些内容。 确保首先连接到适当的数据库,然后标记代码的SELECT部分​​,然后单击Execute

    CREATE VIEW SQL script for creating a simple view

    The query returns no result because we don’t actually have any data in our new tables, but you can see the list of columns that returned. The next thing we can do is insert some data into tables. To do this, use the following script:

    该查询未返回任何结果,因为新表中实际上没有任何数据,但是您可以看到返回的列的列表。 我们可以做的下一件事是将一些数据插入表中。 为此,请使用以下脚本:

    USE SQLShackDB;
    GO
        
    INSERT INTO Employees SELECT 1, 'Ken', NULL, 'Sánchez', 'Sales Representative', '1/1/2016', 2080, 45000;
    INSERT INTO Employees SELECT 2, 'Janice', NULL, 'Galvin', 'Sales Representative', '12/11/2016', 2080, 45000;
        
    INSERT INTO Products SELECT 1, 'Long-Sleeve Logo Jersey, S', 12.99;
    INSERT INTO Products SELECT 2, 'Long-Sleeve Logo Jersey, M', 14.99;
    INSERT INTO Products SELECT 3, 'Long-Sleeve Logo Jersey, L', 16.99;
    INSERT INTO Products SELECT 4, 'Long-Sleeve Logo Jersey, XL', 18.99;
        
    INSERT INTO Sales SELECT NEWID(), 1, 1, 4, '04/15/2016';
    INSERT INTO Sales SELECT NEWID(), 2, 1, 1, '02/01/2016';
    INSERT INTO Sales SELECT NEWID(), 3, 1, 2, '03/12/2016';
    INSERT INTO Sales SELECT NEWID(), 2, 2, 2, '03/18/2016';
    INSERT INTO Sales SELECT NEWID(), 3, 2, 1, '04/16/2016';
    INSERT INTO Sales SELECT NEWID(), 4, 2, 2, '04/23/2016';
    

    Just to make sure that data is inserted into our tables successfully, re-execute the SELECT part of the CREATE VIEW SQL statement and it should return the following:

    为了确保将数据成功插入到我们的表中,请重新执行CREATE VIEW SQL语句的SELECT部分​​,它应该返回以下内容:

    The results returned by SELECT part of the CREATE VIEW SQL script

    Note that we are using the DISTINCT with SELECT to prevent the retrieval of duplicate records because both employees have multiple records.

    请注意,由于两个雇员都有多个记录,因此我们将DISTINCT与SELECT一起使用以防止检索重复记录。

    Let’s get back to our view and see how it looks in our database. If we head over to Object Explorer and expand the Views folder under our demo database, we will find our view that looks exactly like a table because it has columns in it:

    让我们回到视图,看看它在数据库中的外观。 如果我们转到对象资源管理器并展开我们的演示数据库下的“ 视图”文件夹,我们会发现我们的视图看上去完全像一个表,因为其中包含列:

    The view in Object Explorer as a result of a successfully executed CREATE VIEW SQL statement

    These are all columns that this view will return. Let’s see what happens if we treat this view as a table. Write a SELECT statement but instead of saying select everything from and then the name of a table, we will simply say from a view:

    这些都是该视图将返回的所有列。 让我们看看如果将此视图视为表格会发生什么。 编写SELECT语句,而不是说先从中选择所有内容,然后再选择表名,我们将仅从视图中说出:

    SELECT * FROM vEmployeesWithSales
    

    Results of a SELECT query using the view as the source

    As can be seen from the figure above, the result is exactly the same as when querying data using actual tables.

    从上图可以看出,结果与使用实际表查询数据时完全相同。

    Like any other object in SQL Server, views have properties too. In Object Explorer, right-click any view of which you want to view the properties and select Properties:

    像SQL Server中的任何其他对象一样,视图也具有属性。 在对象资源管理器中 ,右键单击要查看其属性的任何视图,然后选择“ 属性”

    View properties window of a view in SQL Server Management Studio

    Notice that here you can see the actual options that the view was created with to understand how its data is derived from the actual tables:

    注意,在这里您可以看到创建视图的实际选项,以了解其数据是如何从实际表中派生的:

    • ANSI NULLs – It indicates if the object was created with the ANSI NULLs option ANSI NULL –指示是否使用ANSI NULLs选项创建对象
    • Encrypted – Specifies whether the view is encrypted 已加密 –指定视图是否已加密
    • Quoted identifier – Shows if the object was created with the quoted identifier option 带引号的标识符 –显示是否使用带引号的标识符选项创建对象
    • Schema bound – Designates whether the view is schema-bound 架构绑定 –指定视图是否绑定架构

    结论 (Conclusion)

    In this article, the goal was only to get familiar with the CREATE VIEW SQL statement syntax and creating a basic view. Moving on to a bit more complex stuff like creating a view with aggregates in it will be the focus in the next article. In other words, we are going to use the DLM language (Data Manipulation Language) and write some more advance SELECT queries.

    在本文中,目标只是熟悉CREATE VIEW SQL语句语法并创建基本视图。 下一篇文章将重点介绍更复杂的内容,例如创建带有聚合的视图。 换句话说,我们将使用DLM语言(数据操作语言)并编写一些更高级的SELECT查询。

    I hope this article on CREATE VIEW SQL statement has been informative for you and I thank you for reading it. Stay tuned for the next one…

    我希望有关CREATE VIEW SQL语句的这篇文章对您有所帮助,也感谢您阅读本文。 请继续关注下一个…

    目录 (Table of contents)

    CREATE VIEW SQL: Creating views in SQL Server
    CREATE VIEW SQL: Modifying views in SQL Server
    CREATE VIEW SQL: Inserting data through views in SQL Server
    CREATE VIEW SQL: Working with indexed views in SQL Server
    创建视图SQL:在SQL Server中创建视图
    创建视图SQL:在SQL Server中修改视图
    CREATE VIEW SQL:通过SQL Server中的视图插入数据
    CREATE VIEW SQL:在SQL Server中使用索引视图

    翻译自: https://www.sqlshack.com/create-view-sql-creating-views-in-sql-server/

    展开全文
  • 展开全部| CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]VIEW view_name [(column_list)]AS select_statement[WITH [CASCADED | LOCAL] CHECK OPTION]该语句能创建新的视图62616964757a...

    展开全部

    |  CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]

    VIEW view_name [(column_list)]

    AS select_statement

    [WITH [CASCADED | LOCAL] CHECK OPTION]

    该语句能创建新的视图62616964757a686964616fe59b9ee7ad9431333337386633,如果给定了OR REPLACE子句,该语句还能替换已有的视图。select_statement是一种SELECT语句,它给出了视图的定义。该语句可从基表或其他视图进行选择。

    该语句要求具有针对视图的CREATE VIEW权限,以及针对由SELECT语句选择的每一列上的某些权限。对于在SELECT语句中其他地方使用的列,必须具有SELECT权限。如果还有OR REPLACE子句,必须在视图上具有DROP权限。

    视图属于数据库。在默认情况下,将在当前数据库创建新视图。要想在给定数据库中明确创建视图,创建时,应将名称指定为db_name.view_name。

    mysql> CREATE VIEW test.v AS SELECT * FROM t;

    表和视图共享数据库中相同的名称空间,因此,数据库不能包含具有相同名称的表和视图。

    视图必须具有唯一的列名,不得有重复,就像基表那样。默认情况下,由SELECT语句检索的列名将用作视图列名。要想为视图列定义明确的名称,可使用可选的column_list子句,列出由逗号隔开的ID。column_list中的名称数目必须等于SELECT语句检索的列数。

    SELECT语句检索的列可以是对表列的简单引用。也可以是使用函数、常量值、操作符等的表达式。

    对于SELECT语句中不合格的表或视图,将根据默认的数据库进行解释。通过用恰当的数据库名称限定表或视图名,视图能够引用表或其他数据库中的视图。

    能够使用多种SELECT语句创建视图。视图能够引用基表或其他视图。它能使用联合、UNION和子查询。SELECT甚至不需引用任何表。在下面的示例中,定义了从另一表选择两列的视图,并给出了根据这些列计算的表达式:

    mysql> CREATE TABLE t (qty INT, price INT);

    mysql> INSERT INTO t VALUES(3, 50);

    mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;

    mysql> SELECT * FROM v;

    +------+-------+-------+

    | qty | price | value |

    +------+-------+-------+

    | 3 | 50 | 150 |

    +------+-------+-------+

    视图定义服从下述限制:

    · SELECT语句不能包含FROM子句中的子查询。

    · SELECT语句不能引用系统或用户变量。

    · SELECT语句不能引用预处理语句参数。

    · 在存储子程序内,定义不能引用子程序参数或局部变量。

    · 在定义中引用的表或视图必须存在。但是,创建了视图后,能够舍弃定义引用的表或视图。要想检查视图定义是否存在这类问题,可使用CHECK TABLE语句。

    · 在定义中不能引用TEMPORARY表,不能创建TEMPORARY视图。

    · 在视图定义中命名的表必须已存在。

    · 不能将触发程序与视图关联在一起。

    在视图定义中允许使用ORDER BY,但是,如果从特定视图进行了选择,而该视图使用了具有自己ORDER BY的语句,它将被忽略。

    对于定义中的其他选项或子句,它们将被增加到引用视图的语句的选项或子句中,但效果未定义。例如,如果在视图定义中包含LIMIT子句,而且从特定视图进行了选择,而该视图使用了具有自己LIMIT子句的语句,那么对使用哪个LIMIT未作定义。相同的原理也适用于其他选项,如跟在SELECT关键字后的ALL、DISTINCT或SQL_SMALL_RESULT,并适用于其他子句,如INTO、FOR UPDATE、LOCK IN SHARE MODE、以及PROCEDURE。

    如果创建了视图,并通过更改系统变量更改了查询处理环境,会影响从视图获得的结果:

    mysql> CREATE VIEW v AS SELECT CHARSET(CHAR(65)), COLLATION(CHAR(65));

    Query OK, 0 rows affected (0.00 sec)

    mysql> SET NAMES 'latin1';

    Query OK, 0 rows affected (0.00 sec)

    mysql> SELECT * FROM v;

    +-------------------+---------------------+

    | CHARSET(CHAR(65)) | COLLATION(CHAR(65)) |

    +-------------------+---------------------+

    | latin1 | latin1_swedish_ci |

    +-------------------+---------------------+

    1 row in set (0.00 sec)

    mysql> SET NAMES 'utf8';

    Query OK, 0 rows affected (0.00 sec)

    mysql> SELECT * FROM v;

    +-------------------+---------------------+

    | CHARSET(CHAR(65)) | COLLATION(CHAR(65)) |

    +-------------------+---------------------+

    | utf8 | utf8_general_ci |

    +-------------------+---------------------+

    1 row in set (0.00 sec)

    可选的ALGORITHM子句是对标准SQL的MySQL扩展。ALGORITHM可取三个值:MERGE、TEMPTABLE或UNDEFINED。如果没有ALGORITHM子句,默认算法是UNDEFINED(未定义的)。算法会影响MySQL处理视图的方式。

    对于MERGE,会将引用视图的语句的文本与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分。

    对于TEMPTABLE,视图的结果将被置于临时表中,然后使用它执行语句。

    对于UNDEFINED,MySQL将选择所要使用的算法。如果可能,它倾向于MERGE而不是TEMPTABLE,这是因为MERGE通常更有效,而且如果使用了临时表,视图是不可更新的。

    明确选择TEMPTABLE的1个原因在于,创建临时表之后、并在完成语句处理之前,能够释放基表上的锁定。与MERGE算法相比,锁定释放的速度更快,这样,使用视图的其他客户端不会被屏蔽过长时间。

    视图算法可以是UNDEFINED,有三种方式:

    · 在CREATE VIEW语句中没有ALGORITHM子句。

    · CREATE VIEW语句有1个显式ALGORITHM = UNDEFINED子句。

    · 为仅能用临时表处理的视图指定ALGORITHM = MERGE。在这种情况下,MySQL将生成告警,并将算法设置为UNDEFINED。

    正如前面所介绍的那样,通过将视图定义中的对应部分合并到引用视图的语句中,对MERGE进行处理。在下面的示例中,简要介绍了MERGE的工作方式。在该示例中,假定有1个具有下述定义的视图v_merge:

    CREATE ALGORITHM = MERGE VIEW v_merge (vc1, vc2) AS

    SELECT c1, c2 FROM t WHERE c3 > 100;

    示例1:假定发出了下述语句:

    SELECT * FROM v_merge;

    MySQL以下述方式处理语句:

    · v_merge成为t

    · *成为vc1、vc2,与c1、c2对应

    · 增加视图WHERE子句

    所产生的将执行的语句为:

    SELECT c1, c2 FROM t WHERE c3 > 100;

    示例2:假定发出了下述语句:

    SELECT * FROM v_merge WHERE vc1 < 100;

    该语句的处理方式与前面介绍的类似,但vc1 < 100变为c1 < 100,并使用AND连接词将视图的WHERE子句添加到语句的WHERE子句中(增加了圆括号以确保以正确的优先顺序执行子句部分)。所得的将要执行的语句变为:

    SELECT c1, c2 FROM t WHERE (c3 > 100) AND (c1 < 100);

    事实上,将要执行的语句是具有下述形式的WHERE子句:

    WHERE (select WHERE) AND (view WHERE)

    MERGE算法要求视图中的行和基表中的行具有一对一的关系。如果不具有该关系。必须使用临时表取而代之。如果视图包含下述结构中的任何一种,将失去一对一的关系:

    · 聚合函数(SUM(), MIN(), MAX(), COUNT()等)。

    · DISTINCT

    · GROUP BY

    · HAVING

    · UNION或UNION ALL

    · 仅引用文字值(在该情况下,没有基本表)。

    某些视图是可更新的。也就是说,可以在诸如UPDATE、DELETE或INSERT等语句中使用它们,以更新基表的内容。对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系。还有一些特定的其他结构,这类结构会使得视图不可更新。更具体地讲,如果视图包含下述结构中的任何一种,那么它就是不可更新的:

    · 聚合函数(SUM(), MIN(), MAX(), COUNT()等)。

    · DISTINCT

    · GROUP BY

    · HAVING

    · UNION或UNION ALL

    · 位于选择列表中的子查询

    · Join

    · FROM子句中的不可更新视图

    · WHERE子句中的子查询,引用FROM子句中的表。

    · 仅引用文字值(在该情况下,没有要更新的基本表)。

    · ALGORITHM = TEMPTABLE(使用临时表总会使视图成为不可更新的)。

    关于可插入性(可用INSERT语句更新),如果它也满足关于视图列的下述额外要求,可更新的视图也是可插入的:

    · 不得有重复的视图列名称。

    · 视图必须包含没有默认值的基表中的所有列。

    · 视图列必须是简单的列引用而不是导出列。导出列不是简单的列引用,而是从表达式导出的。下面给出了一些导出列示例:

    · 3.14159

    · col1 + 3

    · UPPER(col2)

    · col3 / col4

    · (subquery)

    混合了简单列引用和导出列的视图是不可插入的,但是,如果仅更新非导出列,视图是可更新的。考虑下述视图:

    CREATE VIEW v AS SELECT col1, 1 AS col2 FROM t;

    该视图是不可插入的,这是因为col2是从表达式导出的。但是,如果更新时不更新col2,它是可更新的。这类更新是允许的:

    UPDATE v SET col1 = 0;

    下述更新是不允许的,原因在于,它试图更新导出列:

    UPDATE v SET col2 = 0;

    在某些情况下,能够更新多表视图,假定它能使用MERGE算法进行处理。为此,视图必须使用内部联合(而不是外部联合或UNION)。此外,仅能更新视图定义中的单个表,因此,SET子句必须仅命名视图中某一表的列。即使从理论上讲也是可更新的,不允许使用UNION ALL的视图,这是因为,在实施中将使用临时表来处理它们。

    对于多表可更新视图,如果是将其插入单个表中,INSERT能够工作。不支持DELETE。

    对于可更新视图,可给定WITH CHECK OPTION子句来防止插入或更新行,除非作用在行上的select_statement中的WHERE子句为“真”。

    在关于可更新视图的WITH CHECK OPTION子句中,当视图是根据另一个视图定义的时,LOCAL和CASCADED关键字决定了检查测试的范围。LOCAL关键字对CHECK OPTION进行了限制,使其仅作用在定义的视图上,CASCADED会对将进行评估的基表进行检查。如果未给定任一关键字,默认值为CASCADED。

    2Q==

    已赞过

    已踩过<

    你对这个回答的评价是?

    评论

    收起

    展开全文
  • SQLServer之创建视图

    万次阅读 2018-10-24 11:33:17
    使用SSMS数据库管理工具创建视图 1、连接数据库,选择数据库,展开数据库-》右键视图-》选择新建视图。 2、在添加表弹出框-》选择要创建视图的表、视图、函数、或者同义词等-》点击添加-》添加完成后选择关闭。 ...
  • sql——创建视图和索引

    千次阅读 2021-09-13 15:44:35
    创建视图:给BILLS表创建视图。创建的视图实际上是一个虚表。 CREATE VIEW DEBTS AS SELECT * FROM BILLS; 可以选择特定的行进行新视图的创建。 CREATE VIEW CREDITCARD_DEBTS AS SELECT * FROM DEBTS WHERE ...
  • 视图在我们oracle数据库中是必不可少的结构之一,那么它有哪些好处? 1.简单性。看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户...
  • 1、创建视图 --***① 将Student Course 和sc表中学生的学号,姓名,课程号,课程名,成绩定义为视图V_S_C_G *** CREATE VIEW V_S_C_G AS SELECT Student.sno,sname,course.cno,cname,grade FROM Student,SC,course...
  • 数据库创建视图容易出的错

    千次阅读 2020-04-27 16:31:51
    报错的原因分析: 批处理必须以 CREATE 语句开始,即一个查询分析器里面只有一个批处理语句才是规范的语法。create default、create function、create procedure、create rule、create schema、create view和create ...
  • 创建视图 失败 没有权限

    千次阅读 2018-10-19 09:44:14
    A用户 创建视图 但是要用到B用户的表 这个时候 要给A 用户查看b用户表的权限 1:用B 的用户连接数据库 2:grant select on B .表名字 to A; 如觉得 单张表 赋权限比较麻烦 可以直接 grant select any table to A; 这...
  • 数据库创建视图失败总结

    千次阅读 2016-05-18 19:05:21
    在使用Sqlite创建视图时,遇到一些创建失败的小问题,简单总结一下 示例1:  CREATE VIEW view_name AS SELECT * FROM user_table WHERE user_name LIKE '张%'; 备注:AS之后的sql语句内容,不能用括号括起来 ...
  • 202-01-25 Oracle学习之视图的创 一、Oracle版本 Oracle 11.2.0.1.0 - 64bit Tool SQLPlus ...好处:增加基本表数据的安全性,因为创建语句用到的关键字或者组函数等原因,可以限制用户对视...
  • 创建视图加引号与不加引号的区别

    千次阅读 2018-07-01 09:43:32
    我们在查询数据时,为了安全、方便,经常用到视图(view),普通视图创建的时候,无论你的字段名称是大写还是小写,在数据库中查询的时候只要字符匹配,即可被视为合法的字段。   例如:  create view v_test...
  • ORACLE 11.2.0.4.0及以上版本数据库,创建视图的用户对视图依赖的表的SELECT权限无with grant option选项,导致创建视图或将视图查询权限授予其它用户出现ORA-01720错误
  • 用Oracle创建视图 ORA-01031:权限不足

    万次阅读 2018-07-17 09:46:13
    原因:用scott用户登录的,没有为此用户授予创建视图的权限; 解决方法:用system用户登录,Connect as SYSDBA 登录进去之后,新建SQLWindow, 输入并运行(为scott用户授予创建视图的权限,注意必须先切换到...
  • 定义所有女生信息的视图“F_Student”(5分)2.通过视图“F_Student”查询小于18岁的女生人数。(5分)3.定义“计算机系”学生的视图”CS_Student”,并要求透过该视图进行的更新操作只涉及计算机系学生。(5分)4....
  • #创建、使用视图#错误代码: 1054 Unknown column 'u.customerID' in 'field list' DROP VIEW vw_UCT; CREATE VIEW vw_UCT AS SELECT u.customerID,u.customerName,u.`pid`,u.`telephone`,u.`address`,c.savingID,c...
  • 原因是当前登录的scott用户没有创建视图的权限,需要给scott用户授权 首先用scott用户登录,然后给scott用户授权 在控制台上输入grant create any view to scott; 如下 出现Grant succeeded.表示授权成功 ...
  • 问题描述:sqlserver中创建了一个视图,单独查询这个视图与把创建视图的语句拿出来查询的结果不一样,有一个字段从视图中查询为null,从语句中查询是有值。 解决方案:把这个视图删除掉,重新创建一遍,再次查询...
  • 在PL/SQL Developer数据库管理工具中,使用SCOTT用户帐号进行登录,新建SQL查询窗口,输入一条创建视图的SQL语句,随后弹出一个错误的提示信息:ORA-01031:权限不足。上图所示的错误提示信息已经说的很明白了,这是...
  • oracle创建视图的一些总结: create [or replace][force | noforce] view [user.] viewName (column [,column2]...) as query [with check option[Constraint constraint]] [with read only] or replace 表示...
  • 1. 在可视化管理环境中创建、删除视图,浏览视图。 2. 熟练掌握视图的定义和删除的SQL语句。 3. 掌握对视图的查询、更新等操作,理解可更新视图以及不可更新视图的实质。 二 实验要求 1. 请大家务必动手完成实验...
  • 【数据库】创建视图约束

    千次阅读 2016-04-15 15:48:22
    针对视图,oracle提供了check option选项,以保证视图数据的完整性。本节将从以下几个方面分析with check option选项。 1、
  • 创建视图的主要目的是为了方便查询数据,而不能提高查询效率,要提高效率只能通过其它的办法优化,比如创建索引之类的。 以下证明上面的说法: 按日查询出平均数据,数据量为58万条 select avg(ave_value) ave_value...
  • mysql创建视图包含子查询的解决方法

    万次阅读 2017-02-07 15:16:30
    mysql 创建视图出现1349 View's SELECT contains a subquery in the FROM clause解决办法 习惯用oracle创建视图,最近在mysql下创建视图出现以下错误: 查询:CREATE or replace VIEW view_order_summary AS ...
  • 单独将SQL语句拉出来是可以正常创建视图的,但能过存储过程执行命令创建时,却提示“XXX对象名无效”。 在网上找了一下资料,大部分没什么参价值。但有一份资料却让我发出了此次的问题所在。 拼接的代码
  • create view gaojia as select cat_id,goods_id,goods_name,shop_price from goods ...这是ecshop下面的库,如果不创建视图,直接用子查询是能查询出正确结果的,创建视图后就不正确了,诸位谁能帮我分析一下原因

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 189,028
精华内容 75,611
热门标签
关键字:

创建视图的原因