ORDER BY ба LIMIT
ORDER BY үр дүнг эрэмбэлнэ. LIMIT буцаах мөрийн тоог хязгаарлана. Хоёулаа pagination болон гүйцэтгэл сайжруулахад зайлшгүй шаардлагатай.
ORDER BY
SELECT * FROM products
ORDER BY price;
+----+--------------------+----------+
| id | name | price |
+----+--------------------+----------+
| 3 | Цэнэглэгч кабель | 1990.00 |
| 1 | Утасны дэр | 4990.00 |
| 2 | Bluetooth чихэвч | 29900.00 |
| 4 | Ухаалаг цаг | 89900.00 |
+----+--------------------+----------+
ORDER BY анхдагчаар ASC (өсөхөөр) эрэмбэлнэ.
ASC ба DESC
-- Өсөхөөр (анхдагч)
SELECT * FROM products ORDER BY price ASC;
-- Буурахаар
SELECT * FROM products ORDER BY price DESC;
-- Шинэ бүртгэлүүд эхэнд
SELECT * FROM users ORDER BY created_at DESC;
+----+------------------+------------------+---------------------+
| id | name | email | created_at |
+----+------------------+------------------+---------------------+
| 3 | Мөнх Эрдэнэ | munkh@example.com| 2024-06-01 10:02:00 |
| 2 | Дорж Гантулга | dorj@example.com | 2024-06-01 10:01:00 |
| 1 | Болд Батбаяр | bold@example.com | 2024-06-01 10:00:00 |
+----+------------------+------------------+---------------------+
Олон баганаар эрэмбэлэх
Эхний баганын утгууд тэнцүү бол хоёр дахь баганаар эрэмбэлнэ:
SELECT name, price, stock
FROM products
ORDER BY price ASC, stock DESC;
+--------------------+----------+------+
| name | price | stock|
+--------------------+----------+------+
| Цэнэглэгч кабель | 1990.00 | 100 |
| Утасны дэр | 4990.00 | 50 |
| Bluetooth чихэвч | 29900.00 | 20 |
| Ухаалаг цаг | 89900.00 | 10 |
+--------------------+----------+------+
Энд price тэнцүү байгаа мөрүүд байхгүй тул stock DESC нөлөөлөхгүй байна. Ижил үнэтэй бараа олон байсан бол тэдгээрийн дотор нөөцөөр буурахаар эрэмбэлэгдэнэ.
Alias-аар эрэмбэлэх
SELECT-д тодорхойлсон alias-ыг ORDER BY-д ашиглаж болно:
SELECT
name,
price * stock AS total_value
FROM products
ORDER BY total_value DESC;
+--------------------+-------------+
| name | total_value |
+--------------------+-------------+
| Ухаалаг цаг | 899000.00 |
| Bluetooth чихэвч | 598000.00 |
| Утасны дэр | 249500.00 |
| Цэнэглэгч кабель | 199000.00 |
+--------------------+-------------+
NULL утгуудын эрэмбэ
ORDER BY ASC — NULL утгууд эхэнд гарна.
ORDER BY DESC — NULL утгууд сүүлд гарна.
-- NULL утгуудыг сүүлд гаргах (ASC үед)
SELECT name, phone
FROM users
ORDER BY phone IS NULL ASC, phone ASC;
LIMIT — мөрийн тоог хязгаарлах
SELECT * FROM products
ORDER BY price DESC
LIMIT 3;
+----+------------------+----------+
| id | name | price |
+----+------------------+----------+
| 4 | Ухаалаг цаг | 89900.00 |
| 2 | Bluetooth чихэвч | 29900.00 |
| 1 | Утасны дэр | 4990.00 |
+----+------------------+----------+
Хамгийн үнэтэй 1 барааг авах:
SELECT * FROM products
ORDER BY price DESC
LIMIT 1;
LIMIT-гүйгээр том хүснэгтийн бүх өгөгдлийг татах нь сервер болон сүлжээнд ачаалал өгнө — үргэлж LIMIT ашиглах нь зүйтэй.
LIMIT n OFFSET m — pagination
OFFSET нь эхнийхийг алгасах мөрийн тоог заана:
-- 1-р хуудас: 1–5 дугаарт мөрүүд
SELECT * FROM products ORDER BY id LIMIT 5 OFFSET 0;
-- 2-р хуудас: 6–10 дугаарт мөрүүд
SELECT * FROM products ORDER BY id LIMIT 5 OFFSET 5;
-- 3-р хуудас: 11–15 дугаарт мөрүүд
SELECT * FROM products ORDER BY id LIMIT 5 OFFSET 10;
Томьёо: OFFSET = (хуудасны_дугаар - 1) × хуудасны_хэмжээ
Товч хэлбэр — LIMIT offset, count:
SELECT * FROM products ORDER BY id LIMIT 0, 5; -- 1-р хуудас
SELECT * FROM products ORDER BY id LIMIT 5, 5; -- 2-р хуудас
SELECT * FROM products ORDER BY id LIMIT 10, 5; -- 3-р хуудас
Node.js дахь pagination жишээ
const page = 2;
const perPage = 10;
const offset = (page - 1) * perPage;
const query = `
SELECT * FROM products
ORDER BY created_at DESC
LIMIT ${perPage} OFFSET ${offset}
`;
WHERE + ORDER BY + LIMIT хослол
SELECT командын бүрэн дараалал:
SELECT багана
FROM хүснэгт
WHERE нөхцөл
ORDER BY багана ASC|DESC
LIMIT тоо OFFSET тоо;
Жишээ — нөөцтэй хямд 3 бараа:
SELECT name, price, stock
FROM products
WHERE stock > 0
ORDER BY price ASC
LIMIT 3;
Жишээ — сүүлийн 5 захиалга:
SELECT *
FROM orders
ORDER BY created_at DESC
LIMIT 5;
Жишээ — хамгийн их нөөцтэй 10 бараа, 2-р хуудас:
SELECT name, stock
FROM products
ORDER BY stock DESC
LIMIT 10 OFFSET 10;
Дараагийн хичээлд:
UPDATE командаар байгаа өгөгдлийг өөрчлөх — нэг ба олон баганыг зэрэг шинэчлэх, WHERE заавал ашиглах аргуудыг үзнэ.