FROM в Oracle SQL — 50 примеров с таблицами

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

FROM в Oracle SQL — это ключевое зарезервированное слово, которое указывает источник данных. Оно определяет, откуда именно берутся строки, которые будут обрабатываться командой SELECT. В этой статье ты узнаешь, как правильно использовать FROM в простых и сложных запросах. Мы рассмотрим синтаксис, разберём, где применяется FROM, и приведём 50 практических примеров.


🖋️ Синтаксис конструкции FROM

SELECT [столбцы | *]
FROM [источник данных]

Источник данных может быть:

  • Таблица
  • Представление
  • Подзапрос
  • Объединение таблиц (JOIN)
  • CTE (WITH)

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

  • Получение строк из таблиц
  • Объединение нескольких таблиц
  • Построение отчётов
  • Вложенные запросы и фильтрация
  • Использование временных подтаблиц

📊 Примеры использования

  1. Получение всех строк из таблицы:
SELECT * FROM employees;
  1. Извлечение из таблицы с указанием столбцов:
SELECT first_name, hire_date FROM employees;
  1. FROM с псевдонимом таблицы:
SELECT e.salary FROM employees e;
  1. FROM с подзапросом:
SELECT * FROM (SELECT * FROM employees WHERE salary > 5000);
  1. FROM с подзапросом и псевдонимом:
SELECT sub.first_name FROM (SELECT * FROM employees) sub;
  1. JOIN двух таблиц по ключу:
SELECT e.first_name, d.department_name
FROM employees e JOIN departments d
ON e.department_id = d.department_id;
  1. LEFT JOIN:
SELECT e.first_name, d.department_name
FROM employees e LEFT JOIN departments d
ON e.department_id = d.department_id;
  1. RIGHT JOIN:
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:
SELECT e.first_name, d.department_name
FROM employees e FULL OUTER JOIN departments d
ON e.department_id = d.department_id;
  1. CROSS JOIN:
SELECT * FROM employees CROSS JOIN jobs;
  1. JOIN с дополнительными условиями:
SELECT e.first_name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id AND d.location_id = 1700;
  1. FROM с CTE:
WITH dept_avg AS (
  SELECT department_id, AVG(salary) AS avg_sal FROM employees GROUP BY department_id
)
SELECT * FROM dept_avg;
  1. FROM с материализованным представлением:
SELECT * FROM mv_employee_summary;
  1. FROM с представлением:
SELECT * FROM v_active_employees;
  1. FROM с dba-таблицей:
SELECT * FROM dba_tables;
  1. FROM с объединением подзапросов:
SELECT * FROM (
  SELECT employee_id, 'A' AS group_label FROM employees WHERE department_id = 10
  UNION
  SELECT employee_id, 'B' FROM employees WHERE department_id = 20
);
  1. FROM dual:
SELECT 'FROM пример' FROM dual;
  1. FROM с аналитической функцией:
SELECT emp_id, salary, AVG(salary) OVER (PARTITION BY department_id) AS avg_sal
FROM employees;
  1. FROM и JOIN с тремя таблицами:
SELECT e.first_name, d.department_name, l.city
FROM employees e
JOIN departments d ON e.department_id = d.department_id
JOIN locations l ON d.location_id = l.location_id;
  1. FROM с табличной функцией:
SELECT * FROM TABLE(get_top_employees(10));
  1. FROM с XMLTABLE:
SELECT *
FROM XMLTABLE('/employees/employee'
  PASSING xmltype('<employees><employee><id>1</id></employee></employees>')
  COLUMNS emp_id NUMBER PATH 'id');
  1. FROM с UNPIVOT:
SELECT * FROM (
  SELECT department_id, q1, q2 FROM sales
)
UNPIVOT (revenue FOR quarter IN (q1 AS 'Q1', q2 AS 'Q2'));
  1. FROM с PIVOT:
SELECT * FROM (
  SELECT department_id, quarter, revenue FROM sales
)
PIVOT (SUM(revenue) FOR quarter IN ('Q1', 'Q2'));
  1. FROM с временной таблицей:
SELECT * FROM session_temp_table;
  1. FROM с глобальной временной таблицей:
SELECT * FROM global_temp_table;
  1. FROM с указанием схемы:
SELECT * FROM hr.employees;
  1. FROM в подзапросе в WHERE:
SELECT * FROM employees
WHERE department_id IN (
  SELECT department_id FROM departments WHERE location_id = 1700
);
  1. FROM с UNION ALL:
SELECT * FROM (
  SELECT first_name FROM employees
  UNION ALL
  SELECT name FROM contractors
);
  1. FROM в представлении с фильтрацией:
SELECT * FROM (SELECT * FROM employees WHERE job_id = 'IT_PROG')
WHERE ROWNUM <= 3;
  1. FROM с использованием SAMPLE:
SELECT * FROM employees SAMPLE (10);
  1. FROM с аналитической функцией внутри подзапроса:
SELECT * FROM (
  SELECT salary, RANK() OVER (ORDER BY salary DESC) AS rank FROM employees
);
  1. FROM с ANSI JOIN синтаксисом:
SELECT *
FROM employees INNER JOIN departments
USING(department_id);
  1. FROM с NATURAL JOIN:
SELECT *
FROM employees NATURAL JOIN departments;
  1. FROM с результатом MERGE:
MERGE INTO target_table t
USING (SELECT * FROM source_table) s
ON (t.id = s.id)
WHEN MATCHED THEN UPDATE SET t.name = s.name;
  1. FROM с использованием CONNECT BY:
SELECT employee_id, manager_id
FROM employees
CONNECT BY PRIOR employee_id = manager_id;
  1. FROM с использованием HINT:
SELECT /*+ FULL(e) */ * FROM employees e;
  1. FROM с INLINE VIEW (вложенный подзапрос):
SELECT avg_sal FROM (
  SELECT AVG(salary) AS avg_sal FROM employees
);
  1. FROM с внешней таблицей:
SELECT * FROM external_employees;
  1. FROM с результирующим списком нескольких таблиц:
SELECT e.employee_id, p.project_name
FROM employees e, projects p
WHERE e.project_id = p.id;
  1. FROM с временной in-memory таблицей:
SELECT * FROM memory_temp_table;
  1. FROM с представлением, включающим агрегаты:
SELECT * FROM v_avg_salary_by_dept;
  1. FROM с PARALLEL HINT:
SELECT /*+ PARALLEL(employees, 4) */ * FROM employees;
  1. FROM с ROLLUP агрегатами:
SELECT department_id, job_id, SUM(salary)
FROM employees
GROUP BY ROLLUP (department_id, job_id);
  1. FROM с GROUPING SETS:
SELECT department_id, job_id, SUM(salary)
FROM employees
GROUP BY GROUPING SETS ((department_id), (job_id));
  1. FROM с CUBE:
SELECT department_id, job_id, SUM(salary)
FROM employees
GROUP BY CUBE (department_id, job_id);
  1. FROM с аналитикой по окну:
SELECT employee_id, salary,
       SUM(salary) OVER (PARTITION BY department_id ORDER BY salary) AS running_total
FROM employees;
  1. FROM с DBLINK:
SELECT * FROM employees@remote_db;
  1. FROM с JSON_TABLE:
SELECT *
FROM JSON_TABLE('{"employees": [{"id":1}]}'
  , '$.employees[*]'
  COLUMNS (emp_id NUMBER PATH '$.id'));
  1. FROM с моделированием MODEL:
SELECT * FROM sales
MODEL RETURN UPDATED ROWS
PARTITION BY (region)
DIMENSION BY (product)
MEASURES (amount)
RULES (amount["ProductA"] = amount["ProductA"] * 1.1);

📆 Заключение: зачем изучать FROM в Oracle SQL

FROM — это фундаментальный блок любого SQL-запроса. Без него невозможно указать, откуда брать данные. Команда используется во всех выборках, объединениях, фильтрациях и вложенных конструкциях.

Освоив FROM, ты сможешь работать с таблицами, подзапросами, объединять данные из разных источников и строить отчёты любой сложности.


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

FOREIGN в Oracle SQL — как задавать внешние ключи


 

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