Aracılığıyla paylaş


WHERE kullanarak satırları süzme ve HAVING

WHERE ve HAVING yan tümcelerinde bir SELECT deyiminde sonuç oluşturmak için kullanılan kaynak tablodaki satırları denetlemek küme.WHERE ve HAVING süzgeçleri.Bunlar bir dizi arama koşullarını belirtin ve sonucu oluşturmak için kullanılan arama koşullarını koşulları karşılayan satırları küme.Arama koşullara uyan satırları sonuç kümesine katılmayı koşullu söylenir.Örneğin, WHERE aşağıdaki yan tümce SELECT deyim yalnızca belirli bir satış bölgesi için satırları olarak nitelendirir.

USE AdventureWorks;
GO
SELECT c.CustomerID, s.Name
FROM AdventureWorks.Sales.Customer c
JOIN AdventureWorks.Sales.Store s
ON s.CustomerID = c.CustomerID
WHERE c.TerritoryID = 1

HAVING yan tümce genellikle, GROUP BY yan tümce ile birlikte toplamak değerlerini sonuçlarını süzmek için kullanılır.Ancak, HAVING, GROUP BY belirtilebilir.HAVING yan tümce, WHERE yan tümce süzgeçleri sonra uygulanan ek filtreler belirtir.Bu süzgeç, seçim listesinde kullanılan bir toplamak işlev için uygulanabilir.Aşağıdaki örnekte WHERE yan tümce yalnızca aşan birim fiyatı ile ürün satış siparişlerini nitelendirir. $100ve HAVING Ayrıca sınırlar sonucu içeren bu sipariş için yan tümce birden fazla 100 birim.

USE AdventureWorks;
GO
SELECT OrdD1.SalesOrderID AS OrderID,
       SUM(OrdD1.OrderQty) AS "Units Sold",
       SUM(OrdD1.UnitPrice * OrdD1.OrderQty) AS Revenue
FROM Sales.SalesOrderDetail AS OrdD1
WHERE OrdD1.SalesOrderID in (SELECT OrdD2.SalesOrderID
    FROM Sales.SalesOrderDetail AS OrdD2
    WHERE OrdD2.UnitPrice > $100)
GROUP BY OrdD1.SalesOrderID
HAVING SUM(OrdD1.OrderQty) > 100

Koşullar NEREDE aramak ve HAVING yan tümcesi

Arama koşullarını veya WHERE ve HAVING yan tümcelerinde niteliklerini aşağıdakiler olabilir:

  • Karşılaştırma işleçleri, örneğin: =, < >, <, and >

    Örneğin, aşağıdaki sorgu, gelen satırları alır Product tablo sınıfında olan ürünler H.

    SELECT ProductID, Name
    FROM AdventureWorks.Production.Product
    WHERE Class = 'H'
    ORDER BY ProductID
    
  • Aralıkları (BETWEEN ve NOT ARASıNDA)

    Örneğin, aşağıdaki sorgu, satırları alır Product Tablo liste fiyatlarını 100 TL'den 500.

    SELECT ProductID, Name
    FROM AdventureWorks.Production.Product
    WHERE ListPrice BETWEEN 100 and 500
    ORDER BY ListPrice
    
  • Listeleri (IN, NOT IN)

    Örneğin, aşağıdaki sorgu renklerinin listesini kalan ürünleri alır.

    SELECT ProductID, Name
    FROM AdventureWorks.Production.Product
    WHERE Color IN ('Multi', 'Silver')
    ORDER BY ProductID
    
  • Eşleşme deseni (LIKE ve NOT LIKE)

    Örneğin, aşağıdaki sorgu, satırları alır Product Ürün adı harfleriyle başladığı tablosu Ch.

    SELECT ProductID, Name
    FROM AdventureWorks.Production.Product
    WHERE Name LIKE 'Ch%'
    ORDER BY ProductID
    

    Not

    Yalnızca, kullanabileceğiniz WHERE koşulları text sütunları PATINDEX(); gibi başka bir veri türü veya işleçlerin, IS NULL, IS NOT NULL, LIKE ve NOT LIKE gibi döndüren işlevlerdir.

  • Boş değerler (IS NULL ve IS NOT NULL)

    Örneğin, aşağıdaki sorgu, satırları alır Customer Tablo, müşterilerin satışçı kimliği null değil.

    SELECT s.Name
    FROM AdventureWorks.Sales.Customer c
    JOIN AdventureWorks.Sales.Store s
    ON c.CustomerID = S.CustomerID
    WHERE c.SalesPersonID IS NOT NULL
    ORDER BY s.Name
    

    Not

    null değerlerle karşılaştırırken dikkatli olun.Örneğin, belirtme = NULL, IS NULL belirten aynı değil.Daha fazla bilgi için bkz:Null değerler.

  • = (ALL tüm kayıtlar >Tümü <TÜM = TÜMÜ)

    Örneğin, aşağıdaki sorgu, sipariş ve ürün kimlikleri alır SalesOrderDetail Ürün miktarını sevkiyatının tablo için sınıfı herhangi bir ürünü sevk miktardan büyük H.

    USE AdventureWorks;
    GO
    SELECT OrdD1.SalesOrderID, OrdD1.ProductID
    FROM Sales.SalesOrderDetail OrdD1
    WHERE OrdD1.OrderQty > ALL
          (SELECT OrdD2.OrderQty
           FROM Sales.SalesOrderDetail OrdD2 JOIN Production.Product Prd
                 ON OrdD2.ProductID = Prd.ProductID
           WHERE Prd.Class = 'H')
    GO
    
  • Bu koşullar (VE, VEYA, DEĞIL) birleşimleri

    Örneğin, aşağıdaki sorgu hangi da liste fiyatını 500 TL veya ürün sınıfı olandan daha az olan tüm ürünleri alır. L ve ürün satırı S.

    SELECT ProductID, Name
    FROM AdventureWorks.Production.Product
    WHERE ListPrice < 500
       OR (Class = 'L' AND ProductLine = 'S')
    

    Dikkat bir Unicode dize ararken bir WHERE yan tümce, put N karakter arama dizesini önce:

    SELECT CustomerID 
    FROM AdventureWorks.Sales.Store 
    WHERE Name = N'Berglunds snabbkp'