---
name: "select_into"
section: "7"
platform: "linux"
package: "postgresql"
version: "7.4.7-6sarge6"
release: "Debian 3.1 (Sarge)"
platforms: ["linux"]
url: "https://new.carta.tech/select_into"
---

# select\_into(7)

create a new table from the results of a query

## NAME

SELECT INTO - create a new table from the results of a query

## SYNOPSIS

```
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
    * | expression [ AS output_name ] [, ...]
    INTO [ TEMPORARY | TEMP ] [ TABLE ] new_table
    [ FROM from_item [, ...] ]
    [ WHERE condition ]
    [ GROUP BY expression [, ...] ]
    [ HAVING condition [, ...] ]
    [ { UNION | INTERSECT | EXCEPT } [ ALL ] select ]
    [ ORDER BY expression [ ASC | DESC | USING operator ] [, ...] ]
    [ LIMIT { count | ALL } ]
    [ OFFSET start ]
    [ FOR UPDATE [ OF tablename [, ...] ] ]

```

## DESCRIPTION

**SELECT INTO** creates a new table and fills it with data computed by a query. The data is not returned to the client, as it is with a normal **SELECT**. The new table's columns have the names and data types associated with the output columns of the **SELECT**.

## PARAMETERS

- **TEMPORARY or TEMP**

  If specified, the table is created as a temporary table. Refer to CREATE TABLE \[[**create\_table**(7)](/create_table/7.md)\] for details.

- *new\_table*

  The name (optionally schema-qualified) of the table to be created.

All other parameters are described in detail under SELECT \[[**select**(7)](/select/7.md)\].

## NOTES

CREATE TABLE AS \[[**create\_table\_as**(7)](/create_table_as/7.md)\] is functionally equivalent to **SELECT INTO**. **CREATE TABLE AS** is the recommended syntax, since this form of **SELECT INTO** is not available in **ECPG** or **PL/pgSQL**, because they interpret the INTO clause differently.

## COMPATIBILITY

The SQL standard uses **SELECT ... INTO** to represent selecting values into scalar variables of a host program, rather than creating a new table. This indeed is the usage found in **ECPG** and **PL/pgSQL**. The PostgreSQL usage of **SELECT** **INTO** to represent table creation is historical. It's best to use **CREATE TABLE AS** for this purpose in new code. (**CREATE TABLE AS** isn't standard either, but it's less likely to cause confusion.)
