VIEW в Oracle SQL — как создавать представления

🟢 VIEW в Oracle SQL. Введение

VIEW (представление) в Oracle SQL — это виртуальная таблица, основанная на SQL-запросе. Она не хранит данные, а отображает их в реальном времени. VIEW удобна для упрощения сложных запросов, разграничения доступа и повторного использования логики. В этой статье ты найдёшь 45 примеров создания и использования представлений.


🖋️ Синтаксис создания VIEW

CREATE [OR REPLACE] VIEW имя_представления AS
SELECT ... FROM ...;
  • Представление можно использовать как таблицу
  • Данные обновляются автоматически при изменении исходных таблиц
  • Представления могут быть простыми, многоуровневыми и с джойнами

🔄 Где используются VIEW

  • Упрощение повторяющихся запросов
  • Объединение данных из нескольких таблиц
  • Создание слоёв безопасности
  • Использование в BI, отчётах и аналитике

📊 Примеры использования VIEW в Oracle SQL (45 примеров)

  1. Простое представление:
CREATE VIEW v_employees AS
SELECT employee_id, first_name, last_name FROM employees;
  1. Представление с JOIN:
CREATE VIEW v_emp_dept AS
SELECT e.first_name, d.department_name
FROM employees e JOIN departments d ON e.department_id = d.department_id;
  1. Представление с WHERE:
CREATE VIEW v_active_employees AS
SELECT * FROM employees WHERE status = 'ACTIVE';
  1. Представление с выражением:
CREATE VIEW v_salaries AS
SELECT employee_id, salary, salary * 1.1 AS bonus FROM employees;
  1. Представление с агрегатом:
CREATE VIEW v_dept_summary AS
SELECT department_id, COUNT(*) AS emp_count FROM employees GROUP BY department_id;
  1. Представление с псевдонимами:
CREATE VIEW v_contacts AS
SELECT first_name || ' ' || last_name AS full_name, email FROM employees;
  1. Представление с подзапросом:
CREATE VIEW v_top_salaries AS
SELECT * FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
  1. Представление с LEFT JOIN:
CREATE VIEW v_emp_dept_left AS
SELECT e.first_name, d.department_name
FROM employees e LEFT JOIN departments d ON e.department_id = d.department_id;
  1. Представление с RIGHT JOIN:
CREATE VIEW v_dept_employees_right AS
SELECT e.first_name, d.department_name
FROM employees e RIGHT JOIN departments d ON e.department_id = d.department_id;
  1. Представление с FULL OUTER JOIN:
CREATE VIEW v_full_emp_dept AS
SELECT e.first_name, d.department_name
FROM employees e FULL OUTER JOIN departments d ON e.department_id = d.department_id;
  1. Представление с функцией:
CREATE VIEW v_hire_dates AS
SELECT employee_id, TO_CHAR(hire_date, 'YYYY-MM-DD') AS hire_date_formatted FROM employees;
  1. Представление с CASE:
CREATE VIEW v_status AS
SELECT employee_id, salary,
  CASE WHEN salary > 5000 THEN 'HIGH' ELSE 'NORMAL' END AS level
FROM employees;
  1. Представление с ORDER BY (нельзя напрямую):
-- В Oracle ORDER BY допустим только в SELECT из представления, а не в определении
SELECT * FROM v_employees ORDER BY last_name;
  1. Представление с подстановкой SYSDATE:
CREATE VIEW v_today AS
SELECT employee_id, SYSDATE AS today FROM employees;
  1. Представление с агрегацией и HAVING:
CREATE VIEW v_dept_big AS
SELECT department_id, COUNT(*) AS cnt FROM employees GROUP BY department_id HAVING COUNT(*) > 5;
  1. Представление с ROWNUM:
CREATE VIEW v_first_five AS
SELECT * FROM employees WHERE ROWNUM <= 5;
  1. Представление с аналитикой:
CREATE VIEW v_ranked AS
SELECT employee_id, salary,
  RANK() OVER (ORDER BY salary DESC) AS rnk
FROM employees;
  1. Представление с функцией LENGTH:
CREATE VIEW v_name_length AS
SELECT first_name, LENGTH(first_name) AS name_len FROM employees;
  1. Представление с UPPER:
CREATE VIEW v_upper_names AS
SELECT UPPER(first_name) AS name FROM employees;
  1. Представление с JSON_VALUE:
CREATE VIEW v_json_status AS
SELECT JSON_VALUE(data, '$.status') AS status FROM employees_json;
  1. Представление с INITCAP:
CREATE VIEW v_names_cap AS
SELECT INITCAP(first_name) FROM employees;
  1. Представление на основе представления:
CREATE VIEW v_second_level AS
SELECT * FROM v_employees WHERE employee_id > 200;
  1. Представление с TRUNC:
CREATE VIEW v_salary_round AS
SELECT employee_id, TRUNC(salary, -2) AS rounded FROM employees;
  1. Представление с выражением CONCAT:
CREATE VIEW v_emails AS
SELECT LOWER(first_name || '.' || last_name || '@company.com') AS email FROM employees;
  1. Представление с LPAD:
CREATE VIEW v_padded_ids AS
SELECT LPAD(employee_id, 5, '0') AS id FROM employees;
  1. Представление с TO_DATE:
CREATE VIEW v_converted_date AS
SELECT TO_DATE('2025-01-01', 'YYYY-MM-DD') AS new_year FROM dual;
  1. Представление с TO_CHAR и датой:
CREATE VIEW v_formatted_date AS
SELECT TO_CHAR(hire_date, 'DD.MM.YYYY') AS formatted FROM employees;
  1. Представление с NULLIF:
CREATE VIEW v_null_check AS
SELECT employee_id, NULLIF(salary, 0) AS valid_salary FROM employees;
  1. Представление с COALESCE:
CREATE VIEW v_default_commission AS
SELECT employee_id, COALESCE(commission_pct, 0) AS comm FROM employees;
  1. Представление с JSON_OBJECT:
CREATE VIEW v_json AS
SELECT JSON_OBJECT('id' VALUE employee_id, 'name' VALUE first_name) AS json_data FROM employees;
  1. Представление с DECODE:
CREATE VIEW v_decode_status AS
SELECT employee_id, DECODE(status, 'A', 'Active', 'I', 'Inactive', 'Unknown') AS readable_status FROM employees;
  1. Представление с SIGN:
CREATE VIEW v_salary_sign AS
SELECT salary, SIGN(salary - 5000) AS comparison FROM employees;
  1. Представление с MERGE источником:
-- В MERGE можно использовать представление как источник или цель
MERGE INTO employees e USING v_active_employees v ON (e.employee_id = v.employee_id)
WHEN MATCHED THEN UPDATE SET e.status = v.status;
  1. Представление с аналитикой ROW_NUMBER:
CREATE VIEW v_rownum AS
SELECT employee_id, ROW_NUMBER() OVER (ORDER BY salary DESC) AS rn FROM employees;
  1. Представление с FETCH:
CREATE VIEW v_top10 AS
SELECT * FROM employees FETCH FIRST 10 ROWS ONLY;
  1. Представление с JSON_TABLE:
CREATE VIEW v_json_table AS
SELECT * FROM JSON_TABLE(data, '$'
  COLUMNS (id NUMBER PATH '$.id', name VARCHAR2(100) PATH '$.name'));
  1. Представление READ ONLY:
CREATE VIEW v_readonly AS
SELECT employee_id, salary FROM employees
WITH READ ONLY;
  1. Представление с CTE:
CREATE VIEW v_cte_view AS
WITH recent AS (
  SELECT * FROM employees WHERE hire_date > SYSDATE - 30
)
SELECT * FROM recent;
  1. Представление с FILTER:
CREATE VIEW v_salary_avg AS
SELECT department_id,
  AVG(salary) FILTER (WHERE commission_pct IS NOT NULL) AS avg_comm_salary
FROM employees GROUP BY department_id;
  1. Представление с GROUPING SETS:
CREATE VIEW v_summary AS
SELECT department_id, job_id, COUNT(*)
FROM employees
GROUP BY GROUPING SETS ((department_id), (job_id));
  1. Представление с UNION:
CREATE VIEW v_union AS
SELECT first_name FROM employees
UNION
SELECT department_name FROM departments;
  1. Представление с INTERSECT:
CREATE VIEW v_common_names AS
SELECT first_name FROM employees
INTERSECT
SELECT manager_name FROM managers;
  1. Представление с MINUS:
CREATE VIEW v_diff AS
SELECT employee_id FROM employees
MINUS
SELECT employee_id FROM retirees;
  1. Представление с DISTINCT:
CREATE VIEW v_unique_jobs AS
SELECT DISTINCT job_id FROM employees;
  1. Представление с INLINE VIEW внутри:
CREATE VIEW v_inline AS
SELECT * FROM (
  SELECT employee_id, salary FROM employees WHERE salary > 5000
);

📆 Заключение: зачем использовать VIEW в Oracle SQL

VIEW — это мощный инструмент для абстрагирования бизнес-логики, упрощения работы с данными и повышения безопасности. Представления можно использовать почти в любом запросе, где используются таблицы. Они облегчают сопровождение кода и делают SQL более читаемым.


🕸️ Следующая статья:

VARIANCE в Oracle SQL — как рассчитывать дисперсию


 

Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии