6.1. Inserción de datos #

Cuando se crea una tabla, esta no contiene datos. Lo primero que se debe hacer antes de que una base de datos pueda ser de gran utilidad es insertar datos. Los datos se insertan una fila a la vez. También puedes insertar más de una fila en un solo comando, pero no es posible insertar algo que no sea una fila completa. Incluso si solo conoces algunos valores de columna, se debe crear una fila completa.

Para crear una nueva fila, utiliza el comando INSERT. El comando requiere el nombre de la tabla y los valores de las columnas. Por ejemplo, considera la tabla products de la Chapter 5:

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

Un comando de ejemplo para insertar una fila sería:

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

Los valores de los datos se enumeran en el orden en que aparecen las columnas en la tabla, separados por comas. Por lo general, los valores de los datos serán literales (constantes), pero también se permiten expresiones escalares.

La sintaxis anterior tiene el inconveniente de que necesitas conocer el orden de las columnas en la tabla. Para evitar esto, también puedes enumerar las columnas explícitamente. Por ejemplo, los dos comandos siguientes tienen el mismo efecto que el anterior:

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

Muchos usuarios consideran que es una buena práctica enumerar siempre los nombres de las columnas.

Si no tienes valores para todas las columnas, puedes omitir algunas de ellas. En ese caso, las columnas se llenarán con sus valores predeterminados. Por ejemplo:

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

La segunda forma es una extensión de PostgreSQL. Llena las columnas desde la izquierda con tantos valores como se proporcionen, y el resto tomará sus valores predeterminados.

Para mayor claridad, también puedes solicitar valores predeterminados explícitamente, para columnas individuales o para toda la fila:

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

Puedes insertar múltiples filas en un solo comando:

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

También es posible insertar el resultado de una consulta (que podría ser ninguna fila, una fila o muchas filas):

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

Esto proporciona toda la potencia del mecanismo de consulta SQL (Chapter 7) para calcular las filas que se insertarán.

Tip

Al insertar una gran cantidad de datos al mismo tiempo, considera utilizar el comando COPY. No es tan flexible como el comando INSERT, pero es más eficiente. Consulta la Section 14.4 para obtener más información sobre cómo mejorar el rendimiento de la carga masiva.