MSSQL网页编程之怎样利用SQL Server嵌套子查询
提供用于管理、检查、优化数据库操作的管理工具。良多SQLServer程序员对子查询(subqueries)的利用感应狐疑,特别关于嵌套子查询(即子查询中包括一个子查询)。如今,就让我们追根究底地探求这个成绩。有两种子查询范例:尺度和相干。尺度子查询实行一次,了局反应给父查询。相干子查询每行实行一次,由父查询找回。在本文中,我将重点会商嵌套子查询(nestedsubqueries)(我将在今后先容相干子查询)。
试想这个成绩:你想天生一个卖平垫圈的发卖职员列表。你必要的数据分离在四个表格中:职员.接洽体例(Person.Contact),人力资本.员工(HumanResources.Employee),发卖.发卖定单题目(Sales.SalesOrderHeader),发卖.发卖定单概况(Sales.SalesOrderDetail)。在SQLServer中,你从内压式(outside-in)写程序,但从外压式(inside-out)入手下手思索十分有匡助,便可以一次办理必要的一个语句。
假如从内到外写起,能够反省Sales.SalesOrderDetail表格,在LIKE语句中婚配产物数(ProductNumber)值。你将这些行与Sales.SalesOrderHeader表格毗连,从中能够取得发卖职员IDs(SalesPersonIDs)。然后利用SalesPersonID毗连SalesPersonID表格。最初,利用ContactID毗连Person.Contact表格。
以下为援用的内容:
USEAdventureWorks;
GO
SELECTDISTINCTc.LastName,c.FirstName
FROMPerson.ContactcJOINHumanResources.Employeee
ONe.ContactID=c.ContactIDWHEREEmployeeIDIN
(SELECTSalesPersonID
FROMSales.SalesOrderHeader
WHERESalesOrderIDIN
(SELECTSalesOrderID
FROMSales.SalesOrderDetail
WHEREProductIDIN
(SELECTProductID
FROMProduction.Productp
WHEREProductNumberLIKEFW%)));
GO
这个例子展现了有关SQLServer的几个尽妙事变。你能够发明,能够用IN()参数替换SELECT语句。在本例中,有两次使用,因而创立了一个嵌套子查询。
我是尺度化(normalization)的发热友,只管我不承受其荒唐的长度。因为尺度化具有各类查询而增添了庞大性。在这些情形下子查询就显得十分有效,嵌套子查询乃至加倍有效。
当你必要的成绩分离于良多表格中时,你必需再次将它们拼在一同,这时候你大概发明嵌套子程序就很有效。
如果WHERE子句的查询条件里使用比较操作符LIKE和REGEXP,MySQL只有在搜索模板的第一个字符不是通配符的情况下才能使用索引。比如说,如果查询条件是LIKEabc%‘,MySQL将使用索引;如果查询条件是LIKE%abc’,MySQL将不使用索引。 你觉得我的非分区索引无法对起子分区,你可以提醒我一下呀!没有任何的提醒,直接就变成了非分区表。不知道这算不算一个bug。大家也可以试试。 所以你总能得到相应的升级版本,来满足你的需求。 其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。 再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。 SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。 以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了 从底层原理到表层引用,书籍多的很。个人认为没有什么那本书好?这样的说法。主要看和个人的学习方法是否适合。
页:
[1]