> For the complete documentation index, see [llms.txt](https://mariadb.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mariadb.com/docs/server/reference/sql-statements/data-manipulation/inserting-loading-data/insert-select.md).

# INSERT SELECT

## Syntax

```bnf
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    SELECT ...
    [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
```

![Railroad diagram of INSERT ... SELECT — equivalent to the BNF above](/files/sM4yFz7z9Qvq1n6JvPPN)

## Description

With `INSERT ... SELECT`, you can quickly insert many rows into a table from one or more other tables. For example:

```sql
INSERT INTO tbl_temp2 (fld_id)
  SELECT tbl_temp1.fld_order_id
  FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;
```

`tbl_name` can also be specified in the form `db_name`.`tbl_name` (see [Identifier Qualifiers](/docs/server/reference/sql-structure/sql-language-structure/identifier-qualifiers.md)). This allows to copy rows between different databases.

If the new table has a primary key or UNIQUE indexes, you can use [IGNORE](/docs/server/reference/sql-statements/data-manipulation/inserting-loading-data/ignore.md) to handle duplicate key errors during the query. The newer values will not be inserted if an identical value already exists.

[REPLACE](/docs/server/reference/sql-statements/data-manipulation/changing-deleting-data/replace.md) can be used instead of `INSERT` to prevent duplicates on `UNIQUE` indexes by deleting old values. In that case, `ON DUPLICATE KEY UPDATE` cannot be used.

`INSERT ... SELECT` works for tables which already exist. To create a table for a given resultset, you can use [CREATE TABLE ... SELECT](/docs/server/server-usage/tables/create-table.md).

## See Also

* [INSERT](/docs/server/reference/sql-statements/data-manipulation/inserting-loading-data/insert.md)
* [INSERT DELAYED](/docs/server/reference/sql-statements/data-manipulation/inserting-loading-data/insert-delayed.md)
* [HIGH\_PRIORITY and LOW\_PRIORITY](/docs/server/reference/sql-statements/data-manipulation/changing-deleting-data/high_priority-and-low_priority.md)
* [Concurrent Inserts](/docs/server/reference/sql-statements/data-manipulation/inserting-loading-data/concurrent-inserts.md)
* [INSERT - Default & Duplicate Values](/docs/server/reference/sql-statements/data-manipulation/inserting-loading-data/insert-default-duplicate-values.md)
* [INSERT IGNORE](/docs/server/reference/sql-statements/data-manipulation/inserting-loading-data/insert-ignore.md)
* [INSERT ON DUPLICATE KEY UPDATE](/docs/server/reference/sql-statements/data-manipulation/inserting-loading-data/insert-on-duplicate-key-update.md)

<sub>*This page is licensed: GPLv2, originally from*</sub> [<sub>*fill\_help\_tables.sql*</sub>](https://github.com/MariaDB/server/blob/main/scripts/fill_help_tables.sql)

{% @marketo/form formId="4316" %}
