Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Представлення | Деякі Додаткові Теми
Оптимізація SQL та Особливості Запитів

Представлення

Свайпніть щоб показати меню

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

View у SQL — це віртуальна таблиця, яка базується на результаті виконання SQL-запиту. Вона містить рядки та стовпці так само, як і реальна таблиця, а поля у view — це поля з однієї або декількох реальних таблиць у базі даних.
View використовуються з кількох причин, зокрема для спрощення складних запитів, підвищення безпеки шляхом обмеження доступу до певних даних і представлення даних у певному форматі.

Основні характеристики view

  • Віртуальна таблиця: view не зберігає дані фізично. Вона отримує свої дані з таблиць, на яких базується (так звані базові таблиці);
  • Спрощення складних запитів: view дозволяє спростити складні SQL-запити, інкапсулюючи їх у одну view. Це полегшує роботу зі складними об'єднаннями та агрегаціями;
  • Безпека: view може обмежувати доступ до певних рядків або стовпців даних, підвищуючи безпеку. Користувачам можна надати доступ до view без надання доступу до базових таблиць;
  • Послідовність: view може забезпечувати послідовний, незмінний інтерфейс навіть при зміні схеми бази даних.

Реалізація

Ми створимо view під назвою account_activity_view на основі таблиць BankAccounts та UserLogs, яка відображає номер рахунку, ім'я власника рахунку, баланс і останню виконану дію по рахунку.

1234567891011121314151617181920212223242526
-- Create a view that shows account details along with their latest action CREATE OR REPLACE VIEW account_activity_view AS SELECT ba.account_number, -- Select the account number from the bankaccounts table ba.account_holder, -- Select the account holder's name from the bankaccounts table ba.balance, -- Select the balance from the bankaccounts table ul.action AS latest_action, -- Select the latest action from the userlogs table (alias as latest_action) ul.timestamp AS latest_action_time -- Select the timestamp of the latest action (alias as latest_action_time) FROM BankAccounts ba -- Main table: bankaccounts LEFT JOIN ( -- Subquery to get the most recent action for each account SELECT DISTINCT ON (account_number) account_number, -- Select the account number action, -- Select the action timestamp -- Select the timestamp FROM UserLogs ORDER BY account_number, -- Order by account number timestamp DESC -- Order by timestamp in descending order to get the latest action ) ul ON ba.account_number = ul.account_number; -- Join the subquery result with bankaccounts on account number -- Get data from the view SELECT * FROM account_activity_view;
Опис запиту
expand arrow
  1. CREATE VIEW account_activity_view AS

Цей оператор створює представлення з назвою account_activity_view, яке об'єднує інформацію з таблиці bankaccounts з останньою активністю з таблиці userlogs. Це забезпечує огляд власників рахунків, їхнього поточного балансу та їхньої останньої дії.

  1. Головний блок SELECT:

    • ba.accountnumber: Вибір номера рахунку з таблиці bankaccounts.
    • ba.accountholder: Вибір імені власника рахунку з таблиці bankaccounts.
    • ba.balance: Вибір балансу з таблиці bankaccounts.
    • ul.action AS latest_action: Вибір останньої дії з таблиці userlogs з псевдонімом latest_action.
    • ul.timestamp AS latest_action_time: Вибір мітки часу останньої дії з псевдонімом latest_action_time.
  2. Блок FROM:

    • bankaccounts ba: Основна таблиця — bankaccounts, яка має псевдонім ba.
  3. Блок LEFT JOIN:

    • Підзапит отримує найновішу дію для кожного рахунку.
    • SELECT DISTINCT ON (accountnumber): Забезпечує унікальність номерів рахунків, вибираючи лише найновіший запис для кожного рахунку.
    • ORDER BY accountnumber, timestamp DESC: Сортує записи за номером рахунку, а потім за міткою часу у спадному порядку для отримання останньої дії.
  4. Умова об'єднання:

    • ul ON ba.accountnumber = ul.accountnumber: Об'єднує результат підзапиту з таблицею bankaccounts за номером рахунку.

Тепер це представлення можна використовувати в інших запитах без необхідності щоразу створювати складний запит із об'єднаннями — достатньо використовувати створене представлення як звичайну таблицю.

Note
Примітка

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

question mark

Яке з наведених тверджень найкраще описує аспект безпеки подань?

Виберіть правильну відповідь

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 6

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Представлення

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

View у SQL — це віртуальна таблиця, яка базується на результаті виконання SQL-запиту. Вона містить рядки та стовпці так само, як і реальна таблиця, а поля у view — це поля з однієї або декількох реальних таблиць у базі даних.
View використовуються з кількох причин, зокрема для спрощення складних запитів, підвищення безпеки шляхом обмеження доступу до певних даних і представлення даних у певному форматі.

Основні характеристики view

  • Віртуальна таблиця: view не зберігає дані фізично. Вона отримує свої дані з таблиць, на яких базується (так звані базові таблиці);
  • Спрощення складних запитів: view дозволяє спростити складні SQL-запити, інкапсулюючи їх у одну view. Це полегшує роботу зі складними об'єднаннями та агрегаціями;
  • Безпека: view може обмежувати доступ до певних рядків або стовпців даних, підвищуючи безпеку. Користувачам можна надати доступ до view без надання доступу до базових таблиць;
  • Послідовність: view може забезпечувати послідовний, незмінний інтерфейс навіть при зміні схеми бази даних.

Реалізація

Ми створимо view під назвою account_activity_view на основі таблиць BankAccounts та UserLogs, яка відображає номер рахунку, ім'я власника рахунку, баланс і останню виконану дію по рахунку.

1234567891011121314151617181920212223242526
-- Create a view that shows account details along with their latest action CREATE OR REPLACE VIEW account_activity_view AS SELECT ba.account_number, -- Select the account number from the bankaccounts table ba.account_holder, -- Select the account holder's name from the bankaccounts table ba.balance, -- Select the balance from the bankaccounts table ul.action AS latest_action, -- Select the latest action from the userlogs table (alias as latest_action) ul.timestamp AS latest_action_time -- Select the timestamp of the latest action (alias as latest_action_time) FROM BankAccounts ba -- Main table: bankaccounts LEFT JOIN ( -- Subquery to get the most recent action for each account SELECT DISTINCT ON (account_number) account_number, -- Select the account number action, -- Select the action timestamp -- Select the timestamp FROM UserLogs ORDER BY account_number, -- Order by account number timestamp DESC -- Order by timestamp in descending order to get the latest action ) ul ON ba.account_number = ul.account_number; -- Join the subquery result with bankaccounts on account number -- Get data from the view SELECT * FROM account_activity_view;
Опис запиту
expand arrow
  1. CREATE VIEW account_activity_view AS

Цей оператор створює представлення з назвою account_activity_view, яке об'єднує інформацію з таблиці bankaccounts з останньою активністю з таблиці userlogs. Це забезпечує огляд власників рахунків, їхнього поточного балансу та їхньої останньої дії.

  1. Головний блок SELECT:

    • ba.accountnumber: Вибір номера рахунку з таблиці bankaccounts.
    • ba.accountholder: Вибір імені власника рахунку з таблиці bankaccounts.
    • ba.balance: Вибір балансу з таблиці bankaccounts.
    • ul.action AS latest_action: Вибір останньої дії з таблиці userlogs з псевдонімом latest_action.
    • ul.timestamp AS latest_action_time: Вибір мітки часу останньої дії з псевдонімом latest_action_time.
  2. Блок FROM:

    • bankaccounts ba: Основна таблиця — bankaccounts, яка має псевдонім ba.
  3. Блок LEFT JOIN:

    • Підзапит отримує найновішу дію для кожного рахунку.
    • SELECT DISTINCT ON (accountnumber): Забезпечує унікальність номерів рахунків, вибираючи лише найновіший запис для кожного рахунку.
    • ORDER BY accountnumber, timestamp DESC: Сортує записи за номером рахунку, а потім за міткою часу у спадному порядку для отримання останньої дії.
  4. Умова об'єднання:

    • ul ON ba.accountnumber = ul.accountnumber: Об'єднує результат підзапиту з таблицею bankaccounts за номером рахунку.

Тепер це представлення можна використовувати в інших запитах без необхідності щоразу створювати складний запит із об'єднаннями — достатньо використовувати створене представлення як звичайну таблицю.

Note
Примітка

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

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 6
some-alt