Synopsis
SELECT [ ALL | DISTINCT [ ON (
distinct_expression
[, ...] ) ] ]
target_expression
[ AS
output_name
] [, ...]
[ INTO [ TEMPORARY | TEMP ] [ TABLE ]
new_table
]
[ FROM
from_item
[ { , | CROSS JOIN } ...] ]
[ WHERE
condition
]
[ GROUP BY
aggregate_expression
[, ...] ]
[ HAVING
aggregate_condition
[, ...] ]
[ { UNION | INTERSECT | EXCEPT [ALL] }
select
]
[ ORDER BY
order_expression
[ ASC | DESC | USING
operator
] [, ...] ]
[ FOR UPDATE [ OF
update_table
[, ...] ] ]
[ LIMIT { ALL |
count
} [ { OFFSET | , }
start
] ]
from_item
::= { [ ONLY ]
table_name
[ * ]
[ [ AS ]
from_alias
[ (
column_alias_list
) ] ] |
(
select
) [ [ AS ]
alias
[ (
column_alias_list
) ] ] |
from_item
[ NATURAL ]
join_type
from_item
[ ON (
join_condition
) | USING (
join_column_list
) ]
}
join_type
::= [ INNER |
LEFT [ OUTER ] |
RIGHT [ OUTER ] |
FULL [ OUTER ]
] JOIN
Parameters
Most SELECT INTO parameters are the same as for the SELECT command. The following two are the only parameters unique to SELECT INTO:
-
TEMPORARY, TEMP
-
The TEMPORARY (or TEMP) keyword indicates that the table is for temporary use; it will be destroyed when the session has ended.
-
new_table
-
The name of the new table created to hold the resulting rows of the query. This table will be created automatically and must not already exist before you execute this command.
Description
Use SELECT INTO to execute a query and use the resulting rows to populate a new (automatically created) table. Each column's names and data type for the new table are derived from the rows resulting from the original query. This command is effectively the same as the CREATE TABLE AS command, and it is recommended that you use that syntax, due to the fact that SELECT INTO is non-standard and is also not interpreted correctly by PL/pgSQL.
Example
The following example will create a temporary employee table for employees with an identification number below 105:
booktown=#
SELECT * INTO TEMP TABLE old_emp
booktown-#
FROM employees
booktown-#
WHERE id < 105;
SELECT