精华内容
下载资源
问答
  • 利用access的sql视图可以创建
    千次阅读
    2021-02-02 18:31:16

    本篇博客关注的焦点是视图的使用以及视图和多表连接的配合。以便可以了解视图,以及更好的使用视图。

    首先,还是要说明一下视图的定义:视图是基于SQL语句的结果集的可视化虚拟表,换句话说视图就是SQL查询结果的可视化呈现,是多个表的部分数据的关系虚拟表。为了后面的内容更容易理解,我们还要看一下视图的建立过程。如图所示是机房收费系统中的《User_sys》和《CheckInfo_sys》建立的一个视图的关系。(不讨论该视图是否具有实用价值)

    f0a065aa37ca7daf12893e9112ca9277.png

    那么这个视图建立的代码如下:

    SELECT dbo.CheckInfo_sys.UserName, dbo.CheckInfo_sys.Income, dbo.CheckInfo_sys.Expend, dbo.CheckInfo_sys.HandIn, dbo.User_sys.RealName

    FROM dbo.CheckInfo_sys INNER JOIN

    dbo.User_sys ON dbo.CheckInfo_sys.UserName = dbo.User_sys.UserName

    那么我们这里需要注意的就是代码中的From后面的部分。这里的Inner join就是我们说的连接,那么On之后是视图的筛选条件。需要说明的是若没有ON后面的条件就不能用连接。以该视图为例:即选取两个表中用户名相等的数据。那么这里问题就出来了,在User_sys表中用户名是唯一的,但是CheckInfo中的记录可能是多条。这样的一对多的关系的情况就导致了来源于用户表的数据出现重复,若这时要统计结账教师的人数将出现重复!那么这里我们就可以配合不同的连接方式来解决问题。那么以以下数据位说明四种连接(不止四种):

    ac701964eecee1b3675bee7a2cd62d4f.png

    内连接(关键字Inner join)

    也叫自然连接,它将自动删除不满足dbo.CheckInfo_sys.UserName =dbo.User_sys.UserName条件的所有行。即删除两个表中没有匹配的行。其结果如下,即删除了用户表没有结过帐的用户5、老三、老四:

    c8e7c4bd92ca05017222fcd3374f4eb9.png

    左连接(关键字Left Join)

    左连接将保留User_sys(关键字左边那个表)的所有数据行,而用null值来填充CheckInfo表中没有匹配的记录。其结果如下:

    469ad4ebac2e50df30ddb9e427bc96c5.png

    右连接(关键字Right Join)

    右连接将保留CheckInfo_sys表的所有数据而用null值填充User_sys中没有的记录值。这里不再举例!

    交叉连接(关键字Cross Join)

    交叉连接实际上是一个笛卡尔集,即两个集合内符合条件的记录都匹配一次成为一条新记录。相当于一个二维数组!可以自己琢磨一下,这里也不再举例。

    以上方式创建的视图是来自不同的表的列的纵向拼接,那么还可以进行横向拼接。这里是数据表的纵向和横向划分的逆过程。这种方式创建视图首先表结构必须一致,其次不以On来表达条件。因此用可视化的方式建立不是很方便。横向拼接也有多种方式两种方式:Not in、Union和Intersect。这里只做简单介绍,Not in是去两个结果集的差集。Union是两个集合的并集,会自动删除重复的记录,也可以用Union All来保留所有记录行。Intersect是两个集合的交集,即同时存在于两个集合中的记录。

    那么,一般情况下试图的建立基于连接关系,即纵向拼接。可以应对一对多,一对一的关系。而对于多对多的关系,建立视图时需要做一定的处理(不会)。有时候,也可以用横向拼接的方式来建立视图,当然这种情况不多见(就我目前而言),同时也觉得这种方式不是很合理。不过对于存在索引表的大系统也许有时候有效。估计目前也就我自己遇到过横向拼接的情况。这篇博客写的不是很清楚,若不理解我的意思还希望直接交流!

    读《程序员的SQL金典》[3]--表连接、子查询

    一.表连接-JOIN 1. 自连接实例 查询类型相同的订单信息. SELECT O1 .*,O2.* FROM T_Order O1 JOIN T_Order O2 ON O1 .FTypeId= O ...

    SQL Server三种表连接原理

    在SQL Server数据库中,查询优化器在处理表连接时,通常会使用一下三种连接方式: 嵌套循环连接(Nested Loop Join) 合并连接 (Merge Join) Hash连接 (Hash ...

    SQL Server中多表连接时驱动顺序对性能的影响

    本文出处:http://www.cnblogs.com/wy123/p/7106861.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...

    SQl Server 数据库多表连接

    [缘由] 为了防止数据的冗余,我们会将数据库中表进行拆分,这样就产生了多张表,表与表之间通过主外键关联,但这样又造成了我们查找和修改的困难,如何进行多表之间的查找呢? 我们将一个查询同时设计两个或两个 ...

    sql server 实现多表连接查询

    项目中要实现多表查询,用外连接实现. a表 a(aid,aname) 其中aid为pk b表 b(aid,bname,aid) 其中 bid为pk,aid为fk c表 c(cid,cname,aid) ...

    SQL Server 2012 - 多表连接查询

    -- 交叉连接产生笛卡尔值 (X*Y) SELECT * FROM Student cross Join dbo.ClassInfo --另外一种写法 SELECT * FROM Student , ...

    MySQL多表连接

    主要分3种:内连接,外连接,交叉连接 其        他:联合连接,自然连接 1.内联接 典型的联接运算,使用像 =  或 <> 之类的比较运算).包括相等联接和自然联接. 内联接使用比 ...

    Mysql表连接查询

    更多相关内容
  • 创建视图SQL:在SQL Server中创建视图

    万次阅读 2020-07-17 13:42:32
    介绍 (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 approa...

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

    展开全文
  • sql 视图嵌套视图_SQL视图

    千次阅读 2020-08-03 03:06:37
    sql 视图嵌套视图 SQL | 观看次数 (SQL | Views) Views in SQL are virtual tables. A view also has rows and columns as they're during a real table within the database. We will create a view by selecting ...

    sql 视图嵌套视图

    SQL | 观看次数 (SQL | Views)

    Views in SQL are virtual tables. A view also has rows and columns as they're during a real table within the database. We will create a view by selecting fields from one or more tables present within the database. A View can either have all the rows of a table or specific rows supported under certain conditions. A view is nothing quite a SQL statement that's stored within the database with an associated name. A view is a composition of a table within the sort of a predefined SQL query. All rows of a table or select rows from a table can be contained inside the view. A view is often created from one or many tables which depend on the written SQL query to make a view.

    SQL中的视图是虚拟表视图还具有行和列,就像它们在数据库中的真实表中一样。 我们将通过从数据库中存在的一个或多个表中选择字段来创建视图。 视图可以具有表的所有行或在特定条件下受支持的特定行。 视图只不过是存储在数据库中且具有关联名称SQL语句。 视图是预定义SQL查询中的表的组成。 表的所​​有行或表中的选择行都可以包含在视图内部。 通常从一个或多个表创建视图,这些表取决于编写SQL查询来创建视图。

    Views, which are a kind of virtual tables allow users to try to the subsequent:

    视图是一种虚拟表,允许用户尝试以下操作:

    1. Structure data during a way that users or classes of users find natural or intuitive.

      在用户或用户类别觉得自然或直观的方式下构造数据。

    2. Restrict access to the info in such a way that a user can see and (sometimes) modify exactly what they have and no more.

      限制访问信息的方式,使用户可以看到和(有时)准确地修改自己拥有的内容,而不再修改。

    3. Summarize data from various tables which may be wont to generate reports.

      汇总来自各种表的数据,这些数据可能不会生成报告。

    Here we will discuss creating, deleting and updating views.

    在这里,我们将讨论创建,删除和更新视图。

    创建视图 (Creating the view)

    Views can be created in SQL by using the CREATE VIEW command. This order gives the name to the view and determines the rundown of credits and tuples to be incorporated utilizing a subquery.

    可以使用CREATE VIEW命令在SQL中创建视图 。 该顺序为视图指定名称,并使用子查询确定要合并的学分和元组的精简。

    The syntax to create a view is given here,

    这里给出了创建视图的语法,

    CREATE VIEW <view_name>
    As <subquery>;
    
    

    For example, the command to create a view containing details of books which belong to text-book and Language Book can be specified as:

    例如,用于创建包含教科书和语言书的书的详细信息的视图的命令可以指定为:

    CREATE VIEW Book_1
    As SELECT *
    FROM BOOK
    WHERE Category IN ('Textbook','LanguageBook');
    
    

    Output

    输出量

    SQL | View Example 1

    This command creates the view, named Book_1, having details of books satisfying the condition specified in the WHERE clause. The view created like this consists of all the attributes of Book relation also.

    此命令创建名为Book_1的视图,该视图具有满足WHERE子句中指定条件的书籍的详细信息。 这样创建的视图也包含Book关系的所有属性。

    For example, consider the command given below:

    例如,考虑以下命令:

    CREATE VIEW Book_2(B_code,B_title,B_category,B_price)
    As SELECT ISBN,Book_Tiltle,Category,Price
    FROM Book
    WHERE Category IN ('Textbook','LanguageBook');
    
    

    Output

    输出量

    SQL | View Example 2

    This command creates a view Book_2, which consists of the attributes, ispn, book-name, categori, and price from the relation Book with new names, namely, b_code, b_title, b_category, and b_price respectively. Now queries can be performed on these views as they are performed on other relations.

    此命令创建一个视图Book_2 ,该视图由关系Book中的属性ispn , book-name , categori和price组成,具有新名称,分别为b_code , b_title , b_category和b_price 。 现在,可以在这些视图上执行查询,就像在其他关系上执行查询一样。

    Consider the example given below:

    考虑下面给出的示例:

    SELECT *
    FROM Book_1;
    
    

    Output

    输出量

    SQL | View Example 3
    SELECT *
    FROM Book_2
    WHERE price>300;
    
    

    Output

    输出量

    SQL | View Example 4
    SELECT b_title, b_category
    FROM Book_2
    WHERE price BETWEEN 200 and 350;
    
    

    Output

    输出量

    SQL | View Example 5

    Views can contain more than one relation. The views that depend on more than one relation are known as complex views. These types of views are inefficient as they are time-consuming to execute, especially if multiple queries are involved in the view definition. Since their content is not physically stored, they are executed whenever their reference is done inside the program.

    视图可以包含多个关系。 依赖于多个关系的视图称为复杂视图 。 这些类型的视图效率低下,因为它们执行起来很耗时,尤其是在视图定义中涉及多个查询的情况下。 由于它们的内容不是物理存储的,因此只要在程序内部完成引用就可以执行它们。

    更新视图 (Updating Views)

    A view can be updated based upon several conditions as mentioned below,

    可以根据以下几种条件来更新视图,

    • Keyword DISTINCT should not be present in the SELECT statement.

      关键字DISTINCT不应出现在SELECT语句中。

    • The summary function should not be there in the SELECT statement.

      摘要函数不应在SELECT语句中存在。

    • Set function and Set Operations should not be present in the SELECT statement.

      设置函数和设置操作不应出现在SELECT语句中。

    • ORDER BY clause should not be present in the SELECT statement.

      SELECT语句中不应存在ORDER BY子句。

    • Multiple tables should not be contained in the FROM statement.

      FROM语句中不应包含多个表。

    • Subqueries should not be present inside the WHERE clause.

      子查询不应出现在WHERE子句中。

    • A query written in SQL must not contain GROUP BY or HAVING.

      用SQL编写的查询不得包含GROUP BYHAVING

    • Columns that are calculated may not get updated.

      计算的列可能不会更新。

    If the view satisfies the above-mentioned conditions then the user or programmer is able to update the view. The code written below can be used for serving the purpose.

    如果该视图满足上述条件,则用户或程序员可以更新该视图。 下面编写的代码可用于实现此目的。

    UPDATE <Name of VIEW>
    SET <parameter to be updated>=<value>
    WHERE <condition>;
    
    

    放下视图 (Dropping View)

    The view needs to be dropped (i.e. Deleted permanently) when not in further use. The syntax for doing so is,

    不使用该视图时,需要将其删除(即永久删除)。 这样做的语法是

    DROP VIEW <view_name>;
    
    
    

    翻译自: https://www.includehelp.com/sql/views.aspx

    sql 视图嵌套视图

    展开全文
  • Access查询中SQL视图的切换
  • 学习过Access的读者可能知道,access设计视图有一个很不错的功能-----设计列的注释,这可以让设计者清楚地看到每个列的意义。一般的SQL Server建表时没有这个功能,但是他有扩展属性,这个功能也不错,可以把注释写...
  • 在连接到 Microsoft SQL Server 数据库的 Microsoft Access 项目 (Microsoft Access 项目:与 Microsoft SQL Server 数据库连接且用于创建客户/服务器应用程序的 Access 文件。项目文件中不包含...
  • SQLServer之创建索引视图

    万次阅读 2018-10-25 16:00:54
     为视图创建唯一聚集索引可以提高查询性能,因为视图在数据库中的存储方式与具有聚集索引的表的存储方式相同。 查询优化器可使用索引视图加快执行查询的速度。 要使优化器考虑将该视图作为替换,并不需要在查询中...

    索引视图创建注意事项

    对视图创建的第一个索引必须是唯一聚集索引。 创建唯一聚集索引后,可以创建更多非聚集索引。 为视图创建唯一聚集索引可以提高查询性能,因为视图在数据库中的存储方式与具有聚集索引的表的存储方式相同。 查询优化器可使用索引视图加快执行查询的速度。 要使优化器考虑将该视图作为替换,并不需要在查询中引用该视图。

    索引视图中列的 large_value_types_out_of_row 选项的设置继承的是基表中相应列的设置。 此值是使用 sp_tableoption设置的。从表达式组成的列的默认设置为 0。 这意味着大值类型存储在行内。

    可以对已分区表创建索引视图,并可以由其自行分区。

    若要防止 数据库引擎 使用索引视图,请在查询中包含 OPTION (EXPAND VIEWS) 提示。 此外,任何所列选项设置不正确均会阻止优化器使用视图上的索引。 有关 OPTION (EXPAND VIEWS) 提示的详细信息,请参阅 SELECT (Transact-SQL)。

    若删除视图,该视图的所有索引也将被删除。 若删除聚集索引,视图的所有非聚集索引和自动创建的统计信息也将被删除。 视图中用户创建的统计信息受到维护。 非聚集索引可以分别删除。 删除视图的聚集索引将删除存储的结果集,并且优化器将重新像处理标准视图那样处理视图。

    可以禁用表和视图的索引。 禁用表的聚集索引时,与该表关联的视图的索引也将被禁用。

    索引视图创建要求

    创建索引视图需要执行下列步骤并且这些步骤对于成功实现索引视图而言非常重要:

    1. 验证是否视图中将引用的所有现有表的 SET 选项都正确。

    2. 在创建任意表和视图之前,验证会话的 SET 选项设置是否正确。

    3. 验证视图定义是否为确定性的。

    4. 使用 WITH SCHEMABINDING 选项创建视图。

    5. 为视图创建唯一的聚集索引。

    索引视图所需的 SET 选项

    如果执行查询时启用不同的 SET 选项,则在 数据库引擎 中对同一表达式求值会产生不同结果。 例如,将 SET 选项 CONCAT_NULL_YIELDS_NULL 设置为 ON 后,表达式 ' abc ' + NULL 会返回值 NULL。 但将 CONCAT_NULL_YIEDS_NULL 设置为 OFF 后,同一表达式会生成 ' abc '。

    为了确保能够正确维护视图并返回一致结果,索引视图需要多个 SET 选项具有固定值。 下表中的 SET 选项必须设置中显示的值为RequiredValue列出现以下情况时:

    • 创建视图和视图上的后续索引。

    • 在创建表时,在视图中引用的基表。

    • 对构成该索引视图的任何表执行了任何插入、更新或删除操作。 此要求包括大容量复制、复制和分布式查询等操作。

    • 查询优化器使用该索引视图生成查询计划。

      SET 选项必需的值默认服务器值,则“默认”

      OLE DB 和 ODBC 值
      ,则“默认”

      DB-Library 值
      ANSI_NULLSONONONOFF
      ANSI_PADDINGONONONOFF
      ANSI_WARNINGS*ONONONOFF
      ARITHABORTONONOFFOFF
      CONCAT_NULL_YIELDS_NULLONONONOFF
      NUMERIC_ROUNDABORTOFFOFFOFFOFF
      QUOTED_IDENTIFIERONONONOFF

      *将 ANSI_WARNINGS 设置为 ON 隐式将 ARITHABORT 设置为 ON。

      如果使用的是 OLE DB 或 ODBC 服务器连接,则唯一必须要修改的值是 ARITHABORT 设置。 必须使用 sp_configure 在服务器级别或使用 SET 命令从应用程序中正确设置所有 DB-Library 值。极力建议在服务器的任一数据库中创建计算列的第一个索引视图或索引后,尽早在服务器范围内将 ARITHABORT 用户选项设置为 ON。

    确定性视图

    索引视图的定义必须是确定性的。 如果选择列表中的所有表达式、WHERE 和 GROUP BY 子句都具有确定性,则视图也具有确定性。 在使用特定的输入值集对确定性表达式求值时,它们始终返回相同的结果。 只有确定性函数可以加入确定性表达式。 例如,DATEADD 函数是确定性函数,因为对于其三个参数的任何给定参数值集它总是返回相同的结果。 GETDATE 不是确定性函数,因为总是使用相同的参数调用它,而它在每次执行时返回结果都不同。

    要确定视图列是否为确定性列,请使用 COLUMNPROPERTY 函数的 IsDeterministic 属性。 使用 COLUMNPROPERTY 函数的 IsPrecise 属性确定具有架构绑定的视图中的确定性列是否为精确列。 如果为 TRUE,则 COLUMNPROPERTY 返回 1;如果为 FALSE,则返回 0;如果输入无效,则返回 NULL。 这意味着该列不是确定性列,也不是精确列。

    即使是确定性表达式,如果其中包含浮点表达式,则准确结果也会取决于处理器体系结构或微代码的版本。 为了确保数据完整性,此类表达式只能作为索引视图的非键列加入。 不包含浮点表达式的确定性表达式称为精确表达式。 只有精确的确定性表达式才能加入键列,并包含在索引视图的 WHERE 或 GROUP BY 子句中。

    其他要求

    除对 SET 选项和确定性函数的要求外,还必须满足下列要求:

      • 执行 CREATE INDEX 的用户必须是视图所有者。

      • 创建索引时,IGNORE_DUP_KEY 选项必须设置为 OFF(默认设置)。

      • 在视图定义中,表必须由两部分组成的名称(即 schema.tablename**)引用。

      • 必须已使用 WITH SCHEMABINDING 选项创建了在视图中引用的用户定义函数。

      • 视图中引用的任何用户定义函数都必须由两部分组成的名称(即 schema.function**)引用。

      • 用户定义函数的数据访问属性必须为 NO SQL,外部访问属性必须是 NO。

      • 公共语言运行时 (CLR) 功能可以出现在视图的选择列表中,但不能作为聚集索引键定义的一部分。 CLR 函数不能出现在视图的 WHERE 子句中或视图中的 JOIN 运算的 ON 子句中。

      • 在视图定义中使用的 CLR 函数和 CLR 用户定义类型方法必须具有下表所示的属性设置。

        “属性”注意
        DETERMINISTIC = TRUE必须显式声明为 Microsoft .NET Framework 方法的属性。
        PRECISE = TRUE必须显式声明为 .NET Framework 方法的属性。
        DATA ACCESS = NO SQL通过将 DataAccess 属性设置为 DataAccessKind.None 并将 SystemDataAccess 属性设置为 SystemDataAccessKind.None 来确定。
        EXTERNAL ACCESS = NO对于 CLR 例程,该属性的默认设置为 NO。
      • 必须使用 WITH SCHEMABINDING 选项创建视图。

      • 视图必须仅引用与视图位于同一数据库中的基表。 视图无法引用其他视图。

      • 视图定义中的 SELECT 语句不能包含下列 Transact-SQL 元素:

           
        COUNTROWSET 函数(OPENDATASOURCE、OPENQUERY、OPENROWSET 和 OPENXML)OUTER 联接(LEFT、RIGHT 或 FULL)
        派生表(通过在 FROM 子句中指定 SELECT 语句来定义)自联接通过使用 SELECT * 或 SELECT table_name来指定列。*
        DISTINCTSTDEV、STDEVP、VAR、VARP 或 AVG公用表表达式 (CTE)
        float*text, ntext, image, XML,或filestream子查询包括排名或聚合开窗函数的 OVER 子句
        全文谓词(CONTAIN、FREETEXT)引用可为 Null 的表达式的 SUM 函数ORDER BY
        CLR 用户定义聚合函数返回页首CUBE、ROLLUP 或 GROUPING SETS 运算符
        MIN、MAXUNION、EXCEPT 或 INTERSECT 运算符TABLESAMPLE
        表变量OUTER APPLY 或 CROSS APPLYPIVOT、UNPIVOT
        稀疏列集内联或多语句表值函数OFFSET
        CHECKSUM_AGG  

        *索引的视图可以包含float列; 但是,不能在聚集的索引键中包含此类列。

      • 如果存在 GROUP BY,则 VIEW 定义必须包含 COUNT_BIG(*),并且不得包含 HAVING。 这些 GROUP BY 限制仅适用于索引视图定义。 即使一个索引视图不满足这些 GROUP BY 限制,查询也可以在其执行计划中使用该视图。

      • 如果视图定义包含 GROUP BY 子句,则唯一聚集索引的键只能引用 GROUP BY 子句中指定的列。

    使用SSMS数据库管理工具创建索引视图

    1、连接数据库,选择数据库,展开数据库-》右键视图-》选择新建视图。

    2、在添加表弹出框-》选择要创建视图的表、视图、函数、或者同义词等-》点击添加-》添加完成后选择关闭。

    3、在关系图窗格中-》选择表与表之间关联的数据列-》选择列的其他排序或筛选条件。

    4、右键点击空白处-》选择属性。

    5、在视图属性窗格-》绑定到架构选择是-》非重复值选择是。

    6、点击保存或者ctrl+s-》查看新创建的视图。

    7、在对象资源管理器窗口-》展开视图-》选择视图-》右键点击索引-》选择新建索引-》选择聚集索引。

    8、在新建索引弹出框-》选择索引数据列-》索引创建步骤可以参考本博主的创建索引博文-》点击确定(创建唯一聚集索引之后才能创建非聚集索引)。

    9、在对象资源管理器中查看视图中的索引。

    10、刷新视图-》可以创建非聚集索引,步骤同创建聚集索引(此处省略创建非聚集索引)。

    11、点击保存或者ctrl+s-》刷新视图-》查看结果。

    12、使用视图。

    使用T-SQL脚本创建索引视图

    语法:

    --声明数据库引用
    use 数据库;
    go

    --判断视图是否存在,如果存在则删除
    if exists(select * from sys.views where name=视图名称)
    drop view 视图名称;
    go

    --创建视图
    create
    view

    --视图所属架构的名称。
    --[schema_name][.]

    --视图名称。 视图名称必须符合有关标识符的规则。 可以选择是否指定视图所有者名称。
    [dbo][.]视图名称

    --视图中的列使用的名称。 仅在下列情况下需要列名:列是从算术表达式、函数或常量派生的;两个或更多的列可能会具有相同的名称(通常是由于联接的原因);视图中的某个列的指定名称不同于其派生来源列的名称。 还可以在 SELECT 语句中分配列名。
    --如果未指定 column,则视图列将获得与 SELECT 语句中的列相同的名称。
    --column

    with

    --适用范围: SQL Server 2008 到 SQL Server 2017 和 Azure SQL Database。
    --对 sys.syscomments 表中包含 CREATE VIEW 语句文本的项进行加密。 使用 WITH ENCRYPTION 可防止在 SQL Server 复制过程中发布视图。
    --encryption,

    --将视图绑定到基础表的架构。 如果指定了 SCHEMABINDING,则不能按照将影响视图定义的方式修改基表或表。 必须首先修改或删除视图定义本身,才能删除将要修改的表的依赖关系。
    --使用 SCHEMABINDING 时,select_statement 必须包含所引用的表、视图或用户定义函数的两部分名称 (schema.object)。 所有被引用对象都必须在同一个数据库内。
    --不能删除参与了使用 SCHEMABINDING 子句创建的视图的视图或表,除非该视图已被删除或更改而不再具有架构绑定。 否则, 数据库引擎将引发错误。 
    --另外,如果对参与具有架构绑定的视图的表执行 ALTER TABLE 语句,而这些语句又会影响视图定义,则这些语句将会失败。
    schemabinding

    --指定为引用视图的查询请求浏览模式的元数据时, SQL Server 实例将向 DB-Library、ODBC 和 OLE DB API 返回有关视图的元数据信息,而不返回基表的元数据信息。 
    --浏览模式元数据是 SQL Server 实例向这些客户端 API 返回的附加元数据。 如果使用此元数据,客户端 API 将可以实现可更新客户端游标。 浏览模式的元数据包含结果集中的列所属的基表的相关信息。
    --对于使用 VIEW_METADATA 创建的视图,浏览模式的元数据在描述结果集内视图中的列时,将返回视图名,而不返回基表名。
    --当使用 WITH VIEW_METADATA 创建视图时,如果该视图具有 INSTEAD OF INSERT 或 INSTEAD OF UPDATE 触发器,则视图的所有列(timestamp 列除外)都可更新。 有关可更新视图的详细信息,请参阅“备注”。
    --view_metadata

    --指定视图要执行的操作。
    as
    select_statement
    go

    --创建索引详情请参考索引博客
    if not exists (select * from sys.indexes where name=索引名称)
    --设置索引
    create
    unique
    clustered 
    index 
    索引名称
    on 
    dbo.视图名
    (列名 [ asc | desc],列名  [ asc | desc],......);
    go

    示例:本示例演示在视图上创建一个唯一聚集索引。

    --声明数据库引用
    use testss;
    go

    --判断视图是否存在,如果存在则删除
    if exists(select * from sys.views where name='indexview1')
    drop view indexview1;
    go

    --创建视图
    create
    view

    --视图所属架构的名称。
    --[schema_name][.]

    --视图名称。 视图名称必须符合有关标识符的规则。 可以选择是否指定视图所有者名称。
    dbo.indexview1

    --视图中的列使用的名称。 仅在下列情况下需要列名:列是从算术表达式、函数或常量派生的;两个或更多的列可能会具有相同的名称(通常是由于联接的原因);视图中的某个列的指定名称不同于其派生来源列的名称。 还可以在 SELECT 语句中分配列名。
    --如果未指定 column,则视图列将获得与 SELECT 语句中的列相同的名称。
    --column

    with

    --适用范围: SQL Server 2008 到 SQL Server 2017 和 Azure SQL Database。
    --对 sys.syscomments 表中包含 CREATE VIEW 语句文本的项进行加密。 使用 WITH ENCRYPTION 可防止在 SQL Server 复制过程中发布视图。
    --encryption,

    --将视图绑定到基础表的架构。 如果指定了 SCHEMABINDING,则不能按照将影响视图定义的方式修改基表或表。 必须首先修改或删除视图定义本身,才能删除将要修改的表的依赖关系。
    --使用 SCHEMABINDING 时,select_statement 必须包含所引用的表、视图或用户定义函数的两部分名称 (schema.object)。 所有被引用对象都必须在同一个数据库内。
    --不能删除参与了使用 SCHEMABINDING 子句创建的视图的视图或表,除非该视图已被删除或更改而不再具有架构绑定。 否则, 数据库引擎将引发错误。 
    --另外,如果对参与具有架构绑定的视图的表执行 ALTER TABLE 语句,而这些语句又会影响视图定义,则这些语句将会失败。
    schemabinding

    --指定为引用视图的查询请求浏览模式的元数据时, SQL Server 实例将向 DB-Library、ODBC 和 OLE DB API 返回有关视图的元数据信息,而不返回基表的元数据信息。 
    --浏览模式元数据是 SQL Server 实例向这些客户端 API 返回的附加元数据。 如果使用此元数据,客户端 API 将可以实现可更新客户端游标。 浏览模式的元数据包含结果集中的列所属的基表的相关信息。
    --对于使用 VIEW_METADATA 创建的视图,浏览模式的元数据在描述结果集内视图中的列时,将返回视图名,而不返回基表名。
    --当使用 WITH VIEW_METADATA 创建视图时,如果该视图具有 INSTEAD OF INSERT 或 INSTEAD OF UPDATE 触发器,则视图的所有列(timestamp 列除外)都可更新。 有关可更新视图的详细信息,请参阅“备注”。
    --view_metadata

    --指定视图要执行的操作。
    as
    select a.id,a.age,a.height,a.name,b.id as classid from dbo.test1 as a
    inner join dbo.test3 as b on a.classid=b.id
    --要求对该视图执行的所有数据修改语句都必须符合 select_statement 中所设置的条件。 通过视图修改行时,WITH CHECK OPTION 可确保提交修改后,仍可通过视图看到数据。
    --with check option;
    go


    if not exists (select * from sys.indexes where name='umiqueindexview1')
    --设置索引
    create
    unique
    clustered 
    index 
    umiqueindexview1
    on 
    dbo.indexview1
    (name asc);
    go

    示例结果:因为数据量太小,查询时间和效果不是很明显。

    展开全文
  • Access create view ADOX.View C#中 动态创建access里的 '查询' 可看作视图 直接在程序中 执行相关语句 就可以创建 access 中的 查询了
  • SQL语法(包括建库、建表、建视图、查询、增加、删除、修改)SQL分类:DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)DCL—数据控制语言(GRANT,REVOKE,COMMIT...
  • 数据库视图 sql

    千次阅读 2021-01-28 08:08:21
    数据库必知词汇:数据库视图视图是从一个或几个基本表(或视图)中导出的虚拟的表。在系统的数据字典中仅存放了视图的定义,不存放视图对应的数据。...文章萌萌怪兽2020-02-23113浏览量数据库优化之创建视图视图是...
  • 1.1.1.概述在SQL中,数据定义语言( DDL ) 用来创建和修改数据库Schema,例如表、索引和用户等。其中数据库的Schema描述了用户数据模型、字段和数据类型。DDL 语句类似于用于定义数据结构的计算机编程语言。常见DDL ...
  • ACCESS创建视图

    千次阅读 2014-04-30 17:48:00
    ACCESS创建视图详解图 1.在编辑器中点击左边“对象”下的“查询”,在右边右键打开 2.随意添加两个表 3 右击连线,双击”联接属性”,4点击下图中的”新建” 5新建一对关联 6然后点击原有的关联...
  • spark-sql createOrReplaceTempView 和createGlobalTempView区别 Spark Application Spark Application 使用: 针对单个批处理作业 ...createOrReplaceTempView:创建临时视图,此视图的生命周期与用于创建.
  • 从ADO / OleDb执行时,Access支持CREATE VIEW.此代码段有效,因为CurrentProject.Connection是一个ADO对象…Dim strSql As StringstrSql = "CREATE VIEW NHTrips AS" & vbCrLf & _"SELECT TripID, TripName, ...
  • Access 数据库导入到SQL Server 2000

    千次阅读 2022-02-11 10:48:42
    2、创建系统DSN:系统DSN—添加; 3、添加新的数据源:选”Driver do microsoft Access (*.mdb)”,在弹出的对话框里输入数据源的名字: 4、点击“选择”按钮— 寻找你的数据库地址和选中(注意,请先备份自己的...
  • 如何在Access中打开SQL视图,对于初次使用Access的程序员可得费点时间呢。  1、ACESS2007  (1)点击“创建”–点击 “查询设计”  (2)点击关闭  (3)点击左上角的SQL视图可以打开SQL窗口了 ...
  • access2007中使用sql视图设置

    千次阅读 2012-07-05 16:03:17
    1, 点击创建菜单(Create) 2,选择查询设计(QueryDesign) 3,添加表, 右键点击, 选择sql视图 4,或点击菜单Home,在view的下拉框中选择
  • 其次,以数据驱动、Access 的最小化代码设计思想为指导,大量采用逻辑视图实现数据处理功能,从而使展示窗体的 VBA 代码减少。其中,还使用 SQL 语言对心理问卷量表的非均值评分、复杂分值计算进行了实现。 最后,...
  • Access操作与SQL语句:数据分组

    千次阅读 2020-05-05 11:14:31
    将编写好的SQL语句复制到新建的查询SQL视图窗口中,单击【运行】,得到如下结果: 2. CHOOSE函数 与Excel中的CHOOSE函数用法与功能一样。语法如下: CHOOSE(参数,结果1,结果2,……,结果N) 说明: 参数可为数字或...
  • 可以间接方式创建只读视图创建对所有表具有SELECT权限的用户和CREATE VIEW权限然后使用此用户创建视图并在CREATE VIEW语句中指定SQL SECURITY DEFINER:CREATEDEFINER = CURRENT_USERSQL SECURITY DEFINERVIEW Emp...
  • Access操作与SQL语句:重复数据处理

    千次阅读 2020-05-05 14:58:59
    那么,在Access中,处理重复数据的方法包含重复项查询、不重复项查询以及数据去重查询,同样可以通过菜单操作、SQL语句两种方式完成。 重复项查询 1. 菜单操作法 在新建简单查询时,对话框中就有一项“查找重复项...
  • sqlserver创建视图索引

    千次阅读 2022-01-25 13:02:13
    视图创建唯一聚集索引可以提高查询性能,因为视图在数据库中的存储方式与具有聚集索引的表的存储方式相同。 查询优化器可使用索引视图加快执行查询的速度。 要使优化器考虑将该视图作为替换,并不需要在查询中...
  • Access操作与SQL语句:数据合并

    千次阅读 2020-05-04 17:17:43
    SQL查询法 在刚才的Access数据库查询结果窗口中,单击Access数据库窗口最右下方的SQL按钮。 点开后,如下所示: 这一条SQL语句的意思是:选择查询“订购明细”表的“用户ID”、“产品”字段,以及相对应的“用户...
  • 更改代码中服务器名称和数据库: Public Sub Connection_String() ConnectionString = "Provider=sqloledb;Data Source=服务器名称;Initial Catalog=数据库;...可查看SQL服务中表\视图名称\结构和数据
  • Access创建SQL语句

    2017-03-13 10:31:50
    创建-查询语句,弹出框框关掉;选择SQL视图即可。
  • 1.点击左上角的“创建”--“查询设计” 2.随意添加两个表 3 右击连线,双击”联接属性” ...7在查询框的空白处右击查看sql查询可以看到生成的sql语句,选择要显示的数据 8执行并保存查询结果.即生成所要的视图,当然
  • 易飞ERP多阶BOM展阶SQL语句,可以添加可视图,方便二开或做报表调用
  • 亲测有效,第一句是SQL server 语句 第二条是access中的SQL写法 紫松哥哥专注于技术交流,QQ:2609715119
  • 打开Access中的SQL视图

    千次阅读 2009-01-14 11:37:00
    打开Access中的SQL视图,连接。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 54,715
精华内容 21,886
热门标签
关键字:

利用access的sql视图可以创建