PostgreSQL / Мэдээлэл унших (SELECT)

Мэдээлэл унших (SELECT)

SELECT бол SQL-ийн хамгийн чухал, хамгийн их ашиглагддаг команд юм. Өгөгдлийн сангаас мэдээлэл унших бүхий л үйлдэл SELECT-ээр эхэлдэг. Энгийн байдлаасаа эхлээд маш нарийн боловсруулалт хийх хүртэл SELECT нэг командаар бүгдийг чаддаг.

Үндсэн SELECT хэлбэр

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

sql
SELECT * FROM users;

* тэмдэг нь "бүх багана" гэсэн утга. Гэхдээ бодит системд * ашиглахаас зайлсхийх нь дээр — яагаад гэвэл хэрэггүй мэдээлэл ч дамжиж, хурд удааширна.

Зөвхөн хэрэгтэй баганаа заах нь зөв дадал:

sql
SELECT нэр, имэйл FROM users;
код
      нэр       |         имэйл
----------------+------------------------
 Болд Баатар    | bold@example.com
 Сарнай Дорж    | sarnai@example.com
 Ганбаяр Лхам   | ganbayar@example.com

Баганын хоч нэр — AS

Гаралтад баганын нэрийг өөрчлөн харуулахад AS ашиглана:

sql
SELECT
    нэр        AS "Хэрэглэгчийн нэр",
    имэйл      AS "И-мэйл хаяг",
    нас        AS age
FROM users;

AS нь зөвхөн гаралтын нэрийг өөрчилдөг — хүснэгтийн бодит баганын нэр өөрчлөгдөхгүй. Хоч нэрэнд зай байвал хашилт ("...") ашиглана.

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

SELECT-д шууд математик үйлдэл, функц ашиглаж болно:

sql
SELECT
    нэр,
    үнэ,
    үнэ * 1.1 AS "НӨАТ-тэй үнэ",
    үнэ * 0.9 AS "10% хямдралтай"
FROM products;

Мөрийн тоог тоолох:

sql
SELECT COUNT(*) AS нийт_хэрэглэгч FROM users;
код
 нийт_хэрэглэгч
----------------
              5

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

Давтагдах утгуудыг нэг удаа харуулахад DISTINCT ашиглана:

sql
-- Бүх нас (давтагдсан утгуудтай)
SELECT нас FROM users;

-- Зөвхөн давтагдашгүй насны утгууд
SELECT DISTINCT нас FROM users ORDER BY нас;
код
 нас
-----
  19
  22
  25
  27
  30

Ашигтай суурилагдсан функцүүд

PostgreSQL-д олон суурилагдсан функц байдаг. Хамгийн хэрэглэгддэг зарим нь:

sql
SELECT
    UPPER(нэр)              AS том_үсэг,
    LOWER(имэйл)            AS жижиг_үсэг,
    LENGTH(нэр)             AS нэрний_урт,
    TRIM('  Болд  ')        AS цэвэрлэсэн,
    NOW()                   AS одоогийн_цаг,
    CURRENT_DATE            AS өнөөдөр
FROM users
LIMIT 2;

Тоон функцүүд:

sql
SELECT
    ROUND(3.14159, 2)   AS дугуйлсан,     -- 3.14
    CEIL(4.1)           AS дээш,           -- 5
    FLOOR(4.9)          AS доош,           -- 4
    ABS(-15)            AS үнэмлэхүй       -- 15
;

Хүснэгтгүй SELECT

PostgreSQL-д хүснэгтгүйгээр ч SELECT ажиллуулж болно — туршилт, тооцоолол хийхэд хэрэгтэй:

sql
SELECT 1 + 1 AS үр_дүн;
SELECT NOW() AS одоо;
SELECT 'Сайн уу, PostgreSQL!' AS мэндчилгээ;

Жишээ: posts хүснэгтээс унших

Дараах хүснэгт дээр ажиллая:

sql
CREATE TABLE posts (
    id          BIGSERIAL PRIMARY KEY,
    гарчиг      TEXT NOT NULL,
    агуулга     TEXT,
    харагдсан   INTEGER DEFAULT 0,
    нийтлэгдсэн TIMESTAMPTZ DEFAULT NOW()
);

-- Мэдээлэл оруулах
INSERT INTO posts (гарчиг, харагдсан) VALUES
    ('PostgreSQL сурах нь', 150),
    ('SQL JOIN тайлбар',    320),
    ('Index яагаад чухал',  85);

-- Унших
SELECT
    id,
    гарчиг,
    харагдсан AS "Үзсэн тоо",
    DATE(нийтлэгдсэн) AS огноо
FROM posts;

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

WHERE нөхцөл ашиглан зөвхөн хэрэгтэй бичлэгүүдийг шүүж уншиж сурна — энэ нь SELECT-ийн хамгийн хүчирхэг хэрэгсэл.