Advantages of SQL-derived tables

If you are interested in viewing only the titles of books written in Colorado, you might create a view like this:

create view vw_colorado_titles as
     select title
     from titles, titleauthor, authors
     where titles.title_id = titleauthor.title_id
     and titleauthor.au_id = authors.au_id 
     and authors.state ="CO"

You can repeatedly use the view vw_colorado_titles, stored in memory, to display its results:

select * from vw_colorado_titles

Drop the view when it is no longer needed:

drop view vw_colorado_titles

If the query results are only needed once, you might instead use a SQL-derived table:

select title 
from (select title
      from titles, titleauthor, authors
      where titles.title_id = titleauthor.title_id
      and titleauthor.au_id = authors.au_id and
      authors.state = "CO") dt_colo_titles

The SQL-derived table created is named dt_colo_titles. The SQL-derived table persists only for the duration of the query, in contrast with a temporary table, which exists for the entire session.

In the previous example for query results that are only needed once, a view is less desirable than a SQL-derived table query because the view is more complicated, requiring both create and drop statements in addition to a select statement. The benefits of creating a view for only one query are additionally offset by the overhead of administrative tasks such as dealing with system catalogs. SQL-derived tables spontaneously create nonpersistent tables which require no administrative tasks. A SQL-derived table used multiple times performs comparably to a query using a view with a cached definition.