WHERE Clause और Operators
WHERE Rows कैसे Filter करता है
WHERE candidate rows के लिए condition evaluate करता और केवल TRUE result वाली rows रखता है। FALSE और UNKNOWN filter pass नहीं करते। NULL से comparison सामान्यतः UNKNOWN देता है, इसलिए इसे समझना जरूरी है।
SELECT student_id, full_name, marks
FROM students
WHERE marks >= 88
ORDER BY marks DESC;
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 equality | marks <=> 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;
AND, OR और NOT से Conditions जोड़ें
SELECT full_name, marks
FROM students
WHERE status = 'Active' AND marks >= 88
ORDER BY marks DESC;
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;
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;
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;
IN same column पर कई OR conditions दोहराने से अधिक readable है।
Text pattern: LIKE
SELECT full_name
FROM students
WHERE full_name LIKE 'M%';
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 से अलग भेजता है।
अभ्यास
- 85 से 95 inclusive marks वाले active students लौटाएँ।
- IN से X-A या XI-A के students खोजें।
- Underscore pattern से वे names खोजें जिनका दूसरा character
aहो। - Unknown marks वाली rows का filter लिखें।
NOT status = 'Active'औरstatus IS NULLका अंतर बताएँ।- 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 संदर्भ
- SELECT Statement — MySQL 8.4
- Comparison Functions and Operators
- Logical Operators
- Pattern Matching
- NULL Values के साथ कार्य
References 14 August 2026 को review किए गए। Results four-row learning dataset पर आधारित हैं।