MySQL / SELECT

SELECT

SELECT командаар хүснэгтийн өгөгдлийг уншина. MySQL-ийн хамгийн олон ашиглагддаг команд бөгөөд маш олон хэлбэрээр бичиж болно.

SELECT *

Хүснэгтийн бүх баганыг унших:

sql
SELECT * FROM users;
код
+----+------------------+------------------+---------------------+
| id | name             | email            | created_at          |
+----+------------------+------------------+---------------------+
|  1 | Болд Батбаяр     | bold@example.com | 2024-06-01 10:00:00 |
|  2 | Дорж Гантулга    | dorj@example.com | 2024-06-01 10:01:00 |
|  3 | Мөнх Эрдэнэ      | munkh@example.com| 2024-06-01 10:02:00 |
+----+------------------+------------------+---------------------+

* — "бүх багана" гэсэн утгатай. Туршилтад тохиромжтой ч бодит аппликейшнд ашиглахаас зайлсхийх нь дээр — шаардлагагүй өгөгдлийг сүлжээгээр дамжуулна, гүйцэтгэл удаашрана.


Тодорхой багана сонгох

sql
SELECT name, email FROM users;
код
+------------------+------------------+
| name             | email            |
+------------------+------------------+
| Болд Батбаяр     | bold@example.com |
| Дорж Гантулга    | dorj@example.com |
| Мөнх Эрдэнэ      | munkh@example.com|
+------------------+------------------+

Баганын дараалал SELECT-д бичсэн дарааллаар гарна — хүснэгтийн тодорхойлолтоос үл хамаарна.


DISTINCT — давтагдаагүй утгуудыг авах

sql
SELECT DISTINCT course_slug FROM lesson_progress;
код
+-------------+
| course_slug |
+-------------+
| javascript  |
| python      |
| react       |
+-------------+

DISTINCT байхгүй бол нэг курсийн олон хичээлийг дууссан хэрэглэгчид тухайн курсын нэр олон удаа давтагдаж гарна.

Олон баганатай DISTINCT — утгуудын хослол давтагдахгүй:

sql
SELECT DISTINCT user_id, course_slug FROM lesson_progress;

Column alias — AS

Үр дүнд баганын нэрийг өөрчлөн харуулах:

sql
SELECT
  name  AS хэрэглэгч,
  email AS и_мэйл
FROM users;
код
+------------------+------------------+
| хэрэглэгч        | и_мэйл           |
+------------------+------------------+
| Болд Батбаяр     | bold@example.com |
+------------------+------------------+

AS түлхүүр үгийг орхиж болно, гэхдээ тодорхой болгохын тулд бичих нь зүйтэй:

sql
SELECT name хэрэглэгч, email и_мэйл FROM users;  -- ижил үр дүн

Alias-д хоосон зай агуулбал backtick эсвэл ишлэлд хашна:

sql
SELECT name AS `хэрэглэгчийн нэр` FROM users;

Тооцооллын багана

SELECT дотор математик тооцоолол хийж болно:

sql
SELECT
  name,
  price,
  price * 1.1            AS price_with_vat,
  price * 0.9            AS discounted_price
FROM products;
код
+--------------------+----------+----------------+------------------+
| name               | price    | price_with_vat | discounted_price |
+--------------------+----------+----------------+------------------+
| Утасны дэр         |  4990.00 |       5489.000 |         4491.000 |
| Bluetooth чихэвч   | 29900.00 |      32890.000 |        26910.000 |
+--------------------+----------+----------------+------------------+

Бусад тооцооллын жишээ:

sql
SELECT
  name,
  stock,
  price,
  stock * price          AS total_value,
  ROUND(price * 1.1, 2)  AS with_tax
FROM products;

ROUND(тоо, оронгийн_тоо) — тоог тайрна.


Тогтмол утга оруулах

sql
SELECT
  name,
  price,
  'MNT'          AS currency,
  CURRENT_DATE   AS today
FROM products;
код
+------------------+----------+----------+------------+
| name             | price    | currency | today      |
+------------------+----------+----------+------------+
| Утасны дэр       |  4990.00 | MNT      | 2024-06-01 |
+------------------+----------+----------+------------+

SELECT без FROM

MySQL дээр хүснэгтгүйгээр тооцоолол хийх боломжтой:

sql
SELECT 2 + 2;
SELECT NOW();
SELECT UPPER('сайн уу');
SELECT VERSION();
код
+-------+
| 2 + 2 |
+-------+
|     4 |
+-------+

Функцүүдийг туршиж үзэхэд хэрэгтэй.


Дэлгэрэнгүй жишээ

sql
SELECT
  p.id                           AS дугаар,
  p.name                         AS бараа,
  p.price                        AS үнэ,
  p.stock                        AS нөөц,
  p.price * p.stock              AS нийт_өртөг,
  IF(p.stock > 0, 'Байна', 'Дууссан') AS байдал
FROM products AS p;
код
+--------+--------------------+----------+------+------------+----------+
| дугаар | бараа              | үнэ      | нөөц | нийт_өртөг | байдал   |
+--------+--------------------+----------+------+------------+----------+
|      1 | Утасны дэр         |  4990.00 |   50 |  249500.00 | Байна    |
|      2 | Bluetooth чихэвч   | 29900.00 |   20 |  598000.00 | Байна    |
|      3 | Цэнэглэгч кабель   |  1990.00 |  100 |  199000.00 | Байна    |
|      4 | Ухаалаг цаг        | 89900.00 |   10 |  899000.00 | Байна    |
+--------+--------------------+----------+------+------------+----------+

Хүснэгтэд alias ашигласан: FROM products AS p → баганыг p.name хэлбэрээр заана. JOIN хэрэглэх үед энэ маш хэрэгтэй.


Дараагийн хичээлд:

WHERE нөхцөлөөр өгөгдлийг шүүх — харьцуулах оператор, BETWEEN, IN, LIKE, NULL шалгах аргуудыг үзнэ.