Вставка данных

Когда таблица создана, она не содержит данных. Первое, что нужно сделать перед тем, как база данных станет полезной, — это вставить данные. Данные всегда вставляются как минимум по одной строке за раз. Конечно, возможно вставить более одной строки, но нет способа вставить менее одной строки. Даже если известны только некоторые значения столбцов, необходимо создать строку целиком.

Чтобы создать новую строку, используйте команду INSERT. Команда требует имя таблицы и значение столбца. Например, рассмотрим таблицу продуктов (products) из главы Определение данных:

CREATE TABLE products (
    product_no integer,
    name text,
    price numeric
);

Пример команды для вставки строки:

INSERT INTO products VALUES (1, 'Cheese', 9.99);

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

Вышеуказанный синтаксис имеет недостаток - нужно знать порядок столбцов в таблице. Чтобы избежать этого, вы можно явно перечислить столбцы. Например, обе следующие команды делают то же самок, что и приведенная выше:

INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', 9.99);
INSERT INTO products (name, price, product_no) VALUES ('Cheese', 9.99, 1);

Многие пользователи считают хорошей практикой всегда указывать имена столбцов.

Если у вас нет значений для всех столбцов, вы можете опустить некоторые из них. В этом случае столбцы будут заполнены значениями по умолчанию. Например:

INSERT INTO products (product_no, name) VALUES (1, 'Cheese');
INSERT INTO products VALUES (1, 'Cheese');

Вторая форма - это расширение QHB.Столбцы слева заполняются указанными значениями, а остальные столбцы получают значения по умолчанию.

Для ясности вы также можете запросить значения по умолчанию явно, для отдельных столбцов или для всей строки:

INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', DEFAULT);
INSERT INTO products DEFAULT VALUES;

Можно вставить несколько строк одной командой:

INSERT INTO products (product_no, name, price) VALUES
    (1, 'Cheese', 9.99),
    (2, 'Bread', 1.99),
    (3, 'Milk', 2.99);

Также возможно вставить результат запроса (который может не иметь ни одной строки, состоять из одной строки или из нескольких строк):

INSERT INTO products (product_no, name, price)
  SELECT product_no, name, price FROM new_products
    WHERE release_date = 'today';

Поддерживаются все возможности SQL-запросов (глава Запросы) для вычисления строк, которые нужно вставить.