精华内容
下载资源
问答
  • 创建视图SQL:在SQL Server中创建视图

    千次阅读 2020-07-17 13:42:32
    通过视图修改行时,此选项使我们可以控制插入到表中的数据,该数据紧随视图定义中的WHERE子句。 在即将到来的文章中对此有更多的了解。 CREATE VIEW SQL语句 (CREATE VIEW SQL statement) Without further ado, let...

    介绍 (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/

    展开全文
  • postgresql创建视图

    千次阅读 2016-12-14 18:25:15
    今天使用postgresql创建视图时,使用的名字全是大写的 比如V_TEST 创建好了,是没有问题的,显示创建的视图名字也是V_TEST。 然后我就开始查询, select * from V_TEST 直接就报错了,说v_test视图不存在。 我就...

    今天使用postgresql创建视图时,使用的名字全是大写的 比如V_TEST

    创建好了,是没有问题的,显示创建的视图名字也是V_TEST。

    然后我就开始查询, select * from V_TEST   直接就报错了,说v_test视图不存在。

    我就纳闷了,为什么创建时,你不给我转成小写,查询时,转成了小写。

    不管怎样,到时再说吧,可能是有个配置或者其它之类的导致转为小写了,但是目前没有时间研究了,后续有空再研究吧,也算是一个postgresql的坑吧。

    展开全文
  • 支持oracle或mysql,输入数据库的连接信息及表名或视图名,自动根据表或视图创建实体类,非常好用的一个小程序,大大节省时间~
  • Java 数据库的视图

    千次阅读 2012-06-04 16:03:39
    前面已经提到过视图(View),这一节专门讨论视图的概念、定义和操作。 视图是从一个或多个表(或视图)导出的表。视图是数据库的用户使用数据库的观点。例如,对于一个学校,其学生的情况存于数据库的一个或多个表...

    数据库的视图

    视图概念

    前面已经提到过视图(View),这一节专门讨论视图的概念、定义和操作。

    视图是从一个或多个表(或视图)导出的表。视图是数据库的用户使用数据库的观点。例如,对于一个学校,其学生的情况存于数据库的一个或多个表中,而作为学校的不同职能部门,所关心的学生数据的内容是不同的。即使是同样的数据,也可能有不同的操作要求,于是就可以根据他们的不同需求,在物理的数据库上定义他们对数据库所要求的数据结构,这种根据用户观点所定义的数据结构就是视图。

    视图与表(有时为与视图区别,也称表为基本表——Base Table)不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。

    视图一经定义以后,就可以像表一样被查询、修改、删除和更新。使用视图有下列优点:

    (1)为用户集中数据,简化用户的数据查询和处理。有时用户所需要的数据分散在多个表中,定义视图可将它们集中在一起,从而方便用户的数据查询和处理。

    (2)屏蔽数据库的复杂性。用户不必了解复杂的数据库中的表结构,并且数据库表的更改也不影响用户对数据库的使用。

    (3)简化用户权限的管理。只需授予用户使用视图的权限,而不必指定用户只能使用表的特定列,也增加了安全性。

    (4)便于数据共享。各用户不必都定义和存储自己所需的数据,可共享数据库的数据,这样同样的数据只需存储一次。

    (5)可以重新组织数据以便输出到其他应用程序中。

    MySQL 在5.0版中就已经实现了视图功能(包括可更新视图)。

    1.  使用CREATE VIEW语句创建视图

    语法格式:

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

        VIEW view_name [(column_list)]

        AS select_statement

        [WITH [CASCADED | LOCAL] CHECK OPTION]

    说明:

    ●   view_name:视图名。

    ●  column_list:要想为视图的列定义明确的名称,可使用可选的column_list子句,列出由逗号隔开的列名。column_list中的名称数目必须等于SELECT语句检索的列数。若使用与源表或视图中相同的列名时可以省略column_list。

    ●  OR REPLACE:给定了OR REPLACE子句,语句能够替换已有的同名视图。

    ●  ALGORITHM子句:可选的ALGORITHM子句是对标准SQL的MySQL扩展,规定了MySQL的算法,算法会影响MySQL处理视图的方式。ALGORITHM可取3个值:MERGE、TEMPTABLE或UNDEFINED。如果没有ALGORITHM子句,默认算法是UNDEFINED(未定义的)。指定了MERGE选项,会将引用视图的语句的文本与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分。MERGE算法要求视图中的行和基表中的行具有一对一的关系,如果不具有该关系,必须使用临时表取而代之。指定了TEMPTABLE选项,视图的结果将被置于临时表中,然后使用它执行语句。

    ●   select_statement:用来创建视图的SELECT语句,可在SELECT语句中查询多个表或视图。但对SELECT语句有以下的限制:

    (1)定义视图的用户必须对所参照的表或视图有查询(即可执行SELECT语句)权限;

    (2)不能包含FROM子句中的子查询;

    (3)不能引用系统或用户变量;

    (4)不能引用预处理语句参数;

    (5)在定义中引用的表或视图必须存在;

    (6)若引用不是当前数据库的表或视图时,要在表或视图前加上数据库的名称;

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

    (8)对于SELECT语句中的其他选项或子句,若视图中也包含了这些选项,则效果未定义。例如,如果在视图定义中包含LIMIT子句,而SELECT语句使用了自己的LIMIT子句,MySQL对使用哪个LIMIT未做定义。

    ●   WITH CHECK OPTION:指出在可更新视图上所进行的修改都要符合select_statement所指定的限制条件,这样可以确保数据修改后,仍可通过视图看到修改的数据。当视图是根据另一个视图定义的时,WITH CHECK OPTION给出两个参数:LOCAL和CASCADED。它们决定了检查测试的范围。LOCAL关键字使CHECK OPTION只对定义的视图进行检查,CASCADED则会对所有视图进行检查。如果未给定任一关键字,默认值为CASCADED。

    注意,使用视图时,要注意下列事项:

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

    (2)视图的命名必须遵循标志符命名规则,不能与表同名,且对每个用户视图名必须是唯一的,即对不同用户,即使是定义相同的视图,也必须使用不同的名字。

    (3)不能把规则、默认值或触发器与视图相关联。

    (4)不能在视图上建立任何索引,包括全文索引。

     

           假设当前数据库是TEST,创建XSCJ数据库上的CS_KC视图,包括计算机专业各学生的学号、其选修的课程号及成绩。要保证对该视图的修改都要符合专业名为计算机这个条件。

    CREATE OR REPLACE VIEW  XSCJ.CS_KC

        AS

        SELECT XS.学号,课程号,成绩

             FROM XSCJ.XS,  XSCJ.XS_KC

             WHERE  XS.学号 = XS_KC.学号 AND XS.专业名 = '计算机'

             WITH CHECK OPTION;

    创建XSCJ数据库上的计算机专业学生的平均成绩视图CS_KC_AVG,包括学号(在视图中列名为num)和平均成绩(在视图中列名为score_avg)。

    USE XSCJ

    CREATE VIEW CS_KC_AVG(num, score_avg)

        AS

        SELECT 学号,AVG(成绩)

             FROM CS_KC

             GROUP BY 学号;

    说明:这里SELECT语句直接从CS_KC视图中查询出结果。

    视图定义后,就可以如同查询基本表那样对视图进行查询。

    在视图CS_KC中查找计算机专业的学生学号和选修的课程号。

    SELECT 学号,课程号

       FROM CS_KC

    查找平均成绩在80分以上的学生的学号和平均成绩。

    本例首先创建学生平均成绩视图XS_KC_AVG,包括学号(在视图中列名为num)和平均成绩(在视图中列名为score_avg)。

    创建学生平均成绩视图XS_KC_AVG:

    CREATE VIEW XS_KC_AVG ( num,score_avg )

       AS

       SELECT 学号, AVG(成绩)

          FROM XS_KC

          GROUP BY 学号;

    再对XS_KC_AVG视图进行查询。

    SELECT *

       FROM XS_KC_AVG

       WHERE score_avg>=80;

     

    执行结果为:

     

     

    从以上两例可以看出,创建视图可以向最终用户隐藏复杂的表连接,简化了用户的SQL程序设计。

    注意:使用视图查询时,若其关联的基本表中添加了新字段,则该视图将不包含新字段。例如,视图CS_XS中的列关联了XS表中所有列,若XS表新增了“籍贯”字段,那么CS_XS视图中将查询不到“籍贯”字段的数据。

    如果与视图相关联的表或视图被删除,则该视图将不能再使用。

    查询视图也可以在MySQL Query Browser查询工具中进行,方法与查询表数据类似。

    1.  可更新视图

    要通过视图更新基本表数据,必须保证视图是可更新视图,即可以在INSET、UPDATE或DELETE等语句当中使用它们。对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系。还有一些特定的其他结构,这类结构会使得视图不可更新。如果视图包含下述结构中的任何一种,那么它就是不可更新的:

    (1)聚合函数;

    (2)DISTINCT关键字;

    (3)GROUP BY子句;

    (4)ORDER BY子句;

    (5)HAVING子句;

    (6)UNION运算符;

    (7)位于选择列表中的子查询;

    (8)FROM子句中包含多个表;

    (9)SELECT语句中引用了不可更新视图;

    (10)WHERE子句中的子查询,引用FROM子句中的表;

    (11)ALGORITHM选项指定为TEMPTABLE(使用临时表总会使视图成为不可更新的)。

    2.  插入数据

    使用INSERT语句通过视图向基本表插入数据,有关INSERT语句的语法介绍见第      3章。

    创建视图CS_XS,视图中包含计算机专业的学生信息,并向CS_XS视图中插入一条记录:('081255','李牧','计算机',1,'1990-10-21',50,NULL,NULL)。

    首先创建视图CS_XS:

    CREATE OR REPLACE VIEW CS_XS

        AS

        SELECT *

             FROM XS

             WHERE 专业名 = '计算机'

        WITH CHECK OPTION;

    注意:在创建视图的时候加上WITH CHECK OPTION子句,是因为WITH CHECK OPTION子句会在更新数据的时候检查新数据是否符合视图定义中WHERE子句的条件。WITH CHECK OPTION子句只能和可更新视图一起使用。

    接下来插入记录:

    INSERT INTO CS_XS

       VALUES('081255', '李牧', '计算机', 1, '1990-10-14', 50, NULL, NULL);

    注意:这里插入记录时专业名只能为“计算机”。

    这时,使用SELECT语句查询CS_XS视图和基本表XS,就可发现XS表中该记录已经被添加。

    当视图所依赖的基本表有多个时,不能向该视图插入数据,因为这将会影响多个基本表。例如,不能向视图CS_KC插入数据,因为CS_KC依赖两个基本表:XS和XS_KC。

    对INSERT语句还有一个限制:SELECT语句中必须包含FROM子句中指定表的所有不能为空的列。例如,若CS_XS视图定义的时候不加上“姓名”字段,则插入数据的时候会出错。

    3.  修改数据

    使用UPDATE语句可以通过视图修改基本表的数据,有关UPDATE语句的语法介绍见第3章。

    将CS_XS视图中所有学生的总学分增加8。

    UPDATE CS_XS

        SET 总学分 =总学分+ 8;

    该语句实际上是将CS_XS视图所依赖的基本表XS中所有记录的总学分字段值在原来基础上增加8。

    若一个视图依赖于多个基本表,则一次修改该视图只能变动一个基本表的数据。

    将CS_KC视图中学号为081101的学生的101课程成绩改为90。

    UPDATE CS_KC

        SET 成绩=90

        WHERE 学号='081101' AND课程号='101';

    本例中,视图CS_KC依赖于两个基本表:XS和XS_KC,对CS_KC视图的一次修改只能改变学号(源于XS表)或者课程号和成绩(源于XS_KC表)。

    以下的修改是错误的:

    UPDATE CS_KC

        SET 学号='081120',课程号='208'

        WHERE 成绩=90;

    4.  删除数据

    使用DELETE语句可以通过视图删除基本表的数据,有关DELETE语句的语法介绍见第3章。

    删除CS_XS中女同学的记录。

    DELETE FROM CS_XS

        WHERE 性别 = 0;

    注意:对依赖于多个基本表的视图,不能使用DELETE语句。例如,不能通过对CS_KC视图执行DELETE语句而删除与之相关的基本表XS及XS_KC表的数据。

    使用ALTER语句可以对已有视图的定义进行修改。

    语法格式:

    ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]

       VIEW view_name [(column_list)]

       AS select_statement

       [WITH [CASCADED | LOCAL] CHECK OPTION]

    ALTER VIEW语句的语法和CREATE VIEW类似,这里不过多叙述。

    将CS_XS视图修改为只包含计算机专业学生的学号、姓名和总学分。

    USE XSCJ

    ALTER VIEW CS_XS

    AS

        SELECT 学号,姓名,总学分

             FROM XS

             WHERE 专业名 = '计算机';

    1.  使用SQL语句删除视图

    语法格式:

    DROP VIEW [IF EXISTS]

         view_name [, view_name] ...

         [RESTRICT | CASCADE]

    其中,view_name是视图名,声明了IF EXISTS,若视图不存在的话,也不会出现错误信息。也可以声明RESTRICT和CASCADE,但它们没什么影响。

    使用DROP VIEW一次可删除多个视图。例如:

    DROP VIEW CS_KC, CS_XS;

    将删除视图CS_KC和CS_XS。

    2.  使用MySQL Administrator删除视图

    MySQL Administrator中删除视图的操作方法是:展开数据库和视图,单击需要删除的视图,选择下方的选项“Drop View”,出现如图4.34所示的对话框,在其中单击“Drop View(s)”按钮即可删除指定的视图。

     

    展开全文
  • 【MongoDB】关联查询创建视图view

    千次阅读 2019-06-20 19:02:46
    通常在涉及到多表关联查询的需求时,MongoDB(3.4版本以上)可以采用建立视图(view)的方式来实现。 视图里是不存在真正的...当然也有一个小小例外,就是system.views集合,这里面存放了所有视图定义内容,好...

          通常在涉及到多表关联查询的需求时,MongoDB(3.4版本以上)可以采用建立视图(view)的方式来实现。

          视图里是不存在真正的数据的,可以把它简单的看成是一个“伪集合”。需要访问视图的内容时,视图数据都是通过实时聚合来自于源集合的。很显然,完全没有空间占用问题,这比冗余强的太多。当然也有一个小小例外,就是system.views集合,这里面存放了所有视图的定义内容,好在占不了多少空间。 

          一旦视图被创建,就可以对视图进行任何查询操作,操作内容和标准查询操作完全一致,而且一个视图是可以建立在一个已有视图上的。但是切记,这是只读视图,不能进行写操作!当然,还是有些小小限制的,诸如不能用MapReduce,不能用$text进行全文检索等等。

          假设现在有如下两张表:任务表、任务参与者表。从表可以看出二者的关联外键是任务id。

    因此,建立视图的方式如下,两种均可

    
    db.createView("TaskParticipantView","TaskParticipant",
    	[	
    		{
    		  $lookup:{from:"Task",localField:"taskId",foreignField:"_id",as:"embedTask"}
    	  	},
    		{
    		  $project:{"embedTask._id":0}  // 设置不需要哪些字段
    		}
    	]
    )
    
    
    db.runCommand(
        {
            create: "TaskParticipantView2",
            viewOn: "TaskParticipant",
            pipeline: [
                {$lookup: {from: "Task", localField: "taskId", foreignField: "_id", as: "embedTask"}}
            ]
        }
    );

     建好的视图就是这样的:

     

     

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

    千次阅读 2020-07-25 22:30:11
    在本文中,我们将学习SQL Server中视图概念的基础知识,然后探索使用T-SQL和SQL Server Management Studio在SQL中创建视图的方法。 定义 (Definition) Most of the time, views can be defined as “virtual or ...
  • java集合——视图与包装器

    千次阅读 2015-12-16 21:51:55
    【0】README0.1) 本文描述转自 core java volume 1, 源代码为原创,旨在理解 java集合——视图与包装器 的相关知识; 0.2) for full source code , please visit ...
  • mysql中创建视图、索引

    万次阅读 2013-05-30 21:43:15
    存储文件------>基本表----->视图 内模式 ------->模式 ------>外模式  create table student ( name char(10) primary key, age smallint, score int ); insert into student values('mysql1',20,90); ...
  • 既然有了数组,为何还要有集合呢,由于数组对象一旦创建,其大小便不可以更改,我们只能往数组中存放创建时数量的对象。而集合中的长度却是动态可变化的,我们可以往集合中添加任意数量的对象。并且我们可以通过集合...
  • Java 数据库的查询和视图

    千次阅读 2012-05-28 17:08:25
    数据库的查询和视图 选择(Selection) 选择是单目运算,其运算对象是一个表。该运算按给定的条件,从表中选出满足条件的行形成一个新表作为运算结果。 选择运算的记号为sF(R)。 其中s是选择运算符,下标F是一...
  • Java面向对象系列[v1.0.0][索引与视图]

    千次阅读 2020-09-25 15:17:19
    创建索引唯一的作用就是加速对表的查询,索引通过使用快速路径访问方法来快速定位数据,从而减少磁盘I/O;因为视图只是数据表中数据的逻辑显示,也就是一个查询结果,所以创建视图就是建立视图名和查询语句的关联
  • java创建多线程的四种方式及其区别

    千次阅读 2019-04-26 18:35:25
    java创建多线程有如下四种方式: 继承Thread类创建线程 实现Runnable接口创建线程 使用Callable和Future创建线程 使用线程池创建(使用java.util.concurrent.Executor接口) 下面分别介绍这四种创建多线程的方式...
  • 在上一文中,我们介绍了怎样创建一个EclipseRCP,并创建用户交互的视图,但是并没有提到如何实现视图的交互。在本文中,我们会介绍以两种不同的方式实现Eclipse RCPView之间的交互,并结合代码详细领略一下Eclipse是...
  • Spine是一个可扩展的Java应用程序框架,用于创建易于转置的Java / J2EE应用程序,该应用程序可以轻松地从一个视图模型移植到另一个视图模型。 Spine提供了一种使用控制反转(IOC)/依赖性注入技术来创建多层应用...
  • Java创建微服务

    千次阅读 2017-04-13 10:54:44
    本章将重点介绍如何识别和创建组成应用程序的微服务,特别是如何将识别的候选服务转换为 RESTful API,然后在 Java 中实现它。 示例应用程序我们使用两个示例应用程序来帮助解释相关概念和提出观点: 在线零售店...
  • Java面试题大全(2020版)

    万次阅读 多人点赞 2019-11-26 11:59:06
    发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java ...
  • 今天遇见了一个问题,在建立数据库表中发现,如果有两个不同的用户,其中一个用户创建了一个表,在代码中永另一个用户去访问的话,会就提示表或视图不存在,那么就需要建立同义词了,同义词的意思是就是,把一个表...
  • Android Developers:创建自定义视图

    千次阅读 2013-10-19 07:45:22
    设计良好的自定义视图就像其它任何精心设计的类。它通过一个容易使用的接口封装了一个组特定的方法。它高效的使用CPU和内存,等等。除了是一个精心设计的类,然而,自定义视图应该:  遵守Android规范  提供...
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
     Java 3DMenu 界面源码,有说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...
  • 众所周知,Java的默认窗口使用的是系统默认样式,那么我们如何自己定义样式使其更好看呢?下面我就来分享一下如何自定义样式。 效果: 首先准备好我们的背景,按钮贴图: 然后开始。 先创建两个图片对象,把...
  • Java虚拟机(JVM)面试题(2020最新版)

    万次阅读 多人点赞 2020-02-19 12:26:32
    HotSpot虚拟机对象探秘对象的创建为对象分配内存处理并发安全问题对象的访问定位句柄访问直接指针内存溢出异常Java会存在内存泄漏吗?请简单描述垃圾收集器简述Java垃圾回收机制GC是什么?为什么要GC垃圾回收的优点...
  • Java创建线程的4种方式以及区别

    千次阅读 2018-08-01 17:36:58
    Java可以用三种方式来创建线程,如下所示: 1)继承Thread类创建线程 2)实现Runnable接口创建线程 3)使用Callable和Future创建线程 4)匿名类创建线程(new) 下面让我们分别来看看这三种创建...
  • Java.Spring.MVC】解析视图

    千次阅读 2015-01-04 20:40:28
    Spring支持JSP, Velocity, XSLT等视图技术。 Spring处理视图的两个重要的接口是: ViewResolver - 在view name和实际的view之间进行映射 View - 视图基础接口,它的各种实现类是无状态的,因此是线程安全...
  • 全面理解Java内存模型

    万次阅读 多人点赞 2016-09-21 18:39:21
    JMM定义Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型,所以JMM是隶属于JVM的。如果我们要想深入了解Java并发编程,就要先理解好Java内存模型。Java内存模型定义了多线程之间共享变量...
  •  1) 即Data Definition Language,即数据定义语言,操作的对象是数据库对象,主要用来定义数据对象;  2) 数据对象:共8种,分为4大类  i. 存储的数据:table表、数据字典(系统表);  ii. 查询结果(临时数据...
  • Java面试题全集(中)

    万次阅读 多人点赞 2015-04-09 22:05:20
    2015年重新整理发布的Java面试题全集,这部分主要是与Java Web和Web Service相关的面试题。
  • Java面试题全集(下)

    万次阅读 多人点赞 2015-04-14 17:19:19
    这部分主要是开源Java EE框架方面的内容,包括Hibernate、MyBatis、Spring、Spring MVC等,由于Struts 2已经是明日黄花,在这里就不讨论Struts 2的面试题。此外,这篇文章还对企业应用架构、大型网站架构和应用...
  • Java Web自定义MVC框架详解

    万次阅读 多人点赞 2015-01-16 10:56:01
    最近给学生讲Java Web,希望他们能够在学完这部分内容后自己实现一个MVC框架。但是突然发现百度上能搜索到的靠谱的资料并不是很多,有些只是原理没有代码实现,有些有代码实现但是对于初学者来说理解起来还是比较...
  • Android开发:创建自定义视图创建一个View类 作者 admin 在 21 四月 2014, 11:39 上午 翻自:http://developer.android.com/training/custom-views/create-view.html 设计良好的定制视图与其他精心...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 160,346
精华内容 64,138
热门标签
关键字:

java创建视图定义人

java 订阅