6.1. Inserción de datos
Cuando se crea una tabla, ésta no contiene datos. Lo primero que hay que hacer antes de que una base de datos pueda ser de mucha utilidad es insertar datos. Los datos se insertan conceptualmente una fila a la vez. Por supuesto, también se puede insertar más de una fila, pero no hay manera de insertar menos de una fila. Aunque sólo se conozcan algunos valores de las columnas, hay que crear una fila completa.
Para crear una nueva fila, se utiliza el comando INSERT. El comando requiere el nombre de la tabla y los valores de las columnas. Por ejemplo, considere la tabla de productos del capítulo 5:
CREATE TABLE products ( product_no integer, name text, price numeric);
Un ejemplo de comando 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. Normalmente, los valores de los datos serán literales (constantes), pero también se permiten expresiones escalares.
La sintaxis anterior tiene el inconveniente de que se necesita conocer el orden de las columnas en la tabla. Para evitar esto también se pueden listar 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 una buena práctica listar 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 rellenarán con sus valores por defecto. Por ejemplo:
INSERT INTO products (product_no, name) VALUES (1, 'Cheese');INSERT INTO products VALUES (1, 'Cheese');
El segundo formulario es una extensión de PostgreSQL. Rellena las columnas de la izquierda con tantos valores como se le den, y el resto serán por defecto.
Para mayor claridad, también se pueden solicitar valores por defecto 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;
Se pueden insertar varias 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 puede 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 (Capítulo 7) para calcular las filas a insertar.
Consejo: Al insertar muchos datos al mismo tiempo, considere el uso del comando COPY. No es tan flexible como el comando INSERT, pero es más eficiente. Consulte la Sección 14.4 para obtener más información sobre cómo mejorar el rendimiento de la carga masiva.