èªã¿ãããã³ãŒããæžãã ãã§ã¯ååã§ã¯ãããŸãããã³ãŒãããã°ããå®è¡ããå¿
èŠããããŸãã
ãã®ãããªT-SQLã³ãŒããèšè¿°ããããã®3ã€ã®åºæ¬çãªã«ãŒã«ããããããŸãæ©èœããŸãã ãããã¯çŽ¯ç©çã§ã-ãããã®ãã¹ãŠã®ã«ãŒã«ã®å®è£
ã¯ãã³ãŒãã«ãã©ã¹ã®åœ±é¿ãäžããŸãã ãããã®ãããããã¹ããããŸãã¯å€æŽãããšãã³ãŒãã®ããã©ãŒãã³ã¹ã«æªåœ±é¿ãåãŒãå¯èœæ§ãé«ããªããŸãã
- ããŒã¿ã¹ãã¬ãŒãžæ§é ã«åºã¥ããŠæžã蟌ã¿ãŸããdatetimeåã®ããŒã¿ãæ ŒçŽããå Žåã¯ãvarcharãªã©ã§ã¯ãªãdatetimeã䜿çšããŸãã
- ã€ã³ããã¯ã¹ã®å¯çšæ§ã«åºã¥ããŠèšè¿°ããŸããã€ã³ããã¯ã¹ãããŒãã«äžã«æ§ç¯ãããããã«ããå¿
èŠãããå Žåã¯ããããã®ã€ã³ããã¯ã¹ãæ倧éã«æŽ»çšã§ããããã«ã³ãŒããèšè¿°ããŸãã ã¯ã©ã¹ã¿ãŒåã€ã³ããã¯ã¹ã1ã€ã ãã§ããããšã確èªããããŒãã«ããšã«æãå¹ççãªæ¹æ³ã§äœ¿çšãããããã«ããŸãã
- ã¯ãšãªãªããã£ãã€ã¶ãŒãæ¯æŽããããã«æžãïŒã¯ãšãªãªããã£ãã€ã¶ãŒã¯DBMSã®ãšããµã€ãã£ã³ã°ãªéšåã§ãã æ®å¿µãªãããããšãã°ãããè¡šçŸãå¥ã®è¡šçŸããã次ã«å¥ã®è¡šçŸããããŒã¿ãåãåã£ãå Žåãªã©ããã¹ããããè¡šçŸãå«ããªã©ã解æããã®ããé£ãããã¯ãšãªãæžãããšã§ã圌ã®ä»äºãéåžžã«è€éã«ããããšãã§ããŸãã ãªããã£ãã€ã¶ãŒãã©ã®ããã«æ©èœããããæéããããŠç解ãã害ãåãŒããã«åœ¹ç«ã€ããã«ã¯ãšãªãäœæããŸãã
T-SQLã³ãŒãã§ããããééããããã€ããããŸã-ããªãã§ãã ããã
ééã£ãããŒã¿åã䜿çšãã
çè«çã«ã¯ããã®ãšã©ãŒãåé¿ããããšã¯éåžžã«ç°¡åã§ãããå®éã«ã¯éåžžã«äžè¬çã§ãã ããšãã°ãããŒã¿ããŒã¹ã§äœããã®ã¿ã€ãã®ããŒã¿ã䜿çšããŠããŸãã ãã©ã¡ãŒã¿ãšå€æ°ã§äœ¿çšããŠãã ããïŒ ã¯ããSQL Serverã¯ããããŒã¿åãå¥ã®ããŒã¿åã«æé»çã«ãã£ã¹ãã§ããããšãç¥ã£ãŠããŸãã ãã ããæé»çãªåå€æãçºçããå ŽåããŸãã¯èªåã§åã®ããŒã¿åãå¥ã®åã«å€æããå Žåã¯ãåå
šäœã«å¯ŸããŠå€æãå®è¡ããŸãã WHEREå¥ãŸãã¯çµåæ¡ä»¶ã®åã«å¯ŸããŠãã®å€æãå®è¡ãããšãåžžã«ããŒãã«ã¹ãã£ã³ã衚瀺ãããŸãã ãã®åã«ã¯åªããã€ã³ããã¯ã¹ãæ§ç¯ã§ããŸããããã®åã«æ ŒçŽãããŠããå€ã«å¯ŸããŠCASTãå®è¡ããŠãããšãã°ããã®åã«æ ŒçŽãããŠããæ¥ä»ãæ¡ä»¶ã§äœ¿çšããcharåãšæ¯èŒãããããã€ã³ããã¯ã¹ã¯äœ¿çšãããŸããã
ä¿¡ããããªãïŒ ãã®ã¯ãšãªãèŠãŠã¿ãŸãããã
SELECT e.BusinessEntityID, e.NationalIDNumber FROM HumanResources.Employee AS e WHERE e.NationalIDNumber = 112457891;
ããæžãããéåžžã«ã·ã³ãã«ã ãã®ããŒãã«ã§äœæãããã€ã³ããã¯ã¹ã§ã«ããŒããå¿
èŠããããŸãã ããããå®è¡èšç»ã¯æ¬¡ã®ãšããã§ãã

ãã®ã¯ãšãªã¯ååã«é«éã§ãããŒãã«ã¯å°ãããããã€ã³ããã¯ã¹ã®ã¹ãã£ã³ã«å¿
èŠãªèªã¿åãã¯4åã ãã§ãã SELECTã¹ããŒãã¡ã³ãã®å°ããªæå笊ã«æ³šæããŠãã ããã ãã®ããããã£ã«ç®ãåãããšã以äžã衚瀺ãããŸãã

ããã ãã ããã¯ãå®è¡èšç»ã«åœ±é¿ããåå€æãé²è¡äžã§ãããšããèŠåïŒSQL Server 2012ã®æ°æ©èœïŒã§ãã èŠããã«ãããã¯ãªã¯ãšã¹ããééã£ãããŒã¿åã䜿çšããŠããããã§ãã
SELECT e.BusinessEntityID, e.NationalIDNumber FROM HumanResources.Employee AS e WHERE e.NationalIDNumber = '112457891';
ãããŠã次ã®ã¯ãšãªå®è¡ãã©ã³ãååŸããŸãã

ãããŠãããã§ã¯ã4ã€ã§ã¯ãªã2ã€ã®èªã¿åãæäœã®ã¿ã䜿çšãããŠããŸãã ãããŠãã¯ããç§ã¯èŠæ±ãéåžžã«éããå°ãéãããããšãç解ããŠããŸãã ããããäœçŸäžãã®è¡ãããŒãã«ã«æ ŒçŽãããŠããå Žåã¯ã©ããªããŸããïŒ ãããããããç§ã¯ããŒããŒã«ãªããŸãã
æ£ããããŒã¿åã䜿çšããŠãã ããã
çµåæ¡ä»¶ã®æºåããã³WHEREå¥ã§ã®é¢æ°ã®äœ¿çš
é¢æ°ãšããã°ãçµåæ¡ä»¶ãŸãã¯åŒæ°ãšããŠåãæž¡ãWHEREåŒã§äœ¿çšãããé¢æ°ã®ã»ãšãã©ã¯ãã€ã³ããã¯ã¹ã®é©åãªäœ¿çšã劚ããŸãã åŒæ°ãšããŠåãåãé¢æ°ã䜿çšããã¯ãšãªã®é床ãã©ãã»ã©é
ãããããããŸãã 以äžã«äŸã瀺ããŸãã
SELECT a.AddressLine1, a.AddressLine2, a.City, a.StateProvinceID FROM Person.Address AS a WHERE '4444' = LEFT(a.AddressLine1, 4) ;
ãã®é¢æ°LEFTã¯ãåŒæ°ãšããŠåãåãåãããã®å®è¡èšç»ã«å€æããŸãã

ãã®çµæãå¿
èŠãªããŒã¿ãèŠã€ããããã«316åã®èªã¿åãæäœãå®è¡ããã9ããªç§ããããŸãïŒéåžžã«é«éãªãã£ã¹ã¯ã䜿çšããŠããŸãïŒã ããã¯ãã4444ãããã®é¢æ°ã«ãã£ãŠè¿ããããã¹ãŠã®è¡ãšæ¯èŒããå¿
èŠãããããã§ãã SQL Serverã¯ããŒãã«ãåã«ã¹ãã£ã³ããããšããã§ãããè¡ããšã«LEFTãå®è¡ããå¿
èŠããããŸãã ãã ãã次ã®ãããªããšãã§ããŸãã
SELECT a.AddressLine1, a.AddressLine2, a.City, a.StateProvinceID FROM Person.Address AS a WHERE a.AddressLine1 LIKE '4444%' ;
ãããŠãããã§ã¯ãŸã£ããç°ãªãå®è¡èšç»ã衚瀺ãããŸãã

ã¯ãšãªã«ã¯3åã®èªã¿åããš0ããªç§ãå¿
èŠã§ãã ããŠã客芳æ§ã®ããã«1ããªç§ã«ããŸãã ããã«ãããããã©ãŒãã³ã¹ã倧å¹
ã«åäžããŸãã ãããŠãã¹ãŠã¯ãã€ã³ããã¯ã¹ã«ããæ€çŽ¢ã«äœ¿çšã§ããé¢æ°ã䜿çšããŠããããã§ãïŒä»¥åã¯sargeableãšåŒã°ããŠããŸãã-
äžè¬ã«ç¿»èš³äžå¯èœãªåèªïŒSARG-Search Arguments -ableãé¢æ°ãSARGeableã®å Žå-åã次ã®ããã«æž¡ãããšãã§ããŸãïŒãšã«ãããåŒæ°ãšã€ã³ããã¯ã¹ã·ãŒã¯ã䜿çšãããŸããSARGeableã§ã¯ãªãå Žåã¯-æ²ããããšã«ãã€ã³ããã¯ã¹ã¹ãã£ã³ãåžžã«äœ¿çšãããŸã-çŽç¿»èš³è
ïŒã ãããã®å Žåã§ããWHEREåŒãŸãã¯æ€çŽ¢æ¡ä»¶ã§é¢æ°ã䜿çšããªãã§ãã ããããŸãã¯ãã€ã³ããã¯ã¹ã«ããæ€çŽ¢æ¡ä»¶ã§äœ¿çšã§ããé¢æ°ã®ã¿ã䜿çšããŠãã ããã
ãã«ãã¹ããŒãã¡ã³ãUDFã®äœ¿çš
ãã·ã¢èªçmsdnã®è€æ°ã¹ããŒãã¡ã³ãUDFã¯ããããã€ãã®åœä»€ã§æ§æããããŠãŒã¶ãŒå®çŸ©é¢æ°ããšã»ãŒç¿»èš³ãããŸãããç§ã®æèŠã§ã¯ãã©ãããå¥åŠã«èãããŸãããããã£ãŠãèŠåºãããã³æ¬æå
šäœã§ããã®çšèªã®ç¿»èš³ãé¿ããããšããŸãã-çŽã 翻蚳è
åºæ¬çã«ã圌ãã¯ããªããtrapã«ãããŸãã äžèŠãããšããã®çŽ æŽãããã¡ã«ããºã ã«ãããT-SQLãå®éã®ããã°ã©ãã³ã°èšèªãšããŠäœ¿çšã§ããŸãã ãããã®é¢æ°ãäœæããŠå¥ã®é¢æ°ããåŒã³åºãããšãã§ãããããã®å€ãã¹ãã¢ãããã·ãŒãžã£ãšã¯ç°ãªããã³ãŒããåå©çšã§ããŸãã ããã¯ãããã 倧éã®ããŒã¿ã«å¯ŸããŠãã®ã³ãŒããå®è¡ããããšãããŸã§ã
ãããã®é¢æ°ã®åé¡ã¯ãããŒãã«å€æ°ã«åºã¥ããŠæ§ç¯ãããããšã§ãã ããŒãã«å€æ°ãæå³ããç®çã«äœ¿çšããå ŽåãããŒãã«å€æ°ã¯éåžžã«äŸ¿å©ã§ãã äžæããŒãã«ãšã¯æãããªéãã1ã€ãããŸããçµ±èšã¯ãããã«åºã¥ããŠæ§ç¯ãããŸããã ãã®éãã¯éåžžã«åœ¹ç«ã€å ŽåããããŸãã çµ±èšæ
å ±ããªãå Žåããªããã£ãã€ã¶ãŒã¯ãããŒãã«å€æ°ãŸãã¯UDFã§å®è¡ãããã¯ãšãªã¯1è¡ã®ã¿ãè¿ããšæ³å®ããŸãã 1è¡ã æ¬åœã«è€æ°ã®è¡ãè¿ããããšäŸ¿å©ã§ãã ããããããæ¥ãæ°çŸãŸãã¯æ°åã®è¡ãè¿ããããŠãŒã¶ãŒã¯1ã€ã®UDFãå¥ã®UDFãšçµã¿åãããããšã«ããŸã...ããã©ãŒãã³ã¹ã¯ãéåžžã«éããéåžžã«éåžžã«åŒ·ãäœäžããŸãã
äŸã¯ååã«å€§ããã§ãã 以äžã«ããã€ãã®UDFã瀺ããŸãã
CREATE FUNCTION dbo.SalesInfo () RETURNS @return_variable TABLE ( SalesOrderID INT, OrderDate DATETIME, SalesPersonID INT, PurchaseOrderNumber dbo.OrderNumber, AccountNumber dbo.AccountNumber, ShippingCity NVARCHAR(30) ) AS BEGIN; INSERT INTO @return_variable (SalesOrderID, OrderDate, SalesPersonID, PurchaseOrderNumber, AccountNumber, ShippingCity ) SELECT soh.SalesOrderID, soh.OrderDate, soh.SalesPersonID, soh.PurchaseOrderNumber, soh.AccountNumber, a.City FROM Sales.SalesOrderHeader AS soh JOIN Person.Address AS a ON soh.ShipToAddressID = a.AddressID ; RETURN ; END ; GO CREATE FUNCTION dbo.SalesDetails () RETURNS @return_variable TABLE ( SalesOrderID INT, SalesOrderDetailID INT, OrderQty SMALLINT, UnitPrice MONEY ) AS BEGIN; INSERT INTO @return_variable (SalesOrderID, SalesOrderDetailId, OrderQty, UnitPrice ) SELECT sod.SalesOrderID, sod.SalesOrderDetailID, sod.OrderQty, sod.UnitPrice FROM Sales.SalesOrderDetail AS sod ; RETURN ; END ; GO CREATE FUNCTION dbo.CombinedSalesInfo () RETURNS @return_variable TABLE ( SalesPersonID INT, ShippingCity NVARCHAR(30), OrderDate DATETIME, PurchaseOrderNumber dbo.OrderNumber, AccountNumber dbo.AccountNumber, OrderQty SMALLINT, UnitPrice MONEY ) AS BEGIN; INSERT INTO @return_variable (SalesPersonId, ShippingCity, OrderDate, PurchaseOrderNumber, AccountNumber, OrderQty, UnitPrice ) SELECT si.SalesPersonID, si.ShippingCity, si.OrderDate, si.PurchaseOrderNumber, si.AccountNumber, sd.OrderQty, sd.UnitPrice FROM dbo.SalesInfo() AS si JOIN dbo.SalesDetails() AS sd ON si.SalesOrderID = sd.SalesOrderID ; RETURN ; END ; GO
çŽ æŽãããæ§é ã ããã«ãããéåžžã«åçŽãªã¯ãšãªãäœæã§ããŸãã ããŠãäŸãã°ããã«ïŒ
SELECT csi.OrderDate, csi.PurchaseOrderNumber, csi.AccountNumber, csi.OrderQty, csi.UnitPrice FROM dbo.CombinedSalesInfo() AS csi WHERE csi.SalesPersonID = 277 AND csi.ShippingCity = 'Odessa' ;
1ã€ãéåžžã«åçŽãªèŠæ±ã ããã¯åœŒã®å®è¡èšç»ã§ããããéåžžã«ç°¡åã§ãã

2.17ç§ããããããã148è¡ãè¿ãã1456ã®èªã¿åãæäœã䜿çšããŸãã ãã®é¢æ°ã®ã³ã¹ãã¯ãŒãã§ãããããŒãã«ïŒããŒãã«å€æ°ïŒã®ã¹ãã£ã³ã®ã¿ããªã¯ãšã¹ãã®ã³ã¹ãã«åœ±é¿ããããšã«æ³šæããŠãã ããã ããŒããæ¬åœã§ããïŒ ãŒãã³ã¹ãUDFå®è¡ã¹ããŒãã¡ã³ãã®èåŸã«ãããã®ãèŠãŠã¿ãŸãããã ãã®ãªã¯ãšã¹ãã¯ããã£ãã·ã¥ããé¢æ°å®è¡ãã©ã³ãååŸããŸãã
SELECT deqp.query_plan, dest.text, SUBSTRING(dest.text, (deqs.statement_start_offset / 2) + 1, (deqs.statement_end_offset - deqs.statement_start_offset) / 2 + 1) AS actualstatement FROM sys.dm_exec_query_stats AS deqs CROSS APPLY sys.dm_exec_query_plan(deqs.plan_handle) AS deqp CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest WHERE deqp.objectid = OBJECT_ID('dbo.CombinedSalesInfo');
ãããŠãããã§å®éã«äœãèµ·ãããã§ãïŒ

ãããŒããããã®å°ããªæ©èœãšããŒãã«ã®ã¹ãã£ã³ã®ããããã€ããããã«é ãããŠããããã«èŠããŸãã ããã«ãHash MatchçµåæŒç®åã¯ãtempdbã«æžã蟌ã¿ãè¡ããå®è¡ã«ããªãã®ã³ã¹ããããããŸãã å¥ã®UDFã®å®è¡èšç»ãèŠãŠã¿ãŸãããã

ãã£ã¡ïŒ ãããŠä»ãã¯ã©ã¹ã¿ãŒåã€ã³ããã¯ã¹ã¹ãã£ã³ã衚瀺ãããŸãããã®ã¹ãã£ã³ã§ã¯ãå€æ°ã®è¡ãã¹ãã£ã³ãããŸãã ããã¯ãã¯ãçŽ æŽãããããšã§ã¯ãããŸããã äžè¬ã«ããã®ãããªç¶æ³å
šäœã§ã¯ãUDFã¯ãŸããŸãé
åçã§ã¯ãªãããã«èŠããŸãã ãããç§ãã¡ãçŽæ¥ç¥ããªããªããããŒãã«ã«çŽæ¥ã¢ã¯ã»ã¹ããŠã¿ãŠãã ããã ãã®ããã«ãäŸãã°ïŒ
SELECT soh.OrderDate, soh.PurchaseOrderNumber, soh.AccountNumber, sod.OrderQty, sod.UnitPrice FROM Sales.SalesOrderHeader AS soh JOIN Sales.SalesOrderDetail AS sod ON soh.SalesOrderID = sod.SalesOrderID JOIN Person.Address AS ba ON soh.BillToAddressID = ba.AddressID JOIN Person.Address AS sa ON soh.ShipToAddressID = sa.AddressID WHERE soh.SalesPersonID = 277 AND sa.City = 'Odessa' ;
ããã§ããã®ã¯ãšãªãå®äºãããšããŸã£ããåãããŒã¿ãååŸãããŸããã2170ã§ã¯ãªã310ããªç§ã§å®äºããŸããããã«ãSQL Serverã¯1456ã§ã¯ãªã911ã®èªã¿åãã®ã¿ãå®è¡ããŸãã UDF
ãããéãå®è¡ãèšå®ãæå¹ã«ããïŒããŒãã£ãªãŒãã£ã³ã°ã®äœ¿çš
éå»ã«æ»ã£ãŠã286åã®ããã»ããµãæèŒããå€ãã³ã³ãã¥ãŒã¿ãŒã§ã¯ãããã€ãã®çç±ã§ããã³ãããã«ã«ã¿ãŒããã¿ã³ããã£ãããšãæãåºãããšãã§ããŸãã 誀ã£ãŠãå§è¿«ãããå Žåãã³ã³ãã¥ãŒã¿ã¯ããã«ç°åžžãªã»ã©é
ããªãå§ããŸããã ãããã£ãŠãæ倧垯åå¹
ã確ä¿ããã«ã¯ãåžžã«ããã€ãã®æ©èœããªã³ã«ããå¿
èŠãããããšã«æ°ä»ããŸããã åæ§ã«ãå€ãã®äººãåé¢ã¬ãã«READ_UNCOMMITTEDãšNO_LOCKãã³ããSQL Serverã®ã¿ãŒããã¿ã³ãšããŠèŠãŠããŸãã ãããã䜿çšããå Žåã¯ãå¿
ã確èªããŠãã ãã-ã»ãšãã©ãã¹ãŠã®èŠæ±ãšã·ã¹ãã å
šäœãé«éã«ãªããŸãã ããã¯ãèªã¿åãäžã«ããã¯ã課ãããããã§ãã¯ããããããªããšããäºå®ã«ãããã®ã§ãã ããå°ãªãããã¯-ããéãçµæã ããã...
ã¯ãšãªã§READ_UNCOMMITTEDãŸãã¯NO_LOCKã䜿çšãããšãããŒãã£ãªãŒããçºçããŸãã ããã¯ãæŽæ°æäœããŸã å®äºããŠããªãå Žåããç«ãã§ã¯ãªããç¬ããèªãããšãã§ããããšãæå³ããããšã誰ããç解ããŠããŸãã ãã ããããã«å ããŠãã¯ãšãªã®å®è¡äžã«ããŒã¿ããŒãžã移åããå¯èœæ§ãããããããåé¿ããããã«ããã¯ããããããšã¯ãªããããå®éã®è¡ãããå€ãè¡ãŸãã¯å°ãªãè¡ãååŸã§ããŸãã ç§ã¯ããªãã®ããšã¯ç¥ããŸããããç§ãåããŠããã»ãšãã©ã®äŒæ¥ã§ã¯ãã»ãšãã©ã®ã·ã¹ãã ã§ã®ã¯ãšãªã®ã»ãšãã©ãå®å
šãªããŒã¿ãè¿ããšäºæ³ããŠããŸããã åãããŒã¿ã»ããã§å®è¡ãããåããã©ã¡ãŒã¿ã䜿çšããåãã¯ãšãªã§ã¯ãåãçµæãåŸãããŸãã NO_LOCKã䜿çšããå Žåã§ã¯ãããŸããã ããã確èªããã«ã¯ã
ãã®æçš¿ãèªãããšããå§ãããŸãã
ãªã¯ãšã¹ãã§ã®ãã³ãã®äžåœãªäœ¿çš
ãã³ãã䜿çšããããšã«ã€ããŠã人ã
ã¯ããŸãã«ãæ¥ãã§æ±ºå®ããŸãã æãäžè¬çãªç¶æ³ã¯ããã³ãããªã¯ãšã¹ãã®1ã€ã§ãéåžžã«ãŸããªåé¡ã®è§£æ±ºã«åœ¹ç«ã€å Žåã§ãã ãããã人ã
ããã®ãªã¯ãšã¹ãã§å€§å¹
ãªããã©ãŒãã³ã¹ã®åäžãèŠããš...圌ãã¯ããã«ãããã©ãã§ãäžè¬çã«ããããå§ããŸãã
ããšãã°ãå€ãã®äººã¯ãLOOP JOINãããŒãã«ãçµåããæè¯ã®æ¹æ³ã ãšèããŠããŸãã 圌ãã¯ãã®çµè«ã«éããŸãããªããªããããã¯ã»ãšãã©ã®å Žåãå°ãããŠè¿
éãªã¯ãšãªã«èŠãããããã§ãã ãããã£ãŠã圌ãã¯SQL Serverã«LOOP JOINã®äœ¿çšã匷å¶ããããšã«ããŸããã ããã¯ãŸã£ããè€éã§ã¯ãããŸããã
SELECT s.[Name] AS StoreName, p.LastName + ', ' + p.FirstName FROM Sales.Store AS s JOIN sales.SalesPerson AS sp ON s.SalesPersonID = sp.BusinessEntityID JOIN HumanResources.Employee AS e ON sp.BusinessEntityID = e.BusinessEntityID JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID OPTION (LOOP JOIN);
ãã®èŠæ±ã¯101ããªç§ã§å®è¡ããã4115ã®èªã¿åãæäœãå®è¡ããŸãã äžè¬ã«ãæªãã¯ãããŸãããããã®ãã³ããåé€ãããšãåããªã¯ãšã¹ãã90ããªç§ã§å®è¡ããã2370ã®èªã¿åãå€ã®ã¿ãçæãããŸãã ã·ã¹ãã ã®è² è·ãé«ãã»ã©ããã³ãã䜿çšããªããªã¯ãšã¹ãã®æå¹æ§ãããæçœã«ãªããŸãã
å¥ã®äŸã瀺ããŸãã å€ãã®å ŽåãããŒãã«ã«ã€ã³ããã¯ã¹ãäœæããåé¡ã®è§£æ±ºãæåŸ
ããŸãã ããã§ããªã¯ãšã¹ãããããŸãïŒ
SELECT * FROM Purchasing.PurchaseOrderHeader AS poh WHERE poh.PurchaseOrderID * 2 = 3400;
ããã§ãåé¡ã¯ãåå€æãè¡ããšãã«ãåäžã®ã€ã³ããã¯ã¹ãé©åã«äœ¿çšãããªãããšã§ãã ã¯ã©ã¹ã¿åã€ã³ããã¯ã¹ã¹ãã£ã³ãé²è¡äžã®ãããããã©ãŒãã³ã¹ãäœäžããŸãã ãã®ããã人ã
ã¯èªåã®ã€ã³ããã¯ã¹ã䜿çšãããŠããªãããšã«æ°ä»ãããšãã次ã®ããšãè¡ããŸãã
SELECT * FROM Purchasing.PurchaseOrderHeader AS poh WITH (INDEX (PK_PurchaseOrderHeader_PurchaseOrderID)) WHERE poh.PurchaseOrderID * 2 = 3400;
ãããŠä»ã圌ãã¯ã¯ã©ã¹ã¿ãŒåããããã®ã§ã¯ãªããéžæããã€ã³ããã¯ã¹ã®ã¹ãã£ã³ãååŸããã®ã§ãã€ã³ããã¯ã¹ã¯ã䜿çšããããŠããŸãããïŒ ããããã¯ãšãªã®ããã©ãŒãã³ã¹ã¯å€åããŠããŸã-çŸåšã11åã®èªã¿åãæäœã®ä»£ããã«44åå®è¡ãããŠããŸãïŒã©ã¡ããçŽ0ããªç§ã®å®è¡æéãæã£ãŠããŸããéåžžã«é«éãªãã£ã¹ã¯ãããããã§ãïŒã ã䜿çšæžã¿ãã¯äœ¿çšãããŠããŸãããæå³ãããšããã§ã¯ãããŸããã ãã®åé¡ã®è§£æ±ºçã¯ã次ã®ããã«ãªã¯ãšã¹ããæžãæããããšã§ãã
SELECT * FROM Purchasing.PurchaseOrderHeader poh WHERE PurchaseOrderID = 3400 / 2;
ã€ã³ããã¯ã¹æ€çŽ¢ã䜿çšãããŠãããããèªã¿åãæäœã®æ°ã¯2ã€ã«æžããŸãããã€ã³ããã¯ã¹ã¯æ£ãã䜿çšãããŠããŸãã
ä»ã®ãã¹ãŠã®å¯èœãªãªãã·ã§ã³ããã¹ããããè¯å®çãªçµæãåŸãããŠããªãå Žåãã¯ãšãªã®ãã³ãã¯åžžã«æåŸã«é©çšããå¿
èŠããããŸãã
ã¯ãšãªå®è¡çµæã®è¡ããšã®åŠçã®äœ¿çšïŒãè¡ã«ããè¡ã®åŠçãåŠçïŒ
è¡åäœã®åŠçã¯ãã»ããã®æäœã§ã¯ãªããWHILEãµã€ã¯ã«ã®ã«ãŒãœã«ãŸãã¯æäœã䜿çšããŠå®è¡ãããŸãã 䜿çšãããšãããã©ãŒãã³ã¹ã¯éåžžã«äœããªããŸãã ã«ãŒãœã«ã¯äžè¬çã«2ã€ã®çç±ã§äœ¿çšãããŸãã 1ã€ç®ã¯ã³ãŒãã§è¡ããšã®åŠçã䜿çšããããšã«æ
£ããŠããéçºè
ã§ã2ã€ç®ã¯Oracleããæ¥ãéçºè
ã§ãã«ãŒãœã«ã¯è¯ãããšã ãšèããŠããŸãã çç±ãäœã§ãããã«ãŒãœã«ã¯èœã®çç£æ§ãäœäžãããŸãã
倱æããã«ãŒãœã«ã®å
žåçãªäŸã次ã«ç€ºããŸãã ç¹å®ã®åºæºã§éžæããã補åã®è²ãæŽæ°ããå¿
èŠããããŸãã çºæããããã®ã§ã¯ãããŸãã-ãã€ãŠæé©åããå¿
èŠããã£ãã³ãŒãã«åºã¥ããŠããŸãã
BEGIN TRANSACTION DECLARE @Name NVARCHAR(50) , @Color NVARCHAR(15) , @Weight DECIMAL(8, 2) DECLARE BigUpdate CURSOR FOR SELECT p.[Name] ,p.Color ,p.[Weight] FROM Production.Product AS p ; OPEN BigUpdate ; FETCH NEXT FROM BigUpdate INTO @Name, @Color, @Weight ; WHILE @@FETCH_STATUS = 0 BEGIN IF @Weight < 3 BEGIN UPDATE Production.Product SET Color = 'Blue' WHERE CURRENT OF BigUpdate END FETCH NEXT FROM BigUpdate INTO @Name, @Color, @Weight ; END CLOSE BigUpdate ; DEALLOCATE BigUpdate ; SELECT * FROM Production.Product AS p WHERE Color = 'Blue' ; ROLLBACK TRANSACTION
åå埩ã§ã2ã€ã®èªã¿åãæäœãå®è¡ããŸããåºæºãæºãã補åã®æ°ã¯æ°çŸã§ãã ç§ã®ãã·ã³ã§ã¯ãè² è·ãããããŸãããå®è¡æéã¯1ç§ä»¥äžã§ãã ç¹ã«ãã®ãªã¯ãšã¹ãã®æžãæãã¯éåžžã«ç°¡åãªã®ã§ãããã¯ãŸã£ããåãå
¥ããããŸããã
BEGIN TRANSACTION UPDATE Production.Product SET Color = 'BLUE' WHERE [Weight] < 3 ; ROLLBACK TRANSACTION
çŸåšã15åã®èªã¿åãæäœã®ã¿ãå®è¡ãããå®è¡æéã¯1ããªç§ã®ã¿ã§ãã ç¬ããªãã§ãã ããã 人ã
ã¯ãã®ãããªã³ãŒããæžãããšãå€ããããã«æªãããšã§ãã ã«ãŒãœã«ã¯é¿ããªããã°ãªãããã«ãŒãœã«ãªãã§ã¯ã§ããªãå Žåã«ã®ã¿äœ¿çšããå¿
èŠããããŸããããšãã°ãããŸããŸãªããŒãã«ãŸãã¯ããŒã¿ããŒã¹ããå®è¡ãããå¿
èŠãããã¡ã³ããã³ã¹ã¿ã¹ã¯ãªã©ã§ãã
ãã¹ãããããã¥ãŒã®äžåœãªäœ¿çš
ãã¥ãŒã«æ¥ç¶ããä»ã®ãã¥ãŒã«ãªã³ã¯ãããã¥ãŒã«æ¥ç¶ãããã¥ãŒã«ãªã³ã¯ãããã¥ãŒ...ãã¥ãŒã¯åãªãã¯ãšãªã§ãã ããããããŒãã«ãšããŠæ±ãããšãã§ããããã人ã
ã¯ããããããŒãã«ãšããŠèãå§ããããšãã§ããŸãã ããããç¡é§ã«ã ãããã¥ãŒãå¥ã®ãã¥ãŒã«æ¥ç¶ãããã3çªç®ã®ãã¥ãŒãåç
§ããããããšãã©ããªããŸããïŒ ãªã¯ãšã¹ããå®è¡ããããã®éåžžã«è€éãªèšç»ãäœæããŠããã ãã§ãã ãªããã£ãã€ã¶ãŒã¯ãããåçŽåããããšããŸãã 圌ã¯ãã¹ãŠã®ããŒãã«ã䜿çšããªãèšç»ãè©Šã¿ãŸãããèšç»ã®éžæã«ãããæéã¯éãããŠãããèšç»ãè€éã«ãªãã°ãªãã»ã©ãããªãåçŽãªå®è£
èšç»ã«ãªãã«ãããªããŸãã ãããŠãããã©ãŒãã³ã¹ã®åé¡ã¯ã»ãšãã©é¿ããããŸããã
ããšãã°ããã¥ãŒãå®çŸ©ããåçŽãªã¯ãšãªã®ã·ãŒã±ã³ã¹ã次ã«ç€ºããŸãã
CREATE VIEW dbo.SalesInfoView AS SELECT soh.SalesOrderID, soh.OrderDate, soh.SalesPersonID, soh.PurchaseOrderNumber, soh.AccountNumber, a.City AS ShippingCity FROM Sales.SalesOrderHeader AS soh JOIN Person.Address AS a ON soh.ShipToAddressID = a.AddressID ; CREATE VIEW dbo.SalesDetailsView AS SELECT sod.SalesOrderID, sod.SalesOrderDetailID, sod.OrderQty, sod.UnitPrice FROM Sales.SalesOrderDetail AS sod ; CREATE VIEW dbo.CombinedSalesInfoView AS SELECT si.SalesPersonID, si.ShippingCity, si.OrderDate, si.PurchaseOrderNumber, si.AccountNumber, sd.OrderQty, sd.UnitPrice FROM dbo.SalesInfoView AS si JOIN dbo.SalesDetailsView AS sd ON si.SalesOrderID = sd.SalesOrderID ;
ãããŠãããã§ããã¹ãã®äœè
ã¯ãªã¯ãšã¹ãã瀺ãã®ãå¿ããŸããããã³ã¡ã³ãã§ãããäžããŸãïŒç¿»èš³è
ã®ã¡ã¢ïŒïŒ SELECT csi.OrderDate FROM dbo. CominedSalesInfoView csi WHERE csi.SalesPersonID = 277
ãã®çµæããªã¯ãšã¹ãã¯155ããªç§å®è¡ããã965ã®èªã¿åãæäœã䜿çšããŸãã 圌ã®å®è¡èšç»ã¯æ¬¡ã®ãšããã§ãã

ç¹ã«7000è¡ãååŸããŠããã®ã§ãèŠæ ããè¯ãã®ã§ããã¹ãŠæ£åžžã«åäœããŠããããã§ãã ãããããã®ãããªãªã¯ãšã¹ããå®è¡ããããšãããšã©ããªããŸããïŒ
SELECT soh.OrderDate FROM Sales.SalesOrderHeader AS soh WHERE soh.SalesPersonID = 277 ;
ãããŠä»ãèŠæ±ã¯3ããªç§ã§å®äºãã685ã®èªã¿åãæäœã䜿çšããŸã-ããã¯ãŸã£ããç°ãªããŸãã ãããŠã圌ã®å®è¡èšç»ã¯æ¬¡ã®ãšããã§ãã

ã芧ã®ãšããããªããã£ãã€ã¶ãŒã¯ãã¯ãšãªã®åçŽåããã»ã¹ã®äžéšãšããŠããã¹ãŠã®äœåãªããŒãã«ãç Žæ£ããããšã¯ã§ããŸããã ãããã£ãŠããã©ã¢ã°ã©ãŠã³ãã«ã¯ãã€ã³ããã¯ã¹ã¹ãã£ã³ãšããŒã¿ãäžç·ã«åéããããã·ã¥ããããšãã2ã€ã®è¿œå æäœããããŸãã ãã¥ãŒã䜿çšããã«ãã®ã¯ãšãªãèšè¿°ããããšã«ãããSQL ServerãäžèŠãªäœæ¥ããç¯çŽã§ããŸãã ãŸãããã®äŸã¯éåžžã«åçŽã§ãããå®éã®ã¯ãšãªã®ã»ãšãã©ã¯ã¯ããã«è€éã§ãããããã©ãŒãã³ã¹ã®åé¡ãã¯ããã«å€§ãããªãããšã«æ³šæããŠãã ããã
ãã®èšäºãžã®ã³ã¡ã³ãã«ã¯ãå°ãè«äºããããŸãããã®æ¬è³ªã¯ãGrantïŒèšäºã®èè
ïŒãæšæºã®AdventureWorksããŒã¿ããŒã¹ã§ã¯ãªããé¡äŒŒã®ããŒã¿ããŒã¹ã§èŠæ±ãæºãããããã§ãããå®è£
èšç»ãæé©ã§ã¯ãªãããã§ãã ãæåŸã®ã»ã¯ã·ã§ã³ã®ã¯ãšãªã¯ãå®éšãèªåã§è¡ã£ãŠèŠãããšãã§ãããã®ãšã¯ç°ãªããŸãã ã泚æ 翻蚳è
ãã©ããã§ç§ãããŸãã«ãçžãããŠããŠïŒã§ããã°ïŒããã¹ããç解ãã«ããå ŽåããŸãã¯äœã§ãæé«ã®èšèé£ããæäŸã§ããå Žåã¯ããã¹ãŠã®ã³ã¡ã³ããåãã§èããŸãã