JavaRush /Курси /SQL SELF /Вибір конкретних стовпців: витяг даних за іменами стовпці...

Вибір конкретних стовпців: витяг даних за іменами стовпців

SQL SELF
Рівень 2 , Лекція 0
Відкрита

Коли ми витягуємо дані з бази, нас рідко цікавлять абсолютно всі стовпці. Наприклад, у таблиці співробітників employees може бути 15 стовпців: ім'я, прізвище, дата народження, посада, зарплата, дата найму і так далі. А тобі треба лише дізнатися їх імена та посади. Логічно, що тягнути всі дані — це марно і неефективно. Ось тут і вступає в гру мистецтво вибірки конкретних стовпців.

Якщо провести аналогію, то це якби тобі треба було з загального кошика з апельсинами, яблуками і бананами витягти тільки яблука. Круто ж? Ось цим ми і займемось!

Синтаксис

Нагадую, SQL спроєктували максимально user-friendly.

По-перше, регістр тексту запиту не має значення. Ти можеш написати SELECT, Select або select і все буде працювати. По-друге, перенос рядків ніяк не враховується. СУБД все одно перетворить запит в один довгий рядок, так що можеш писати як тобі зручно.

Як ти вже, мабуть, здогадуєшся, ключовими словами SELECT і FROM справа не обмежується. Інакше б не було стільки розмов навколо SQL. Розширений вигляд SQL-запиту має вигляд:

SELECT стовпці
FROM таблиця
WHERE умова
GROUP BY стовпці
HAVING стовпці
ORDER BY сортування

Де:

  • стовпці — це назви стовпців, які ти хочеш отримати.
  • таблиця — назва таблиці, з якої витягуються дані.
  • умова — умова для фільтрації рядків.
  • сортування — рядки і порядок сортування.

Звучить легко? Давай розберемо це на реальному прикладі. Але пропоную почати з простіших прикладів.

Приклад базового запиту

Припустимо, у нас є таблиця students, де лежать дані про студентів. Ось як може виглядати структура таблиці:

id first_name last_name age grade
1 Alex Lin 20 A
2 Anna Song 22 B
3 Otto Art 19 A

Тепер ми хочемо дізнатися тільки прізвища last_name та оцінки grade всіх студентів.

Запит буде виглядати так:

SELECT last_name, grade
FROM students;

Результат виконання:

last_name grade
Lin A
Song B
Art A

Вітаю, ти щойно зекономив ресурси бази даних і зробив результат більш читабельним!

Склеювання рядків

Просто вибирати дані ти вже вмієш, давай спробуємо щось цікавіше. У нашій таблиці ім'я і прізвище розділені по різних стовпцях. Давай напишемо запит, де буде стовпець з повним ім'ям студента.

Щоб склеїти два рядки в PostgreSQL використовується оператор ||. Виглядати наш SELECT-запит буде так:

SELECT first_name || last_name, grade
FROM students;

Результат виконання:

first_name || last_name grade
AlexLin A
AnnaSong B
OttoArt A

Гм. Здається тут чогось не вистачає. Наприклад пробілу між ім'ям і прізвищем! Давай це виправимо.

SELECT first_name || ' ' || last_name, grade
FROM students;

Результат виконання:

first_name || ' ' || last_name grade
Alex Lin A
Anna Song B
Otto Art A

Краса. Вміст таблиці-результату мені подобається, але що сталося з заголовком? Хотілося б бачити там full name, ну або просто name, але не first_name || ' ' || last_name. Так не гарно і не практично. Але і для цього є рішення.

Вибірка з використанням псевдонімів (аліасів)

SQL-запити можна зробити більш зручними для читання за допомогою псевдонімів. Це просто спосіб дати стовпцю нове ім'я в межах запиту. Аліаси використовують ключове слово AS (хоча формально його можна опустити, але для читабельності краще не робити цього).

Дивимось приклад:

SELECT first_name AS "Ім'я", last_name AS "Прізвище", grade AS "Оцінка"
FROM students;

Результат виконання:

Ім'я Прізвище Оцінка
Alex Lin A
Anna Song B
Otto Art A

Тут ми:

  1. Перейменували стовпці, щоб їх імена стали більш зрозумілими українською.
  2. Використали аліаси в запиті, використовуючи AS.

Якщо твоєму начальнику або клієнту треба вивести дані з користувачами і не дати йому посивіти при перегляді таблиці — аліаси твій друг.

Тепер давай трохи покращимо наш запит на отримання повного імені.

SELECT first_name || ' ' || last_name  AS "Повне ім'я", grade  AS "Оцінка"
FROM students;

Результат виконання:

Повне ім'я Оцінка
Alex Lin A
Anna Song B
Otto Art A

Чудово. Як ми і хотіли.

Навіщо вибирати тільки деякі стовпці?

  1. Продуктивність

Уяви, що ти працюєш з величезною таблицею на мільйони рядків і сотні стовпців. Витяг всіх даних SELECT * може зайняти хвилини або навіть години, і вимагати багато ресурсів сервера. А так ти отримуєш тільки те, що треба.

  1. Читабельність

Коли ти витягуєш тільки потрібні стовпці, результат стає набагато легшим для розуміння. Інакше твій результат буде виглядати як спроба прочитати довгу стрічку новин у п'ятницю ввечері.

  1. Мінімізація помилок

Чим менше даних ти обробляєш у запиті, тим менша ймовірність отримати щось неправильне. Особливо, якщо ти далі працюєш з цими даними.

Про що варто пам'ятати?

Псевдоніми таблиць

Інший спосіб впоратися з довгими назвами таблиць — це використовувати аліаси таблиць. Вони мають нагадувати початкову назву таблиці або бути логічно пов'язаними з її вмістом.

SELECT sa05.first_name, sa05.course_id
FROM students_archive_2005 AS sa05

Цей метод особливо корисний, якщо у тебе довгі назви таблиць типу university_students_enrollments_records можна використовувати usr або us

Типові помилки при виборі конкретних стовпців

  1. Помилки в іменах стовпців. Якщо ти напишеш назву стовпця з помилкою, отримаєш повідомлення про помилку типу: ERROR: column "lastname" does not exist. Перевіряй правильність написання імен стовпців.

  2. Конфліктуючі імена. Коли в запиті беруть участь кілька таблиць, обов'язково вказуй, до якої таблиці належить поле. Наприклад, students.first_name.

  3. Використання SELECT * — це пастка для новачків. Так, це працює і дуже зручно, але у великих проєктах це погана практика! Завжди вибирай тільки ті стовпці, які тобі дійсно потрібні.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ