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

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

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

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

Основні характеристики представлень

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

Реалізація

Ми створимо представлення під назвою 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;
copy

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

Note

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

question mark

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

Select the correct answer

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

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

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

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

Запитати АІ

expand

Запитати АІ

ChatGPT

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

Suggested prompts:

What are some practical use cases for views in real-world applications?

Can you explain the difference between a view and a table in more detail?

How can I update or modify an existing view?

Awesome!

Completion rate improved to 4.35

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

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

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

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

Основні характеристики представлень

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

Реалізація

Ми створимо представлення під назвою 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;
copy

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

Note

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

question mark

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

Select the correct answer

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

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

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

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