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)