WHERE нөхцөл
WHERE нь SELECT, UPDATE, DELETE командуудад нөхцөл тавьж, шүүх өгөгдлийг тодорхойлно. Зөв WHERE бичих нь MySQL-ийн хамгийн чухал ур чадваруудын нэг.
Харьцуулах операторууд
SELECT * FROM products WHERE price = 4990.00; -- тэнцүү
SELECT * FROM products WHERE price != 4990.00; -- тэнцүү биш
SELECT * FROM products WHERE price <> 4990.00; -- тэнцүү биш (ижил утга)
SELECT * FROM products WHERE price > 10000; -- их
SELECT * FROM products WHERE price < 10000; -- бага
SELECT * FROM products WHERE price >= 4990.00; -- их буюу тэнцүү
SELECT * FROM products WHERE price <= 29900.00; -- бага буюу тэнцүү
Текст утгатай харьцуулах:
SELECT * FROM users WHERE name = 'Болд Батбаяр';
MySQL-д текст харьцуулалт анхдагчаар case-insensitive — жижиг/том үсгийг ялгахгүй:
SELECT * FROM users WHERE name = 'болд батбаяр'; -- ижил үр дүн
BETWEEN — хүрээнд байгаа эсэх
SELECT * FROM products
WHERE price BETWEEN 5000 AND 50000;
+----+--------------------+----------+
| id | name | price |
+----+--------------------+----------+
| 2 | Bluetooth чихэвч | 29900.00 |
+----+--------------------+----------+
BETWEEN a AND b нь >= a AND <= b-тэй яг адил — хязгаарын утгуудыг оруулна.
Огноотой ашиглах:
SELECT * FROM orders
WHERE created_at BETWEEN '2024-01-01' AND '2024-12-31';
IN — жагсаалтаас нэг нь байгаа эсэх
SELECT * FROM products
WHERE id IN (1, 3, 4);
+----+--------------------+----------+------+
| id | name | price | stock|
+----+--------------------+----------+------+
| 1 | Утасны дэр | 4990.00 | 50 |
| 3 | Цэнэглэгч кабель | 1990.00 | 100 |
| 4 | Ухаалаг цаг | 89900.00 | 10 |
+----+--------------------+----------+------+
Текстийн жагсаалт:
SELECT * FROM users
WHERE name IN ('Болд Батбаяр', 'Мөнх Эрдэнэ');
NOT IN — жагсаалтад байхгүй мөрүүдийг авах:
SELECT * FROM products
WHERE id NOT IN (2, 4);
LIKE — загвараар хайх
LIKE нь текст хайхад ашиглагдах бөгөөд хоёр тусгай тэмдэгт ашиглана.
% — ямар ч тооны тэмдэгт
-- "Б"-ээр эхэлдэг
SELECT * FROM users WHERE name LIKE 'Б%';
-- "@example.com"-р төгсдөг
SELECT * FROM users WHERE email LIKE '%@example.com';
-- Дунд нь "чихэ" агуулсан
SELECT * FROM products WHERE name LIKE '%чихэ%';
_ — яг нэг тэмдэгт
-- "Б" + яг нэг тэмдэгт + "лд": "Болд", "Булд"
SELECT * FROM users WHERE name LIKE 'Б_лд';
-- 4 тэмдэгттэй нэр
SELECT * FROM users WHERE name LIKE '____';
Хослуулан ашиглах
-- "gmail.com" имэйлтэй хэрэглэгчид
SELECT * FROM users WHERE email LIKE '%@gmail.com';
-- "001"-ээр дуусдаг SKU
SELECT * FROM products WHERE sku LIKE '%001';
NOT LIKE — загварт таарахгүй мөрүүд:
SELECT * FROM users WHERE email NOT LIKE '%@example.com';
Гүйцэтгэлийн тэмдэглэл: % эхэнд байвал (LIKE '%утга') индексийг ашиглахгүй тул том хүснэгтэд удаан ажиллана.
NULL шалгах
NULL бол "утга байхгүй" гэсэн тусгай төлөв — 0 эсвэл хоосон мөр биш. NULL-тэй = харьцуулалт хийж болохгүй.
-- Буруу — үр дүн гарахгүй
SELECT * FROM users WHERE phone = NULL;
-- Зөв
SELECT * FROM users WHERE phone IS NULL;
SELECT * FROM users WHERE phone IS NOT NULL;
IS NULL жишээ
-- Утасны дугаар оруулаагүй хэрэглэгчид
SELECT name, email
FROM users
WHERE phone IS NULL;
IS NOT NULL жишээ
-- Утасны дугаартай хэрэглэгчид
SELECT name, phone
FROM users
WHERE phone IS NOT NULL;
AND, OR, NOT — логик операторууд
AND — хоёр нөхцөл хоёулаа биелэх ёстой
SELECT * FROM products
WHERE price > 5000
AND stock > 0;
OR — аль нэг нөхцөл биелэхэд хангалттай
SELECT * FROM products
WHERE price < 2000
OR price > 80000;
NOT — нөхцөлийг эсэргүүцэх
SELECT * FROM products
WHERE NOT is_active = TRUE;
-- эсвэл
SELECT * FROM products
WHERE is_active = FALSE;
Хосолсон нөхцөл
AND нь OR-оос өндөр давуу эрхтэй — буруу үр дүн гарахаас сэргийлж хаалт ашиглах нь зүйтэй.
-- Анхааруулга: AND эхэлж биелнэ
SELECT * FROM products
WHERE price < 2000 OR price > 50000 AND stock > 5;
-- ↑ (price > 50000 AND stock > 5) OR (price < 2000) гэж ажиллана
-- Зөв хаалт ашигласан
SELECT * FROM products
WHERE (price < 2000 OR price > 50000) AND stock > 5;
Нарийн нөхцөлтэй жишээ
-- 5,000-аас 30,000 хүртэл үнэтэй, нөөцтэй барааны нэр ба үнэ
SELECT name, price, stock
FROM products
WHERE price BETWEEN 5000 AND 30000
AND stock > 0
AND is_active = TRUE;
-- "gmail" эсвэл "yahoo" имэйлтэй хэрэглэгчид
SELECT name, email
FROM users
WHERE email LIKE '%@gmail.com'
OR email LIKE '%@yahoo.com';
-- Утасны дугааргүй, 2024 оноос хойш нэгдсэн хэрэглэгчид
SELECT name, email, created_at
FROM users
WHERE phone IS NULL
AND created_at >= '2024-01-01';
Дараагийн хичээлд:
ORDER BY болон LIMIT — үр дүнг эрэмбэлэх, тоог хязгаарлах, pagination хийх аргуудыг үзнэ.