# Temporary tables

A temporary table belongs to one logical connection and lives in its `temp` namespace. It is useful for staging data or reusing intermediate rows within that connection.

## Syntax

```text
CREATE TEMP TABLE name (column type, ...)
CREATE TEMPORARY TABLE name (column type, ...)
```

A temporary table shadows a table of the same unqualified name in `main`. Qualify the source as `main.name` or `temp.name` when both exist.

A native client connection retains its temporary tables. HTTP requests use separate sessions, so create and use a temporary table in the same HTTP request.

## Example

### Main and temporary tables with the same name

```sql
CREATE TABLE staging(id UInt8);
INSERT INTO main.staging VALUES (1);
CREATE TEMP TABLE staging(id UInt8);
INSERT INTO temp.staging VALUES (7);
```

```sql
SELECT id FROM staging
FORMAT csv;
```

```text
7
```

```sql
SELECT id FROM main.staging
FORMAT csv;
```

```text
1
```

`DROP TABLE temp.staging` removes the temporary table explicitly. Its rows are not a persistent staging area across connections.
