Free tutorials & notes in Hindi & English · Clean code examples · Mobile friendly learning
MySQL + SQL · Lesson 47

WHERE Clause और Operators

WHERE Rows कैसे Filter करता है

WHERE candidate rows के लिए condition evaluate करता और केवल TRUE result वाली rows रखता है। FALSE और UNKNOWN filter pass नहीं करते। NULL से comparison सामान्यतः UNKNOWN देता है, इसलिए इसे समझना जरूरी है।

Learning data: students हैं Aarav (X-A, 86.50, Active), Meera (X-A, 91.00, Active), Kabir (X-B, 74.00, Inactive) और Sana (X-B, 88.50, Active)।
SELECT student_id, full_name, marks
FROM students
WHERE marks >= 88
ORDER BY marks DESC;
Result student_id | full_name | marks 2 | Meera | 91.00 4 | Sana | 88.50

Condition semantically हर candidate row पर लागू होती है। MySQL index से सभी rows पढ़ना टाल सकता है, लेकिन returned result उसी logic का पालन करेगा।

Comparison Operators

Operatorअर्थExample
=बराबरstatus = 'Active'
<> या !=बराबर नहींclass_name <> 'X-A'
>, >=बड़ा, कम से कमmarks >= 80
<, <=छोटा, अधिकतमmarks < 75
<=>MySQL NULL-safe equalitymarks <=> NULL

Known values के लिए normal = और readable NULL check के लिए IS NULL उपयोग करें। MySQL का <=> advanced comparison में useful है जहाँ दो NULL equal मानने हों, पर यह product-specific है।

SELECT full_name
FROM students
WHERE class_name <> 'X-A'
ORDER BY student_id;
Result full_name Kabir Sana

AND, OR और NOT से Conditions जोड़ें

SELECT full_name, marks
FROM students
WHERE status = 'Active' AND marks >= 88
ORDER BY marks DESC;
Result full_name | marks Meera | 91.00 Sana | 88.50

AND में दोनों conditions, OR में कम से कम एक condition और NOT में condition का उलटा चाहिए। AND की precedence OR से अधिक है, इसलिए mixed business logic में parentheses लगाएँ:

SELECT full_name, class_name, status
FROM students
WHERE (class_name = 'X-A' OR class_name = 'X-B')
  AND status = 'Active'
ORDER BY student_id;
Result Aarav | X-A | Active Meera | X-A | Active Sana | X-B | Active
Dangerous ambiguity: class_name = 'X-A' OR class_name = 'X-B' AND status = 'Active' AND part को group मानता है और inactive X-A row शामिल कर सकता है। Parentheses असली rule साफ करते हैं।

BETWEEN, IN और LIKE

Inclusive range: BETWEEN

SELECT full_name, marks
FROM students
WHERE marks BETWEEN 80 AND 90
ORDER BY marks;
Result Aarav | 86.50 Sana | 88.50

BETWEEN दोनों boundaries शामिल करता है। Lower और upper values उलटी हों तो ordinary numeric value match नहीं होती।

Set membership: IN

SELECT full_name, class_name
FROM students
WHERE class_name IN ('X-A', 'XI-A')
ORDER BY student_id;
Result Aarav | X-A Meera | X-A

IN same column पर कई OR conditions दोहराने से अधिक readable है।

Text pattern: LIKE

SELECT full_name
FROM students
WHERE full_name LIKE 'M%';
Result Meera

LIKE pattern में % zero या अधिक characters और _ exactly one character match करता है। Case तथा accent behavior collation पर depend करता है। '%era' जैसा leading wildcard normal B-tree index के efficient use को अक्सर रोकता है।

NULL और Reliable Date Filters

NULL का अर्थ known value उपलब्ध नहीं है। marks = NULL TRUE नहीं होता, इसलिए लिखें:

SELECT student_id, full_name
FROM students
WHERE marks IS NULL;

SELECT student_id, full_name
FROM students
WHERE marks IS NOT NULL;

Timestamp के लिए column पर function लगाने या final fractional second guess करने से half-open interval अधिक reliable है:

SELECT student_id, full_name, created_at
FROM students
WHERE created_at >= '2026-08-01'
  AND created_at <  '2026-09-01'
ORDER BY created_at;

इसमें पूरा August शामिल और 1 September बाहर है। Indexed column unwrapped रहता है, जिससे index use आसान हो सकता है। Timestamps को application की time-zone policy के अनुसार समझें।

Safety, Parameters और Performance

  • Change से पहले preview: UPDATE या DELETE से पहले exact WHERE वाला SELECT चलाएँ।
  • Untrusted values bind करें: user input concatenate करने के बजाय prepared statements लें।
  • Data types match करें: numeric column को number और date column को valid date से compare करें।
  • Indexed column पर unnecessary function न लगाएँ: semantics अनुमति दें तो date filter range में लिखें।
  • Measured access path index करें: selective, frequently filtered columns benefit कर सकते हैं, पर हर index storage और write cost जोड़ता है।
  • EXPLAIN से verify करें: index use का अनुमान न लगाएँ।
SELECT student_id, full_name
FROM students
WHERE class_name = ? AND status = ?;

Question marks prepared-statement placeholders हैं। Driver bound values को SQL syntax से अलग भेजता है।

अभ्यास

  1. 85 से 95 inclusive marks वाले active students लौटाएँ।
  2. IN से X-A या XI-A के students खोजें।
  3. Underscore pattern से वे names खोजें जिनका दूसरा character a हो।
  4. Unknown marks वाली rows का filter लिखें।
  5. NOT status = 'Active' और status IS NULL का अंतर बताएँ।
  6. August 2026 की half-open timestamp range लिखकर दोनों boundaries समझाएँ।

त्वरित सारांश

  • WHERE केवल TRUE condition वाली rows रखता है।
  • Known values के लिए comparison operators और missing values के लिए IS NULL लें।
  • AND की precedence OR से अधिक; parentheses mixed logic सुरक्षित बनाते हैं।
  • BETWEEN inclusive, IN membership और LIKE pattern test करता है।
  • Prepared parameters, preview queries और measured indexing safety बढ़ाते हैं।

Official संदर्भ

References 14 August 2026 को review किए गए। Results four-row learning dataset पर आधारित हैं।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

WHERE clause किस लिए उपयोग होता है?
WHERE केवल वे rows रखता है जिनकी condition TRUE हो। इसका उपयोग SELECT, UPDATE और DELETE में होता है; data-changing statements को limit करने में यह विशेष रूप से महत्त्वपूर्ण है।
= और IS NULL में क्या अंतर है?
Equals operator known values compare करता है। NULL unknown या missing information है, इसलिए उसे = NULL से नहीं, IS NULL या IS NOT NULL से test करें।
क्या MySQL में BETWEEN inclusive है?
हाँ। value BETWEEN low AND high दोनों boundary values शामिल करता है और ordinary comparable values के लिए value >= low AND value <= high के समान है।
क्या MySQL LIKE case ignore करता है?
यह expression collation पर निर्भर है। कई default _ci collations case-insensitive होती हैं, जबकि binary या case-sensitive collations अलग behave करती हैं। Schema देखे बिना assume न करें।
AND और OR के साथ parentheses क्यों जरूरी हैं?
AND की precedence OR से अधिक है। Parentheses intended grouping साफ करते, logic errors रोकते और maintenance सुरक्षित बनाते हैं।
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.