时间:2021-05-26
在关系数据库里,我们处理的数据通常跨越了几个数据表。举例:当展示产品信息时我们很可能想列出每个产品相应的category以及供应商的名称等.诚然,Products表里包含有CategoryID 和SupplierID值,但是事实上的category以及supplier names分别定义在Categories表和Suppliers表里. 要从其它的相关表里获取信息,我们可以使用correlated subqueries或JOINs.一条correlated subquerie就是一个镶套的SELECT,引用外部查询(outer query)的列.比如在第一章《创建一个数据访问层》里我们在ProductsTableAdapter的主查询里使用2条correlated subqueries来返回每个产品的category 以及supplier names.而JOIN是一SQL构造,将2个不同的表的相关联的rows进行合并.在第46章《使用SqlDataSource控件检索数据》里,我们使用JOIN来显示每个产品的category信息.
我们避免在TableAdapters里使用JOIN是由于TableAdapter向导自动生成的INSERT, UPDATE,以及DELETE statements有其局限性.具体来说,如果TableAdapter的主查询里包含了任何的JOIN,那么TableAdapter就不能为它的InsertCommand, UpdateCommand,以及DeleteCommand属性自动地创建 ad-hoc SQL statements或存储过程.在开始之前,我们先简要地对correlated subqueries和JOIN进行比较.
比较Correlated Subqueries和JOINs
我们知道在第一章的Northwind DataSet数据集里创建的ProductsTableAdapter使用correlated subqueries来返回每个产品对应的category 和 supplier name。该ProductsTableAdapter的主查询如下:
SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued, (SELECT CategoryName FROM Categories WHERE Categories.CategoryID = Products.CategoryID) as CategoryName, (SELECT CompanyName FROM Suppliers WHERE Suppliers.SupplierID = Products.SupplierID) as SupplierNameFROM Products我们注意这2个correlated subqueries——“(SELECT CategoryName FROM Categories WHERE Categories.CategoryID = Products.CategoryID)” 以及“(SELECT CompanyName FROM Suppliers WHERE Suppliers.SupplierID = Products.SupplierID),都是一个SELECT查询,返回一个单一值,并作为外部SELECT statement的额外的列.
此外,我们可以使用JOIN来返回每个产品的supplier 以及category name,下面的查询与上面的代码效果一样,不过用的是JOIN:
SELECT ProductID, ProductName, Products.SupplierID, Products.CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued, Categories.CategoryName, Suppliers.CompanyName as SupplierNameFROM Products LEFT JOIN Categories ON Categories.CategoryID = Products.CategoryID LEFT JOIN Suppliers ON Suppliers.SupplierID = Products.SupplierIDJOIN基于某种标准将一个表的记录与另一个表的记录合并起来.比如上述代码中,“LEFT JOIN Categories ON Categories.CategoryID = Products.CategoryID”就指示SQL Server将每一条product记录与category记录合并起来,标准是category记录的CategoryID值与product记录CategoryID值相吻合.在合并的结果里,我们可以对每个产品相应的category fields进行处理(比如CategoryName).
注意:JOIN通常用来从相关的数据库查询数据.如果你对JOIN语法比较陌生或者对其用法复习提高,我推荐你阅读W3 Schools论坛上的文章《SQL Join tutorial》(http://的创始人,自1998年以来一直应用 微软Web技术。大家可以点击查看全部教程《[翻译]Scott Mitchell 的ASP.NET 2.0数据教程》,希望对大家的学习ASP.NET有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
要想在ASP.NET项目中使用SQLite数据库,先需下载一个ADO.NET2.0SQLiteDataProvider,下载地址为:http://sourcef
为什么学习ASP.NET内置对象在ASP.NET中微软提供了多种内置对象提供开发人员使用,在实际开发中内置对象的使用不可或缺的,在Web网站的数据交互,网页服务
asp.net操作access数据库是常见的数据库操作应用,本文就来实例讲解一下asp.net实现access数据库分页的方法。希望对大家的asp.net程序设
这是一个实际应用中的类,代码出自HoverTree项目,适用与.NET平台,一般在ASP.NET中使用。效果可以在HoverTree官网看到。/*在HoverT
最新在将原来写的一些webSerivce转换为WebApi,直接就用了ASP.NetCore2.0的框架,在使用中,发现的与原有的asp.net不同的地方,通过