Програми для обліку

Українське програмне забезпечення з відкритим кодом

Sql

Дописи

Програмування / Sql

30.05.2024 10:17 Sql

Вибірка даних з таблиці | PostgreSQL

Метод SELECT

Для прикладу буде використовуватися таблиця tab1 з двома полями id та name. Поле id тип int а поле name тип text.

Вибірка всіх полів з таблиці tab1
SELECT * FROM tab1
Вибірка полів id та name з таблиці tab1
SELECT id, name FROM tab1
Сортування ORDER BY
Сортування дозволяє упорядкувати вибірку по значенню одного або декількох полів.

Вибірка із сортуванням по полю name. Пряме сортування ASC, зворотнє DESC
SELECT id, name FROM tab1 ORDER BY name ASC
Результат:
Вибірка із сортуванням по полю

Умова WHERE
Умова дозволяє відфільтрувати вибірку по значенню одного або декількох полів.

Вибірка полів id та name з фільтром по полю id
SELECT id, name FROM tab1 WHERE id > 1
Результат:
Умова WHERE

Групування GROUP BY
Групування використовується для об'єднання рядків з однаковими значеннями полів та розрахунку чи сумування числових полів.

Вибірка із групуванням полів id та name. Додатково обчислюється порядковий номер рядка з використанням віконних функцій.
SELECT 
  id, 
  name, 
  row_number() OVER (ORDER BY name) AS number
FROM tab1 
GROUP BY id, name
Результат:
Вибірка із групуванням по полях

Умова в групуванні. HAVING фільтрує результати до групування.
SELECT 
   id, 
   name, 
   row_number() OVER (ORDER BY name) AS number
FROM tab1 
GROUP BY id, name
HAVING id > 1
Результат:
Умова в групуванні

Об'єднання UNION
Об'єднання використовується для злиття двох вибірок з однаковою кількістю полів. Якщо потрібний результат без групування однакових рядків потрібно використовувати UNION ALL, інакше рядки які дублюються не попадуть у вибірку.

Об'єднання UNION ALL
SELECT id, name FROM tab1 AS tab1_1
UNION ALL
SELECT id, name FROM tab1 AS tab1_2
Результат:
UNION ALL

Тимчасові віртуальні таблиці WITH
Використовуються для вибірки даних у тимчасову віртуальну таблицю.

Вибірка даних у тимчасову віртуальну таблицю S та подальша вибірка з цієї таблиці. Після роботи запиту тимчасова віртуальна таблиця знищується.
WITH S AS
(
   SELECT 
      name, 
      row_number() OVER (ORDER BY name) AS number
   FROM tab1
   GROUP BY name
)
SELECT * FROM S
Результат:
WITH

В одному запиті можна використовувати декілька тимчасових віртуальних таблиць.
WITH 
S AS
(
   SELECT 
      name, 
      row_number() OVER (ORDER BY name) AS num,
      'Перша' AS Group
   FROM tab1
   GROUP BY name
),
S2 AS
(
   SELECT 
      name, 
      row_number() OVER (ORDER BY name),
      'Друга'
   FROM tab1
   GROUP BY name
)
SELECT * FROM S
UNION ALL
SELECT * FROM S2
Результат:
WITH

© accounting.org.ua - 2024