2016-01-21 2 views
0

Я знаю, что главное различие между видом и подзапрос является то, что бывший сохраняется как часть метаданных базы данных, а затем может быть использован полностью самостоятельно как своего рода виртуальной таблицы:Можно ли считать вид подзапроса открытым?

CREATE VIEW my_view AS 
    SELECT employee_firstname, 
      employee_lastname, 
      employee_salary 
    FROM employees; 

SELECT * FROM my_view; -- This SELECT statement will list all employees 
         -- along with their salaries, treating my_view as 
         -- its source of data 

Но когда мы используем представления как часть более крупных запросов, считаете ли вы, что справедливо сказать, что представление, свободно говорящее, является не чем иным, как сохраненным подзапросом? Я задаю этот вопрос, потому что я заметил, что много раз я могу легко превратить свои подзапросы в представления (что само по себе может сделать ваш код SQL более удобочитаемым) и иметь тот же эффект.

+0

Не только сохраненный подзапрос, но и сохраненный подзапрос, который вы не можете изменить, т. Е. Если кто-то создает представление, где столбцы ограничены, и вы можете получить доступ только к представлению вместо исходной базы данных, у вас есть только доступ к ограниченным данным , – Smutje

+2

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что это просто не вопрос программирования. –

+0

В чем смысл вопроса? Во многих отношениях представление действует как подзапрос и может генерировать тот же план, что и подзапрос, но может быть слишком узким в описании. Если есть причина, по которой вы просите, это может вызвать более подходящий ответ. Если вам просто интересно, тогда вопрос слишком широк и основан на мнениях. –

ответ

1

На самом деле это зависит, если это обычный view, то да, было бы безопасно сказать, что он работает как подзапрос, когда вы выбираете его. Если это materialized view, то, хотя он по-прежнему смутно аналогичен в принципе, выполнение немного отличается. A materialized view периодически сохраняет выполненный результирующий набор на диск, что приводит к форме временной таблицы результатов. В этой ситуации он будет действовать скорее как фактическая таблица, чем подзапрос.

1

Когда вы делаете SELECT * FROM my_view;, это фактически делает выбор в базе данных, принося все таблицы. Это своего рода гиперссылка на выбор, по которому вы создали свое представление.

Смежные вопросы