ЛЕКЦІЯ 7

SELECT та вбудовані функції

Основи баз даних

VTFK • 2025

Що вже вивчили

Лекція 6: Вступ до SQL

  • SELECT та FROM
  • Декларативний підхід
  • Коментарі та синтаксис

План лекції

  • Функції у SELECT
  • Рядкові та математичні функції
  • Агрегатні функції
  • Перейменування (AS)

Фокус: трансформувати дані прямо у запиті

Функції в SQL

Функція у SQL

SQL Function

Вбудована процедура, яка приймає вхідні параметри та повертає результат.

Аналогія: Як функція у математиці: f(x) = 2*x, але в базах даних

Категорії функцій

Три основні групи

%%{init: {"theme": "neutral", "mermaid": {"version": "11.12.2"}}}%% graph TB Functions[SQL Functions] Functions --> Scalar[Скалярні] Functions --> Aggregate[Агрегатні] Functions --> Window[Віконні] Scalar --> String[Рядкові] Scalar --> Math[Математичні] Scalar --> Date[Часові] Aggregate --> COUNT Aggregate --> SUM Aggregate --> AVG

Рядкові функції

Функція Приклад Результат
UPPER(str) UPPER('hello') HELLO
LOWER(str) LOWER('WORLD') world
LENGTH(str) LENGTH('SQL') 3
SUBSTR(str,pos,len) SUBSTR('Database', 1, 4) Data
CONCAT(s1,s2) CONCAT('Hello',' World') Hello World
TRIM(str) TRIM(' text ') text

Рядкові функції у SELECT

Трансформуємо імена

SELECT 
  id,
  UPPER(name) AS upper_name,
  LOWER(name) AS lower_name,
  LENGTH(name) AS name_length,
  SUBSTR(email, 1, 5) AS email_prefix
FROM users;

Математичні функції

Математичні обчислення

З прайсом та знижками

SELECT 
  id,
  product_name,
  price,
  quantity,
  price * quantity AS total,
  ROUND(price * 0.9, 2) AS discounted_price,
  ROUND(ABS(price - 100), 2) AS diff_from_100
FROM products;

Агрегатні функції

Функція Назва Приклад
COUNT(*) Кількість рядків COUNT(*) FROM users
COUNT(col) Неоткл значення COUNT(email) FROM users
SUM(col) Сума SUM(amount) FROM orders
AVG(col) Середнє AVG(price) FROM products
MAX(col) Максимум MAX(salary) FROM employees
MIN(col) Мінімум MIN(created_at) FROM posts

Важне про агрегатні функції

Агрегатні запити

Аналіз даних

-- Статистика по всій таблиці
SELECT 
  COUNT(*) AS total_orders,
  SUM(amount) AS total_revenue,
  AVG(amount) AS avg_order,
  MAX(amount) AS biggest_order,
  MIN(amount) AS smallest_order
FROM orders;

Міні-вікторина

Що повертає COUNT(*)?

  • Кількість колонок
  • Кількість рядків у таблиці
  • Кількість NULL значень
✅ Правильна відповідь: Кількість рядків у таблиці
💡 Пояснення:

COUNT(*) лічить всі рядки, включаючи NULL.

Перейменування з AS

Column Alias

Тимчасова назва для колонки у SELECT результатах.

Аналогія: Як прізвисько: реальне ім'я = колонка, прізвисько = AS

Використання AS

Зробляємо результати зрозумілішими

SELECT 
  id AS user_id,
  first_name || ' ' || last_name AS full_name,
  email AS contact_email,
  price * quantity AS total_spent
FROM users;

Помилка: неправильна функція

⚠️ ЗАСТЕРЕЖЕННЯ

Функція без правильного синтаксису

❌ Неправильно

SELECT name, length(name) FROM users;  -- lowercase

Деякі БД чутливі до регістру функцій

✓ Правильно

SELECT name, LENGTH(name) FROM users;  -- UPPERCASE

Явно UPPERCASE для портативності

Еволюція функцій у SQL

Від простих до складних

1974

SQL-86

Базові COUNT, SUM, AVG

1992

SQL-92

Рядкові та математичні

2003

SQL:2003

Віконні функції

2025

Сьогодні

JSON, XML, AI функції

Best practices для функцій

Міні ТЗ: аналіз продажів

Комплексний приклад

Кілька функцій разом

SELECT 
  COUNT(*) AS total_users,
  ROUND(AVG(age), 1) AS avg_age,
  MAX(created_at) AS newest_user,
  MIN(created_at) AS oldest_user,
  UPPER(SUBSTR(country, 1, 2)) AS country_code
FROM users
WHERE active = true;

Підсумки

  • Функції трансформують дані у SELECT
  • AS робить результати зрозумілішими
  • Агрегатні функції звужують результати

Далі — WHERE для фільтрації

Домашнє завдання

Наступна лекція:

Лекція 8: WHERE Filtering

📚 Корисні ресурси:

📚 Корисні ресурси:

Дякую за увагу! 💾

← Повернутися до списку лекцій