Операции с таблицами

  • CREATE TABLE — Создание новой таблицы

  • INSERT — Добавление данных в таблицу

  • DROP TABLE — Удаление таблицы

  • SHOW TABLES — Вывод списка всех таблиц

Создание новой таблицы

CREATE [OR REPLACE] TABLE [IF NOT EXISTS] [<table_schema>.]<table_name>
    (<column_name> <column_type>
        [NOT NULL] [DEFAULT <default_expr>]
        [GENERATED BY DEFAULT AS IDENTITY] [GENERATED ALWAYS AS IDENTITY],
    ...
    )
    [WITH (<table_param>, ... )]

Создает новую таблицу с указанным именем и указанными столбцами.

CREATE [OR REPLACE] TABLE [IF NOT EXISTS] [<table_schema>.]<table_name> AS
    <select_expr>
    [WITH (<table_param>, ... )]

Создает новую таблицу с указанным именем на основе результата запроса SELECT.

Параметры

  • <table_name> — имя создаваемой таблицы


  • <table_schema> — схема создаваемой таблицы


  • <column_name> — имя столбца создаваемой таблицы


  • <column_type> — тип данных столбца создаваемой таблицы (см. раздел Типы данных)


  • NOT NULL — данный столбец не принимает значения NULL


  • DEFAULT <default_expr> — константа или константное выражение по умолчанию


  • GENERATED BY DEFAULT AS IDENTITY — данный столбец является столбцом идентификации, то есть значения для него по умолчанию автоматически генерируется из неявной последовательности. Если команда INSERT выполняется для таблицы со столбцом идентификации и значение для этого столбца не указано явно, то в этот столбец вставляется значение, сгенерированное неявной последовательностью.

    Посмотреть пример

    Создадим таблицу my_table с двумя столбцами. Столбец id зададим как столбец идентификации (автоинкремент). Вставим в другой столбец числа от 5 до 10 с помощью функции generate_series. В итоге в столбец идентификации автоматически вставятся значения.

    CREATE TABLE my_table (
        id INT GENERATED BY DEFAULT AS IDENTITY,
        numbers INT,
        );
    
    INSERT INTO my_table (numbers)
        SELECT unnest(generate_series(5,10));
    
    SELECT * FROM my_table;
    +----+---------+
    | id | numbers |
    +----+---------+
    | 0  | 5       |
    +----+---------+
    | 1  | 6       |
    +----+---------+
    | 2  | 7       |
    +----+---------+
    | 3  | 8       |
    +----+---------+
    | 4  | 9       |
    +----+---------+
    | 5  | 10      |
    +----+---------+

  • <select_expr> — выражение SELECT, результат выполнения которого будет записан в создаваемую таблицу


  • <table_param> — параметры создаваемой таблицы

    table_param ::= [<name> = <value>]

    Возможные значения:

    • snapshot_ttl = <duration> — глубина хранения снапшотов (версий таблицы).
      По умолчанию: 7 дней, но не более 1000 снапшотов.
      Например: '1 week', '2 days', '4 days 3 hours 5 minutes 30 seconds'

    • order_by = <column_name> — столбец для сортировки, используемый для уплотнения данных таблицы. Данные в таблице хранятся с произвольной сортировкой, упорядоченность не гарантируется.

Если указан модификатор OR REPLACE, то конечное действие эквивалентно удалению существующей таблицы и созданию новой с тем же именем.

Опциональный модификатор IF NOT EXISTS ограничивает запрос только теми случаями, в которых указанный объект еще не существует.

Модификаторы являются взаимоисключающими. Если указать их оба, это приведет к ошибке.

Добавление данных в таблицу

INSERT INTO <target_table> [ ( <target_col_name> [ , ... ] ) ]
       {
         VALUES ( { <value> | DEFAULT | NULL } [ , ... ] ) [ , ( ... ) ]  |
         <query>
       }

Обновляет таблицу, вставляя в нее одну или несколько строк. Значения, вставляемые в каждый столбец таблицы, могут быть указаны явно или получены из вложенного запроса.

Параметры

  • <target_table> — имя целевой таблицы, в которую будут вставлены строки


  • VALUES ( value | DEFAULT | NULL [ , …​ ] ) [ , ( …​ ) ] — указывает одно или несколько значений для вставки в соответствующие столбцы целевой таблицы.

    • value — явно указанное значение; может быть литералом или выражением.

    • DEFAULT — значение по умолчанию для соответствующего столбца целевой таблицы.

    • NULL — пустое значение.

    Значения разделяются запятыми.

    Вы можете вставить несколько строк, указав дополнительные наборы значений в выражении.


  • query — запрос, который возвращает значения для вставки в соответствующие столбцы. Это позволяет вставлять строки в целевую таблицу из одной или нескольких исходных таблиц.

Пример вставки явно заданных значений

Вставим в таблицу capitals значения для столбцов country и capital:

CREATE TABLE capitals (country VARCHAR, capital VARCHAR);
INSERT INTO capitals VALUES
    ('Russia', 'Moscow'),
    ('Italy', 'Rome'),
    ('Spain', 'Madrid'),
    ('France', 'Paris');

SELECT * FROM capitals;
+---------+---------+
| country | capital |
+---------+---------+
| France  | Paris   |
+---------+---------+
| Italy   | Rome    |
+---------+---------+
| Russia  | Moscow  |
+---------+---------+
| Spain   | Madrid  |
+---------+---------+

Пример вставки результатов вложенного запроса

Теперь создадим другую таблицу capitals_m и сделаем вставку строк из capitals, которые будут результатом вложенного запроса SELECT. Вставим такие строки из capitals, в которых значение capital содержит M.

CREATE TABLE capitals_m (country VARCHAR, capital VARCHAR);
INSERT INTO capitals_m (country, capital)
    SELECT * FROM capitals
        WHERE capital LIKE '%M%';

SELECT * FROM capitals_m;
+---------+---------+
| country | capital |
+---------+---------+
| Russia  | Moscow  |
+---------+---------+
| Spain   | Madrid  |
+---------+---------+

Удаление таблицы

DROP TABLE [IF EXISTS] <table_name>;

Удаляет таблицу с указанным именем.

Опциональный модификатор IF EXISTS ограничивает запрос только теми случаями, в которых указанный объект существует.

Вывод списка всех таблиц

SHOW TABLES;

Выводит список всех существующих таблиц.