
Anteriormente hemos visto la posibilidad de insertar registros en una tabla a través de la sentencia INSERT
, por ejemplo:
INSERT INTO USUARIOS (Login, Password, Nombre, Apellidos, direccion,cp,localidad,provincia,pais,Correo) VALUES ('natsan63',
'VBROMI', 'NATALIA', 'SANCHEZ GARCIA','C/Blanca','28003','Madrid','Madrid','Spain', 'natsan63@hotmail.com');
Esta misma acción se puede realizar usando una consulta SELECT
dentro de la sentencia INSERT
, así por ejemplo, la equivalente a la anterior sería:
INSERT INTO (SELECT Login, Password, Nombre, Apellidos, direccion,cp,localidad,provincia,pais,Correo FROM USUARIOS) VALUES ('natsan63',
'VBROMI', 'NATALIA', 'SANCHEZ GARCIA','C/Blanca','28003','Madrid','Madrid','Spain', 'natsan63@hotmail.com');
Puedes observar que simplemente se ha sustituido el nombre de la tabla, junto con sus campos, por una consulta equivalente.
También es posible insertar en una tabla valores que se obtienen directamente del resultado de una consulta. Supongamos por ejemplo, que disponemos de una tabla USUARIOS_SIN_CREDITO
con la misma estructura que la tabla USUARIOS
ya creada. Si queremos insertar en esa tabla todos los usuarios que tienen el crédito a cero:
INSERT INTO USUARIOS_SIN_CREDITO SELECT * FROM USUARIOS WHERE Credito = 0;
Observa que en ese caso no se debe especificar la palabra VALUES
, ya que no se está especificando una lista de valores.
Se puede crear una tabla e insertar datos a partir de una consulta. Podemos crear la tabla USUARIOS_CON_CREDITO
partiendo de la tabla usuario, si queremos crearla exactamente con el mismo número de campos y con su contenido pondremos:
CREATE TABLE USUARIOS_CON_CREDITO AS SELECT * FROM USUARIOS WHERE CREDITO >0 ;
Si queremos crear una tabla USUARIAS con la misma estructura, pero sin contenido especificaremos una condición que no se cumpla nunca y así ningún registro se copiará:
CREATE TABLE USUARIAS AS SELECT * FROM USUARIOS WHERE 1 <0;
A partir de aquí podremos insertar en esta nueva tabla:
INSERT INTO USUARIAS
SELECT * FROM USUARIOS WHERE UPPER(SEXO)='M';
Observa que en ese caso no es necesario incorporar en la instrucción la palabra VALUES
ya que para cada fila insertada incorporamos los valores correspondientes a todas las columnas de la tabla de destino.