SQL中的视图:从表组创建类表结构
SQL Server有一个名为“View”的对象,它允许您将数据拉到一起以创建与现有表中的表库数据集。您无法操纵您可以使用真实表格的数据。但是,如果您经常返回相同的数据,则可以将此数据设置为视图。在您的前端应用程序(例如网站或报告)中,此视图对象以与您使用表的方式相同。视图提高常用查询的性能,聚合大数据集,统一复杂查询并限制用户访问“真实”表。
创建一个视图
视图存储在与其相关的每个数据库中。假设您想为一个名为“store”的电子商务数据库创建一个视图。您将在这个数据库中创建您的视图。打开SQL Server Management Studio并通过单击数据库名称旁边的加号展开数据库。
右键单击“视图”图标并选择“新视图”。SQL Server有一个图形界面,可以帮助您创建视图而不是使用复杂的SQL编码来创建它们。以下窗口显示:
窗口默认为表列表。视图由表,其他视图,函数和同义词组成。通常,您将使用表和视图来创建视图。由于视图与表类似,因此您的视图将查询另一个视图,就像它是表数据集一样。在上面的视图中,您可以看到类似于电子商务存储的表列表。单击视图中要包含的每个表,然后单击“添加”。请注意,Designer在SQL Server Management Studio中将表添加到工作区。
单击“关闭”以关闭表窗口。您可以始终重新打开它并通过右键单击设计器并选择“添加表”来添加更多表格。现在您已准备好创建您的视图并与设计师一起使用。设计者窗口工作区看起来像以下图片:
请注意设计器如何在订单表和客户表之间建立链接。这个链接表明这两个表之间有一个关系。SQL Server是一个关系数据库,所以在大多数表中都有主键和外键的关系。在上面的示例中,CustomerId是客户表的主键。CustomerId作为外键存储在订单表中。有了主键和外键关系,设计器就会自动知道要将这两个表链接在一起。
使用udemy.com的课程了解SQL,数据库和结构化数据。
如果您在Designer的GUI下注意到,Management Studio也为您提供基本的SQL查询。在此示例中,“内部连接”语句是为该关系编写的。您注意到没有过滤器或“其中”子句。如果您现在运行此视图,所有客户和链接订单显示。如果您通常在SQL查询中使用此语句,则实际上可以使用此视图。但是,这个基本很少用于观点。视图为您提供创建大数据集的优势,因此您可以在数据集中具有10个,20个或更多列。由于您使用类似表的视图,因此您可以在查询此视图的SQL语句中写下您的“where”子句。
从表中指定列,拖放到中心面板的每个列。不要重复列。例如,不要从订单和客户表中拖放CustomerID列。这些列具有相同的数据,因此您只需要使用列一次。
注意上图中的中间面板。如果您使用Microsoft Access,您会注意到其格式类似于Access设计器。可以设置表列的数据类型。如果您在视图上使用函数或聚合函数,这是有用的。例如,假设您想要将所有客户的订单历史记录相加,这样您就可以查看客户向您订购的总金额。这使用了“sum”SQL聚合函数。SQL将尝试“猜测”列的数据类型,但您也可以在此面板中手动设置它。对于总收入或累加货币列,您可能希望使用money或decimal数据类型。您应该将数据类型与源列的数据类型匹配,以避免任何转换错误。例如,如果将数据类型设置为整数,但在列中使用了小数,那么在运行视图代码时SQL将返回一个错误。
您还可以在此面板中对您的视图进行排序。排序视图如果要使用原始数据显示关于报告的信息,则非常有用。您可以在多个列中排序。您还可以根据升序(这是默认值)或降序排序。“ASC”用于升序,“DESC”用于降序。
最后,如何查询新视图?在上面的示例中,视图基本上是客户和订单的列表。当您希望向客户显示当前和过去的订单列表时,您可以在前端代码中使用这种类型的查询。例如,假设客户Id 5想要查看他的所有订单。下面的代码使用上面的视图向客户显示订单列表:
从V_CustomersArders中选择*,其中CustomerId = 5
在上面的代码中,视图的名称是“v_CustomersAndOrders”。通常,视图的前缀是某种指示,如“视图”或“v_”。视图的数据集返回所有客户和订单,但是上面的查询只将结果数据集过滤为Id为5的客户。如果您在视图中对数据集进行了排序,那么数据就已经被排序了。如果不是,您必须在前端查询中对结果进行排序。
创建视图后,您可以在代码中自由使用它们,甚至可以在Management Studio工作区中使用它们。查看在数据库中提高性能,以获取大型数据集,因此在需要一次返回几列时,请结合视图。