Logo Studenta

Base de datos_apunte1

¡Estudia con miles de materiales!

Vista previa del material en texto

14/06/14 about:blank
about:blank 1/8
Modificando Datos 
Insertar Registro en una Tabla 
Cláusula INSERT 
El comando INSERT agrega una o más nuevas filas a una tabla.
En un tratamiento simplificado, el comando INSERT toma la siguiente forma:
INSERT [INTO] tabla_o_vista [(lista_de_columnas)] valores_de_datos
INSERT trabaja tanto sobre tablas como sobre vistas (con algunas restricciones).
Este comando hace que los valores de los datos (valores_de_datos) sean insertados como una o mas
filas en la tabla o vista.
La palabra clave INTO en un comando INSERT es opcional y solo se utiliza para clarificar el código.
Valores por Defecto 
Inserta un registro en la tabla con todos los valores por defecto.
Hace que la nueva fila contenga los valores predeterminados definidos para cada columna.
INSERT INTO tabla DEFAULT VALUES
Para que esto tenga sentido las columnas deberían tener algunas de las siguientes propiedades:
Tiene una propiedad IDENTITY. Se usa el valor de identidad incremental siguiente.
Tiene un valor predeterminado. Se usa el valor predeterminado de la columna.
Tiene un tipo de datos timestamp. Se utiliza el valor actual de marca de hora.
Acepta valores NULL. Se usa un valor NULL.
14/06/14 about:blank
about:blank 2/8
Es una columna calculada. Se utiliza el valor calculado.
Insertando datos parciales 
La lista de los nombres de columnas (lista_de_columnas), separadas por comas, se usan para
especificar las columnas que recibirán los datos. Si no se indican columnas, todas las columnas de la
tabla o vista recibirán datos.
Si solo se indica una lista parcial de columnas, el resto de las columnas recibirán un valor nulo o el valor
configurado por defecto para esa columna, en caso que lo tenga.
Los valores ingresados deben coincidir con la lista de columnas. La cantidad de valores provistos debe
ser igual a la cantidad de columnas indicadas en la lista de columnas, y el tipo de dato, precisión, y
escala de cada valor debe coincidir con los de las columnas correspondientes.
Cuando se define un comando INSERT, se puede usar la cláusula VALUES para especificar los valores
de los datos para una fila o usar una subconsulta SELECT para especificar los valores para una o más
columnas.
Una cláusula VALUES permite especificar los valores para una fila de la tabla. Los valores son indicados
a través de una lista de expresiones escalares separadas por comas. Estos valores deben ser
implícitamente convertibles al tipo, precisión y escala de las columnas correspondientes. Si no se
especifica la lista de columnas, los datos deben ser ingresados en el mismo orden que tiene en la
definición de la tabla o vista.
INSERT único de múltiples filas (Ver. 2008 R2) 
Con SQL 2008 es posible insertar múltiples filas o rows en una sentencia de INSERT.
INSERT INTO Production.UnitMeasure
VALUES
(N'FT2',N'Square Feet ','20080923'),
(N'Y',N'Yards','20080923'),
(N'Y3',N'Cubic Yards','20080923');
GO
Insertando registros con SELECT 
Se puede usar una subconsulta SELECT dentro de un comando INSERT para agregar datos a una tabla
desdebv otra u otras tablas o vistas. Una subconsulta permite agregar más de una fila a la vez.
Una subconsulta SELECT en un comando INSERT se utiliza para agregar subconjuntos de datos
14/06/14 about:blank
about:blank 3/8
existentes a una tabla, mientras que la cláusula VALUES se usa para guardar datos nuevos en una
tabla.
Insertando registros con STORED PROCEDURES 
Se pueden insertar los resultados de la ejecución de un procedimiento almacenado directo en una
tabla.
La estructura de la tabla debe coincidir con el resultado que arroja el STORED PROCEDURE.
Para realizar esta operación es necesario utilizar la sentencia EXECUTE o EXEC
Modificar Datos de uno o varios Registros 
Cláusula UPDATE 
Una vez que se crean las tablas y que se ingresan datos, cambiar y actualizar los datos se convierte
en una tarea de mantenimiento diario SQL Server provee varios métodos para cambiar datos en una
tabla existente.
Estos procedimientos se pueden tanto a tablas como a vistas (con algunas restricciones)
El comando UPDATE puede cambiar datos en una columna simple, en grupos de columnas, o en todas
las columnas de una tabla o vista.
Un comando UPDATE que referencia a una tabla o una vista puede cambiar los datos en sólo una tabla
base por vez.
Una actualización será exitosa sólo si el nuevo valor es compatible con el tipo de datos de la columna y
cumple con todas las restricciones asociadas a esta.
UPDATE tabla SET campo1 = valor WHERE condición
SET indica que columna será actualizada y los nuevos valores que se guardarán. Los valores en las
columnas indicadas serán actualizados con los valores provistos en la cláusula SET en todas las filas
que cumplan con la condición de búsqueda especificada en la cláusula WHERE. Si no se especifica la
cláusula WHERE, todas las columnas serán actualizadas.
14/06/14 about:blank
about:blank 4/8
Modificaciones basadas en datos de otras tablas 
Se puede usar la cláusula FROM para traer datos desde una o más tablas o vistas para actualizar la
tabla.
USE Pubs
UPDATE NuevosLibros
SET Precio = Titulos.Precio
FROM NuevosLibros JOIN Titulos
ON NuevosLibros.LibroTitulo = Titulos.Titulo
Los resultados de una instrucción UPDATE están sin definir si la instrucción incluye una cláusula FROM
que no se especifica de manera que sólo haya un valor disponible para cada caso de columna que se
actualice, es decir, si la instrucción UPDATE no es determinista.
Borrar uno o varios Registros 
Cláusula DELETE 
Elimina los registros de una tabla o vista que satisfagan la cláusula WHERE.
Esta consulta elimina los registros completos, no es posible eliminar el contenido de algún campo en
concreto.
 Su sintaxis es: DELETE FROM Tabla WHERE criterio
DELETE puede eliminar uno o varios registros.
TRUNCATE TABLE 
El comando TRUNCATE TABLE es una forma rápida y no registrada de eliminar todas las filas en una
tabla.
Este método es casi siempre más rápido que un comando DELETE sin condiciones, porque DELETE
graba un registro de transacciones por cada fila eliminada, mientras que TRUNCATE TABLE solo graba
registro de liberación de las páginas de datos completas.
El comando TRUNCATE TABLE inmediatamente libera el espacio ocupado por los datos de la tabla e
índices.
14/06/14 about:blank
about:blank 5/8
También se liberan las páginas de distribución de todos los índices.
Como en el caso del comando DELETE, la definición de la tabla se mantiene en la base de datos
después que se aplica un comando TRUNCATE TABLE (incluidos sus índices y objetos asociados). Para
eliminar la definición de la tabla se debe usar el comando DROP TABLE.
Borrando registros basados en otras tablas 
DELETE tabla_o_vista FROM tabla_fuente WHERE condicion_de_busqueda
En tabla_o_vista se colocan el nombre de la tabla o vista en que serán eliminadas las filas.
Serán eliminadas todas las filas que cumplan con la condición de búsqueda especificada en la cláusula
WHERE.
Si esta no se indica, se eliminarán todas las filas de la tabla o vista.
La cláusula FROM indica tablas, vistas o combinaciones adicionales que se pueden usar en el predicado
de condición de la cláusula WHERE. No se borran las filas de las tablas indicadas en la cláusula FROM,
sino sólo de la especificada en la cláusula DELETE.
Sentencia MERGE (Versión 2008 R2) 
Introducción 
Realiza operaciones de inserción, actualización o eliminación en una tabla de destino según los
resultados de una combinación con una tabla de origen. Por ejemplo, se puede sincronizar dos tablas
insertando, actualizando o eliminando las filas de una tabla según las diferencias que se encuentren
en la otra. Esta sentencia simplifica las actualizaciones de tablas por ejemplo en un Datawarehouse.
Desde el punto de vista de performance MERGE es más óptimo que los correspondientes
UPDATE/DELETE/INSERT ya que mediante un solo plan de ejecución se pueden realizar las operaciones
que modifiquen, inserteno eliminen datos.
Argumentos más utilizados en la sentencia MERGE
target_table: Es la tabla o la vista con la que las filas de datos de <table_source> se
hacen coincidir según la <clause_search_condition>. target_table es el destino de
14/06/14 about:blank
about:blank 6/8
las operaciones de inserción, actualización o eliminación que las cláusulas WHEN de
la instrucción MERGE especifican. Si target_table es una vista, cualquier acción con
ella debe satisfacer las condiciones para actualizar las vistas. target_table no puede
ser una tabla remota. target_table no puede tener ninguna regla definida.
[ AS ] table_alias: Es un nombre alternativo que se utiliza para hacer referencia a una
tabla.
USING <table_source>: Especifica el origen de datos que se hace coincidir con las filas
de datos en target_tablesegún <merge_searchcondition>. El resultado de esta
coincidencia dicta las acciones que tomarán las cláusulas WHEN de la instrucción
MERGE. <table_source> puede ser una tabla remota o una tabla derivada que
tengan acceso a las tablas remotas.<table_source> puede ser una tabla derivada
que use el constructor convalores de tabla de Transact-SQL para construir una tabla
especificando varias filas.
ON <merge_search_condition>: Especifica las condiciones en las que <table_source> se
combina con target_table para determinar dónde coinciden.
WHEN MATCHED THEN <merge_matched>Especifica que todas las filas de target_table
que coinciden con las filas que devuelve <table_source> ON
<merge_search_condition> y que satisfacen alguna condición de búsqueda adicional
se actualizan o eliminan según la cláusula <merge_matched>. La instrucción MERGE
puede tener a lo sumo dos cláusulas WHEN MATCHED. Si se especifican dos
cláusulas, la primera debe ir acompañada de una cláusula AND <search_condition>.
Para una fila determinada, la segunda cláusula WHEN MATCHED se aplica solamente
si no se aplica la primera. Si hay dos cláusulas WHEN MATCHED, una debe especificar
una acción UPDATE y la otra una acción DELETE. Si se especifica UPDATE en la
cláusula <merge_matched> y más de una fila de <table_source> coincide con una
fila en target_table según la <merge_search_condition>, SQL Server devuelve un
error. La instrucción MERGE no puede actualizar la misma fila más de una vez, ni
actualizar o eliminar la misma fila.
WHEN NOT MATCHED [ BY TARGET ] THEN <merge_not_matched>Especifica que una fila
se inserta en target_table para cada fila que devuelve <table_source> ON
<merge_search_condition> que no coincide con una fila de target_table, pero
satisface una condición de búsqueda adicional, si está presente. La cláusula
<merge_not_matched> especifica los valores que insertar. La instrucción MERGE
puede tener solamente una cláusula WHEN NOT MATCHED.
WHEN NOT MATCHED BY SOURCE THEN <merge_matched>Especifica que todas las filas
de target_table que no coinciden con las filas que devuelve <table_source> ON
<merge_search_condition> y que satisfacen alguna condición de búsqueda adicional
se actualizan o eliminan según la cláusula <merge_matched>. La instrucción MERGE
puede tener a lo sumo dos cláusulas WHEN NOT MATCHED BY SOURCE. Si se
especifican dos cláusulas, la primera debe ir acompañada de una cláusula AND
<clause_search_condition>. Para una fila determinada, la segunda cláusula WHEN
NOT MATCHED BY SOURCE se aplica solamente si no se aplica la primera. Si hay dos
cláusulas WHEN NOT MATCHED BY SOURCE, una debe especificar una acción UPDATE
y la otra una acción DELETE. Solamente se puede hacer referencia a las columnas de
la tabla de destino en <clause_search_condition>.
14/06/14 about:blank
about:blank 7/8
AND <clause_search_condition>Especifica cualquier condición de búsqueda válida. Para
obtener más información, vea Condiciones de búsqueda (Transact-SQL).
Si se especifica READPAST con WHEN NOT MATCHED [ BY TARGET ] THEN INSERT, pueden producirse
operaciones INSERT que infrinjan las restricciones UNIQUE.
<output_clause>Devuelve una fila para cada fila de target_table que se actualiza,
inserta o elimina, en ningún orden en concreto. Para obtener más información acerca
de los argumentos de esta cláusula, vea OUTPUT (cláusula de Transact-SQL).
<merge_matched>Especifica la acción de actualización o eliminación que se aplica a
todas las filas de target_table que no coinciden con las filas que devuelve
<table_source> ON <merge_search_condition>, y que satisfacen cualquier condición
de búsqueda adicional.
UPDATE SET <set_clause>Especifica la lista de nombres de columna o de variable que se
van a actualizar en la tabla de destino y los valores con los que se actualizan.
DELETEEspecifica que las filas coincidentes de las filas de target_table se eliminan.
<merge_not_matched>Especifica los valores que insertar en la tabla de destino.
(column_list )Es una lista de una o varias columnas de la tabla de destino en la que
insertar los datos. Las columnas se deben especificar como un nombre de una sola
parte o, de lo contrario, se producirá un error en la instrucción MERGE. column_list se
debe agregar entre paréntesis y delimitarse mediante comas.VALUES ( values_list )
<searchcondition>Especifica las condiciones de búsqueda utilizadas para especificar
<merge_search_condition> o <clause_search_condition>.
Ejemplo de MERGE: 
Datos las siguientes dos tablas Table1 y Table2:
MERGE dbo.Table1 AS Target
USING (SELECT codigo, nombre FROM dbo.Table2) AS Source
ON (Target.codigo = Source.codigo)
14/06/14 about:blank
about:blank 8/8
WHEN MATCHED THEN
UPDATE
SET Target.nombre = Source.nombre
WHEN NOT MATCHED BY TARGET THEN
INSERT (codigo, nombre )
VALUES (Source.codigo,Source.nombre);
WHEN NOT MATCHED BY SOURCE THEN
DELETE;
Este script SQL lo que hace es comparar Table1 con Table2. En el caso que los campos codigos
coinciden hace un UPDATE del campo nombre de Table2 sobre el campo nombre de Table1. En el caso
que hay registros de Table2 que no existen en Table1 (osea que no hacen MATCH) los inserta en
Table1. Y por ultimo si hay registros en Table1 que no existen en Table2 los borra de Table1.
El resultado de la operación quedaria:

Continuar navegando

Materiales relacionados

206 pag.
Base de Datos Avanzado I

Universidade de Vassouras

User badge image

GALLEGOS SEVILLA MARIA GUADALUPE

39 pag.
Lenguaje SQL _DDL y DML_

User badge image

Materiales Generales

30 pag.
clase4 - Yuliana Ruiz Borrayo

User badge image

Desafio PASSEI DIRETO