Expressievergelijkingen verbeteren met IS [NIET] DISTINCT FROM
SQL Server 2022 verbetert de querytaal met een nieuw predicaat, IS [NOT] DISTINCT FROM
ontworpen 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 FROM B |
---|---|---|---|
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:
-- 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 |
-- 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.