Expressievergelijkingen verbeteren met IS [NIET] DISTINCT FROM

Voltooid 200 ervaringspunten

SQL Server 2022 verbetert de querytaal met een nieuw predicaat, IS [NOT] DISTINCT FROMontworpen om vergelijkingsbewerkingen met NULL waarden te vereenvoudigen.

IS [NIET] ANDERS DAN predicaat

Het IS [NOT] DISTINCT FROM predicaat is een handige manier om twee expressies te vergelijken, waardoor een waar of onwaar resultaat wordt gegarandeerd, zelfs wanneer NULL er waarden bij betrokken zijn. Deze wordt gebruikt in de zoekvoorwaarde van WHERE en HAVING componenten, de joinvoorwaarden van FROM componenten en andere constructies waarbij een Booleaanse waarde is vereist.

Werken met NULL waarden in SQL Server kan lastig zijn, omdat het vergelijken ervan resulteert in een onbekend resultaat. Het IS DISTINCT FROM / IS NOT DISTINCT FROM predicaat maakt deze vergelijking gemakkelijker door bekende waarden in vergelijkingen te behandelen NULLs . Bekijk de volgende tabel met waarden A en B om het verschil tussen IS NOT DISTINCT FROM en gelijkheidsvergelijkingen te demonstreren:

A B A = B AIS NOT DISTINCT FROMB
0 0 Waar Waar
0 1 Onwaar Onwaar
0 NULL Onbekend Onwaar
NULL NULL Onbekend Waar

Het uitvoeren van zoekopdrachten met het predicaat IS DISTINCT FROM, zelfs wanneer een waarde NULL kan zijn

Stel dat u een databaseontwikkelaar bent die aan een nieuwe e-commercetoepassing werkt. U hebt een tabel met de naam Sales.SalesOrderDetail die kolommen bevat voor SalesOrderID, ProductID, ProductSubcategoryID, OrderQty, UnitPrice, UnitPriceDiscount en LineTotal. U wilt alle rijen in de tabel Sales.SalesOrderDetail zoeken, waarbij:

  • Het UnitPriceDiscount verschilt van nul, of met andere woorden, dat het korting heeft.
  • De subcategorie is Road Bikes.
  • De orderdatum was op 31 juli 2013.
  • De fiets was geel.
  • Het regeltotaal is groter dan 15.000.

Daarnaast wilt u met behulp van de vorige definitie ook alle rijen zoeken waar de korting 10 procent is. Niet alle orders hebben korting, dus het kortingsveld kan zijn NULL.

Met behulp van het IS [NOT] DISTINCT FROM predicaat kunt u snel en eenvoudig query's schrijven om deze doelen te bereiken. Voer de volgende query's uit in SQL Server Management Studio (SSMS) om de gewenste gegevens te vinden:

SQL
-- Query to return rows where the Discount is DISTINCT FROM 0.00
SELECT SOD.SalesOrderID
    , P.Name
      ,SOD.OrderQty
      ,SOD.UnitPrice
      ,SOD.UnitPriceDiscount
      ,SOD.LineTotal
FROM AdventureWorks2012.Sales.SalesOrderDetail SOD
    JOIN AdventureWorks2012.Sales.SalesOrderHeader SOH ON SOD.SalesOrderID = SOH.SalesOrderID
    JOIN  AdventureWorks2012.Production.Product P ON P.ProductID = SOD.ProductID
    JOIN  AdventureWorks2012.Production.ProductSubcategory PSC ON P.ProductSubcategoryID = PSC.ProductSubcategoryID
WHERE Color = 'Yellow'
    AND UnitPriceDiscount IS DISTINCT FROM 0.00
    AND PSC.Name = 'Road Bikes'
    AND SOH.OrderDate = '2013-07-31 00:00:00.000'
    AND LineTotal > 15000
ORDER BY SalesOrderID

Resultaten:

SalesOrderID Naam OrderQty UnitPrice UnitPriceDiscount LineTotal
53460 Road-350-W Geel, 48 30 850.495 0.10 22963.365000
53530 Road-350-W Geel, 48 17 935.5445 0.05 15109.043675
SQL
-- Query to return rows where the Discount is NOT DISTINCT FROM 0.10
SELECT SOD.SalesOrderID
    , P.Name
      ,SOD.OrderQty
      ,SOD.UnitPrice
      ,SOD.UnitPriceDiscount
      ,SOD.LineTotal
FROM AdventureWorks2012.Sales.SalesOrderDetail SOD
    JOIN AdventureWorks2012.Sales.SalesOrderHeader SOH ON SOD.SalesOrderID = SOH.SalesOrderID
    JOIN  AdventureWorks2022.Production.Product P ON P.ProductID = SOD.ProductID
    JOIN  AdventureWorks2012.Production.ProductSubcategory PSC ON P.ProductSubcategoryID = PSC.ProductSubcategoryID
WHERE Color = 'Yellow'
    AND UnitPriceDiscount IS NOT DISTINCT FROM 0.10
    AND PSC.Name = 'Road Bikes'
    AND SOH.OrderDate = '2013-07-31 00:00:00.000'
    AND LineTotal > 15000
ORDER BY SalesOrderID

Resultaten:

SalesOrderID Naam OrderQty UnitPrice UnitPriceDiscount LineTotal
53460 Road-350-W Geel, 48 30 850.495 0.10 22963.365000

Deze query's retourneren de rijen waarin de kolom UnitPriceDiscount overeenkomt of niet overeenkomt met de opgegeven waarde, zelfs als NULL er waarden aanwezig zijn.

Het IS [NOT] DISTINCT FROM predicaat in SQL Server 2022 stroomlijnt de verwerking NULL van waarden in vergelijkingen. Door s als bekende waarden te behandelen NULL. Dit predicaat vereenvoudigt en maakt uw code beter leesbaar en gemakkelijker te onderhouden. Deze functie is een waardevolle aanvulling voor ontwikkelaars en databasebeheerders die met SQL Server werken.

Kenniscontrole

1.

Wat is het belangrijkste verschil tussen de operator '=' en de operator 'IS NOT DISTINCT FROM'?

2.

Hoe behandelt het IS NOT DISTINCT FROM predicaat NULL-waarden in vergelijkingen?


Volgende eenheid: Verbeteringen van tijd- en reeksfuncties

Vorige Volgende