Publicado el 14 de Abril del 2019
773 visualizaciones desde el 14 de Abril del 2019
104,1 KB
9 paginas
1. DML. Insertar datos
1.1 Insertar en una tabla existente INSERT
La inserción de nuevos datos en una tabla, se realiza añadiendo filas a la tabla, la sentencia SQL que lo
permite es la orden INSERT (o también denominada INSERT INTO).
De la sentencia INSERT completa, nosotros estudiaremos la sintaxis más utilizada y estándar:
INSERT [INTO] <destino>
{
[(lista_columnas)]
{VALUES ({DEFAULT|NULL|expresion}[ ,...n ])
|tabla_derivada
}
}
|DEFAULT VALUES
[;]
<destino> ::=
{
[nbBaseDatos.[nbEsquema.]| nbEsquema.]nbTablaVista
}
Con esta instrucción podemos insertar una fila de valores determinados o un conjunto de filas derivadas
de otra consulta.
1.1.1 Insertar una fila de valores
Para insertar una fila de valores utilizamos la sintaxis:
INSERT [INTO] <destino> [(lista_columnas)]
VALUES ({DEFAULT|NULL|expresion}[ ,...n ])
[;]
La palabra reservada INTO es opcional y no añade funcionalidad a la instrucción, originalmente era
Después de indicar que queremos insertar, debemos indicar dónde, mediante <destino>.
<destino> es el nombre de la tabla donde queremos insertar, puede ser un nombre de tabla o un nombre
obligatoria.
de vista.
Si utilizamos una vista, y ésta tiene un origen basado en varias tablas, en su lista de selección deberán
aparecer columnas de una sola tabla (no podemos insertar datos en varias tablas a la vez).
Con la cláusula VALUES indicamos entre paréntesis los valores a insertar, separados por comas.
Cada valor se puede indicar mediante:
• una expresión que normalmente será una constante,
• mediante la palabra reservada DEFAULT que indica ‘valor por defecto’ en este caso la columna se
rellenará con el valor predeterminado de la columna, si la columna no tiene DEFAULT se sustituirá por
el valor nulo NULL.
• Mediante la palabra reservada NULL valor nulo.
Delante de VALUES, de forma opcional podemos indicar una lista de columnas entre paréntesis. Las
columnas son columnas del destino.
Cuando indicamos nombres de columnas, las columnas serán las que reciban los valores a insertar, la
asignación de valores se realizará por posición, la primera columna recibirá el primer valor, la segunda columna
el segundo, y así sucesivamente.
1
En la lista, las columnas pueden estar en cualquier orden y también se pueden omitir algunas columnas.
Una columna que no aparezca en la lista de columnas se rellenará de acuerdo a su definición:
•
•
•
•
con su valor por defecto si está definida con la cláusula DEFAULT
con el valor de identidad incremental siguiente si tiene la propiedad IDENTITY.
con el valor calculado si es una columna calculada.
con el valor NULL , en cualquier otro caso y si la columna lo admite.
Cuando no se indica una lista de columnas el sistema asume por defecto todas las columnas de la tabla
y en el mismo orden que aparecen en la definición de la tabla, en este caso, los valores se tienen que
especificar en el mismo orden que el esquema de la tabla, y se tiene que especificar un valor por cada
columna.
En cualquier caso, el número de valores debe coincidir con el número de columnas y los tipos de dato de
los valores deben ser compatibles con las columnas.
Aunque pueda parecer más engorroso escribir la lista de columnas, es un hábito recomendable, hace
que la sentencia sea más fácil de leer y mantener (cuando leemos la sentencia sabemos en qué columnas
asignamos los valores sin necesidad de consultar el esquema de la tabla) y evita que se tenga que cambiar la
sentencia si se modifica el esquema de la tabla (si el orden de las columnas dentro de la tabla cambia).
Los registros se agregan al final de la tabla.
Cuando se insertan nuevas filas en una tabla, el sistema comprobará que la nueva fila no infrinja ninguna
regla de integridad, por ejemplo no podremos asignar a una columna PRIMARY KEY un valor nulo o que ya
exista en la tabla, a una columna UNIQUE un valor que ya exista en la tabla, a una columna NOT NULL un
valor NULL, a una clave ajena (FOREIGN KEY) un valor que no exista en la tabla de referencia.
De producirse alguna de las situaciones anterior, la instrucción genera un mensaje de error y la fila no se
inserta.
Ejemplos.
INSERT INTO oficinas (oficina, ciudad) VALUES (26, 'Elx');
En este hemos indicado sólo dos columnas y dos valores, las demás columnas se rellenan con el valor
por defecto si lo tiene (DEFAULT) o con NULL. Si alguna columna no nombrada no admite nulos ni tiene
cláusula DEFAULT definida, la instrucción dará error.
INSERT INTO oficinas
VALUES (27,'Móstoles','Centro',default ,null, default)
Aquí no hemos indicado una lista de columnas luego los valores se tienen que indicar en el mismo orden
que las columnas dentro de la tabla, si nos equivocamos de orden, el valor se guardará en una columna
errónea (si los tipos son compatibles) o generará un mensaje de error y la fila no se insertará (si los tipos no
son compatibles).
1.1.2 Inserción de varias filas
Si los valores que queremos insertar los tenemos en otras tablas, podemos insertar varias filas a la vez
indicando una consulta que genere las filas de valores a insertar. En este caso utilizamos la sintaxis:
INSERT [INTO] <destino> [(lista_columnas)]
tabla_derivada
[;]
<destino> y lista_columnas funcionan igual que en el punto anterior.
2
Tabla_derivada es cualquier instrucción SELECT válida que devuelva filas con los datos que se van a
cargar en el destino.
Cada fila devuelta por la SELECT es una lista de valores que se intentará insertar como con la cláusula
VALUES, por lo que las columnas devueltas por la SELECT deberán cumplir las mismas reglas que los valores
de la lista de valores anteriores.
Ejemplo:
CREATE TABLE trabajo (col1 INT, col2 VARCHAR(20), col3 MONEY);
Creamos una tabla trabajo de 3 columnas
INSERT INTO trabajo SELECT oficina, ciudad, ventas
FROM oficinas
WHERE region = 'Centro';
Insertamos en trabajo el resultado de la SELECT (el número de oficina, ciudad y ventas de las oficinas
En este caso no hemos incluido una lista de columnas, por lo que en la SELECT tenemos que generar
del Centro).
los valores en el mismo orden que en trabajo.
Si hubiesemos escrito:
INSERT INTO trabajo SELECT ciudad, oficina, oficina
FROM oficinas
WHERE region = 'Centro';
Hubiese dado error porque la columna col1 es INT y el valor a asignar es texto (el nombre de la ciudad
de la oficina).
INSERT INTO trabajo (col2, col1)
SELECT ciudad, oficina
FROM oficinas
WHERE region = 'Este';
En este caso hemos incluido una lista de columnas, la SELECT debe generar los valores
correspondientes, y col3 que no se rellena explícitamente se rellenará con NULL porque la columna col3 no
está definida como columna calculada, ni con DEFAULT, ni IDENTITY.
1.1.3 Insertar una fila de valores por defecto
TRANSACT-SQL nos permite insertar una fila de valores por defecto utilizando la sintaxis:
INSERT [INTO] <destino> DEFAULT VALUES
[;]
Hace que la nueva fila contenga los valores predeterminados definidos para cada columna.
Hay que tener en cuenta que una serie de aspectos al utilizar esta instrucción:
Puede generar filas duplicadas en la tabla si los valores que se generan son siempre los mismos.
Si la tabla tiene una clave principal, esta tendrá que estar basada en una columna con la propiedad
IDENTITY para que se generen valores diferentes automáticamente.
Si una columna está definida como NOT NULL tendrá que incluir un DEFAULT o ser una columna
calculada con una expresión compatible.
3
1.2 Insertar creando una nueva tabla
Existe otra forma de insertar datos en una tabla pero esta vez la inserción incluye la creación de la tabla,
esta es la sentencia SELECT... INTO.
SELECT …
INTO nb_NuevaTabla
FROM …
nb_NuevaTabla es el nombre de la tabla que se va a crear, si en la base de datos ya hay una tabla con
ese nombre, el sistema genera un error y no se ejecuta la sentencia.
En la nueva tabla las columnas tendrán el mismo tipo y tamaño que las columnas del resultado de la
SELECT, se llamarán con el nombre de alias de la columna o en su defecto con el nombre de la columna, pero
no se transfiere ninguna otra propiedad del campo o de la tabla como por ejemplo las claves e índices.
SI retomamos el ejemplo del punto anterior:
CREATE TABLE trabajo (col1 INT, col2 VARCHAR(20), col3 MONEY);
INSERT INTO trabajo SELECT oficina, ciudad, ventas
FROM oficinas
WHERE region = 'Centro';
Se podría obtener el mismo resultado con una sola instrucción:
SELECT oficina AS col1, ciudad AS col2, ventas AS col3
INTO trabajo
FROM oficinas
WHERE region = 'Centro';
4
2. DML. Eliminar datos
2.1 La sentencia DELETE
La sentencia DELETE elimina filas de una tabla. Si se borran todas las filas, o se borra la única fila de
una tabla, la definición de la tabla no desaparece, sólo que la tabla se queda vacía.
Tiene la siguiente sintaxis:
DELETE
[ TOP ( expression ) [ PERCENT ] ]
[ FROM ] <origen>
[ WHERE < condicion>]
[; ]
<origen> ::=
{
[nbBaseDatos.[nbEsquema.]| nbEsquema.]nbTablaVista
}
Con esta instrucción podemos eliminar una o varias filas de una tabla.
La palabra FROM es opcional (originalmente era obligatorio) y no añade funcionalidad sólo sirve para
introducir el origen.
<origen> es el nombre de la
Comentarios de: 1. DML. Insertar datos (0)
No hay comentarios