SQL                
            WHERE और HAVING का उपयोग करके फ़िल्टर परिणाम
        
        
            
    खोज…
वाक्य - विन्यास
-  Column_name चुनें 
 तालिका_नाम से
 जहां column_name ऑपरेटर मान है
-  स्तंभ_नाम, कुल मिला कर चयन करें (स्तंभ_नाम) 
 तालिका_नाम से
 Column_name द्वारा समूह
 एग्रीगेट_फंक्शन (column_name) ऑपरेटर मान को HAVING करना
WHERE क्लॉज केवल उन पंक्तियों को लौटाता है जो इसके मानदंडों से मेल खाती हैं
स्टीम में उनके स्टोर पेज के $ 10 सेक्शन के तहत एक गेम है। उनके सिस्टम के दिल में कहीं गहरे, शायद एक ऐसी क्वेरी है जो कुछ इस तरह दिखती है:
SELECT * 
FROM Items 
WHERE Price < 10
एक सूची में निहित मूल्य के साथ पंक्तियों को वापस करने के लिए IN का उपयोग करें
यह उदाहरण उदाहरण डेटाबेस से कार तालिका का उपयोग करता है।
SELECT *
FROM Cars
WHERE TotalCost IN (100, 200, 300)
 यह क्वेरी कार # 2 लौटाएगी जिसकी लागत 200 है और कार # 3 जिसकी लागत 100 है। ध्यान दें कि यह OR , उदा: के साथ कई खंडों का उपयोग करने के बराबर है: 
SELECT *
FROM Cars
WHERE TotalCost = 100 OR TotalCost = 200 OR TotalCost = 300
मिलान स्ट्रिंग और सबस्ट्रिंग खोजने के लिए LIKE का उपयोग करें
LIKE ऑपरेटर पर पूर्ण प्रलेखन देखें।
यह उदाहरण उदाहरण डेटाबेस से कर्मचारी तालिका का उपयोग करता है।
SELECT *
FROM Employees
WHERE FName LIKE 'John'
यह क्वेरी केवल कर्मचारी # 1 को लौटाएगी, जिसका पहला नाम बिल्कुल 'जॉन' से मेल खाता है।
SELECT *
FROM Employees
WHERE FName like 'John%'
 % जोड़ने से आप एक विकल्प के लिए खोज कर सकते हैं: 
-  John%- किसी भी कर्मचारी को लौटाएगा जिसका नाम 'जॉन' से शुरू होता है, उसके बाद किसी भी राशि का वर्ण
-  %John- किसी भी कर्मचारी को लौटाएगा जिसका नाम 'जॉन' के साथ समाप्त होता है, किसी भी राशि के पात्रों द्वारा आगे बढ़ना
-  %John%- किसी भी कर्मचारी को वापस कर देगा जिसका नाम मूल्य के भीतर कहीं भी 'जॉन' है
इस स्थिति में, क्वेरी Employee # 2 लौटा देगी जिसका नाम 'John' है और साथ ही Employee # 4 जिसका नाम 'Johnathon' है।
जहां NULL / NOT NULL मान के साथ क्लॉज है
SELECT *
FROM Employees
WHERE ManagerId IS NULL
 यह कथन सभी कर्मचारी रिकॉर्ड लौटाएगा जहां ManagerId कॉलम का मान NULL । 
परिणाम होगा:
Id    FName    LName    PhoneNumber    ManagerId    DepartmentId
1     James    Smith    1234567890     NULL         1
SELECT *
FROM Employees
WHERE ManagerId IS NOT NULL
 यह कथन सभी कर्मचारी रिकॉर्ड लौटाएगा जहां ManagerId का मान NULL नहीं NULL । 
परिणाम होगा:
Id    FName       LName     PhoneNumber    ManagerId    DepartmentId
2     John        Johnson   2468101214     1            1
3     Michael     Williams  1357911131     1            2
4     Johnathon   Smith     1212121212     2            1
 नोट: यदि आप WHERE ManagerId = NULL को WHERE ManagerId = NULL या WHERE ManagerId <> NULL बदल देते हैं तो वही क्वेरी परिणाम नहीं देगी। 
एग्रीगेट फंक्शंस के साथ HAVING का उपयोग करें
 WHERE क्लॉज के विपरीत, HAVING का उपयोग कुल कार्यों के साथ किया जा सकता है। 
एक समुच्चय समारोह एक ऐसा कार्य है जिसमें कई पंक्तियों के मूल्यों को एक साथ कुछ महत्वपूर्ण अर्थों या मापों ( विकिपीडिया ) के एकल मान बनाने के लिए कुछ मानदंडों पर इनपुट के रूप में वर्गीकृत किया जाता है।
 सामान्य कुल कार्यों में COUNT() , SUM() , MIN() , और MAX() । 
यह उदाहरण उदाहरण डेटाबेस से कार तालिका का उपयोग करता है।
SELECT CustomerId, COUNT(Id) AS [Number of Cars]
FROM Cars
GROUP BY CustomerId
HAVING COUNT(Id) > 1
 यह क्वेरी किसी भी ग्राहक की एक से अधिक कार रखने वाले ग्राहकों की Number of Cars और CustomerId Number of Cars वापस कर देगी। इस मामले में, एकमात्र ग्राहक जिसके पास एक से अधिक कार है, वह ग्राहक # 1 है। 
परिणाम इस तरह दिखेंगे:
| ग्राहक आईडी, ग्राहक पहचान | कारों की संख्या | 
|---|---|
| 1 | 2 | 
फ़िल्टर परिणामों के लिए BETWEEN का उपयोग करें
निम्नलिखित उदाहरण आइटम बिक्री और ग्राहक नमूना डेटाबेस का उपयोग करते हैं।
ध्यान दें: ऑपरेटर के बीच समावेशी है।
नंबर के साथ BETWEEN ऑपरेटर का उपयोग करना:
SELECT * From ItemSales
WHERE Quantity BETWEEN 10 AND 17
 यह क्वेरी सभी ItemSales रिकॉर्ड्स को ItemSales , जिसमें एक मात्रा है जो 10 से अधिक या बराबर है और 17 के बराबर या उससे कम है। परिणाम ItemSales दिखाई देंगे: 
| ईद | बिक्री की तिथी | सामान आईडी | मात्रा | कीमत | 
|---|---|---|---|---|
| 1 | 2013-07-01 | 100 | 10 | 34.5 | 
| 4 | 2013-07-23 | 100 | 15 | 34.5 | 
| 5 | 2013-07-24 | 145 | 10 | 34.5 | 
दिनांक मानों के साथ BETWEEN ऑपरेटर का उपयोग करना:
SELECT * From ItemSales
WHERE SaleDate BETWEEN '2013-07-11' AND '2013-05-24'
 यह क्वेरी एक SaleDate साथ सभी ItemSales रिकॉर्ड को SaleDate जो 11 जुलाई, 2013 से अधिक या 24 मई, 2013 के बराबर या उससे कम है। 
| ईद | बिक्री की तिथी | सामान आईडी | मात्रा | कीमत | 
|---|---|---|---|---|
| 3 | 2013-07-11 | 100 | 20 | 34.5 | 
| 4 | 2013-07-23 | 100 | 15 | 34.5 | 
| 5 | 2013-07-24 | 145 | 10 | 34.5 | 
तारीखों के बजाय डेटाइम मूल्यों की तुलना करते समय, आपको डेटटाइम मूल्यों को डेट वैल्यू में बदलने या सही परिणाम प्राप्त करने के लिए 24 घंटे जोड़ने या घटाने की आवश्यकता हो सकती है।
पाठ मानों के साथ बीटा ऑपरेटर का उपयोग करना:
SELECT Id, FName, LName FROM Customers
WHERE LName BETWEEN 'D' AND 'L';
लाइव उदाहरण: एसक्यूएल फिडल
यह क्वेरी उन सभी ग्राहकों को लौटाएगी, जिनका नाम वर्णानुक्रम में 'D' और 'L' अक्षर के बीच आता है। इस स्थिति में, ग्राहक # 1 और # 3 वापस आ जाएगा। ग्राहक # 2, जिसका नाम 'M' से शुरू होता है, उसे शामिल नहीं किया जाएगा।
| ईद | fName | LName | 
|---|---|---|
| 1 | विलियम | जोन्स | 
| 3 | रिचर्ड | डेविस | 
समानता
SELECT * FROM Employees 
 यह कथन Employees से सभी पंक्तियों को वापस करेगा। 
Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
1    James     Smith    1234567890    NULL        1               1000    01-01-2002    01-01-2002    01-01-2002
2    John      Johnson  2468101214    1           1               400     23-03-2005    23-03-2005    01-01-2002
3    Michael   Williams 1357911131    1           2               600     12-05-2009    12-05-2009    NULL
4    Johnathon Smith    1212121212    2           1               500     24-07-2016    24-07-2016    01-01-2002
 अपने SELECT कथन के अंत में WHERE का उपयोग करने से आप लौटी हुई पंक्तियों को एक शर्त पर सीमित कर सकते हैं। इस मामले में, जहाँ = चिन्ह का उपयोग करके एक सटीक मिलान होता है: 
SELECT * FROM Employees WHERE DepartmentId = 1
 केवल उन पंक्तियों को वापस करेंगे जहाँ DepartmentId 1 बराबर है: 
Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
1    James     Smith    1234567890    NULL        1               1000    01-01-2002    01-01-2002    01-01-2002
2    John      Johnson  2468101214    1           1               400     23-03-2005    23-03-2005    01-01-2002
4    Johnathon Smith    1212121212    2           1               500     24-07-2016    24-07-2016    01-01-2002
और या
 आप कई ऑपरेटरों को एक साथ जोड़कर अधिक जटिल WHERE स्थिति बना सकते हैं। निम्न उदाहरण Employees तालिका का उपयोग करते हैं: 
Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
1    James     Smith    1234567890    NULL        1               1000    01-01-2002    01-01-2002    01-01-2002
2    John      Johnson  2468101214    1           1               400     23-03-2005    23-03-2005    01-01-2002
3    Michael   Williams 1357911131    1           2               600     12-05-2009    12-05-2009    NULL
4    Johnathon Smith    1212121212    2           1               500     24-07-2016    24-07-2016    01-01-2002
तथा
SELECT * FROM Employees WHERE DepartmentId = 1 AND ManagerId = 1
वापस होगा:
Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
2    John      Johnson  2468101214    1           1               400     23-03-2005    23-03-2005    01-01-2002
या
SELECT * FROM Employees WHERE DepartmentId = 2 OR ManagerId = 2
वापस होगा:
Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
3    Michael   Williams 1357911131    1           2               600     12-05-2009    12-05-2009    NULL
4    Johnathon Smith    1212121212    2           1               500     24-07-2016    24-07-2016    01-01-2002
किसी समूह में कई स्थितियों की जाँच के लिए HAVING का उपयोग करें
आदेश तालिका
| ग्राहक आईडी, ग्राहक पहचान | उत्पाद आइ डि | मात्रा | कीमत | 
|---|---|---|---|
| 1 | 2 | 5 | 100 | 
| 1 | 3 | 2 | 200 | 
| 1 | 4 | 1 | 500 | 
| 2 | 1 | 4 | 50 | 
| 3 | 5 | 6 | 700 | 
उन ग्राहकों की जांच करने के लिए जिन्होंने दोनों का आदेश दिया है - ProductID 2 और 3, HAVING का उपयोग किया जा सकता है
 select customerId
 from orders
 where productID in (2,3)
 group by customerId
 having count(distinct productID) = 2
प्रतिलाभ की मात्रा:
| ग्राहक आईडी, ग्राहक पहचान | 
|---|
| 1 | 
क्वेरी प्रश्नों में केवल ProductID के साथ रिकॉर्ड का चयन करती है और 2 प्रोडक्ट्स वाले समूहों के लिए HAVING क्लॉज चेक के साथ और केवल एक ही नहीं होता है।
एक और संभावना होगी
 select customerId
 from orders
 group by customerId
 having sum(case when productID = 2 then 1 else 0 end) > 0
    and sum(case when productID = 3 then 1 else 0 end) > 0
यह क्वेरी केवल उन समूहों का चयन करती है जिनके पास productID 2 के साथ कम से कम एक रिकॉर्ड है और productID 3 के साथ कम से कम एक है।
जहां EXISTS है
 TableName में रिकॉर्ड का चयन करेंगे जिनके पास TableName1 में मिलान के रिकॉर्ड हैं। 
SELECT * FROM TableName t WHERE EXISTS (
    SELECT 1 FROM TableName1 t1 where t.Id = t1.Id)