La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Unidad 3 Lenguaje de manipulación de datos(DML).

Presentaciones similares


Presentación del tema: "Unidad 3 Lenguaje de manipulación de datos(DML)."— Transcripción de la presentación:

1 Unidad 3 Lenguaje de manipulación de datos(DML)

2 3.1 Inserción, eliminación y modificación de registros
INSERT La sentencia INSERT permite agregar nuevas filas de datos a las tablas existentes. Está sentencia tiene como sintaxis genérica. INSERT INTO tabla_o_vista [(lista_de_columnas)] VALUES (lista_de_valores_de_datos) Para insertar datos en una relación, se específica la tupla que se desea insertar o se formula una consulta cuyo resultado sea el conjunto de tuplas que se desea insertar. Obviamente, los valores de los atributos de las tuplas que se inserten deben pertenecer al dominio de los atributos. De igual modo, las tuplas insertadas deben ser de la aridad -número de atributos- correcta. Considere el siguiente Diagrama Entidad Relación y su correspondiente script Oracle CREATE TABLE departamento ( idDepartamento NUMBER(3), nombre CHAR(15) NOT NULL, ciudad CHAR(10) NOT NULL, CONSTRAINT DOM_Ciudad CHECK (ciudad IN ('Veracruz', 'Xalapa', 'Orizaba', 'Regional')), CONSTRAINT PK_Departamento PRIMARY KEY (idDepartamento) ); CREATE TABLE empleado( idEmpleado NUMBER(3), rfc CHAR(14), nombreEmpleado CHAR(40) NOT NULL, oficio CHAR(11) NOT NULL, cargo CHAR(15) NOT NULL, jefe NUMBER(3), ingreso DATE NOT NULL, salario NUMBER(10,2), comision NUMBER(10,2), idDepartamento NUMBER(3) NOT NULL, CONSTRAINT DOM_Empleado_Salario CHECK ( salario > 0 ), CONSTRAINT PK_Empleado PRIMARY KEY (idEmpleado), CONSTRAINT AK_Empleado UNIQUE (rfc), CONSTRAINT FK_Empleado_Jefe FOREIGN KEY (jefe) REFERENCES Empleado, CONSTRAINT FK_Empleado FOREIGN KEY (idDepartamento) REFERENCES Departamento, CONSTRAINT DOM_Empleado_NombreEmpleado CHECK (nombreEmpleado = NLS_UPPER(nombreEmpleado))

3 Considere los siguientes datos
Tabla: Departamento idDepartamento Departamento Ciudad 1 Ventas Veracruz 2 Ventas Xalapa 3 Cobranza Veracruz 4 Cobranza Xalapa 5 Credito Orizaba 6 Credito Veracruz 7 Credito Xalapa Un formato posible es: INSERT INTO nombre-tabla VALUES (serie de valores); El orden en el que se asignen los valores en la cláusula VALUES tiene que coincidir con el orden en que se definieron las columnas en la creación del objeto tabla, dado que los valores se asignan por posicionamiento relativo. Por ejemplo: INSERT INTO departamento VALUES (1,'Ventas','Veracruz'); INSERT INTO departamento VALUES (2,'Ventas','Xalapa'); INSERT INTO departamento VALUES (3,'Cobranza','Veracruz'); INSERT INTO departamento VALUES (4,'Cobranza','Xalapa'); INSERT INTO departamento VALUES (5,'Credito','Orizaba'); INSERT INTO departamento VALUES (6,'Credito','Veracruz'); INSERT INTO departamento VALUES (7,'Credito','Xalapa');

4 Otra forma de usar la sentecia INSERT es:
INSERT INTO nombre-tabla (columna1, columna2...) VALUES (valor1, valor2...); En este caso los valores se asignarán a cada una de las columnas mencionadas por posicionamiento relativo. Es necesario que por lo menos se asignen valores a todas aquellas columnas que no admiten valores nulos en la tabla (NOT NULL). Por ejemplo: INSERT INTO empleado (idempleado, rfc, nombreempleado, oficio, cargo, jefe, ingreso, salario, comision, idDepartamento) VALUES (12, 'ROTL790411FRT', 'ROMERO TERRENOS, LUIS', 'Ingeniero', 'Director', NULL, '01/01/2006', 7000, 0.2, 4); Insertar mediante un SELECT CREATE GLOBAL TEMPORARY TABLE detalle ( rfc CHAR(14) PRIMARY KEY, nombreEmpleado CHAR(40) NOT NULL, salarioNeto NUMBER(10,2) ) ON COMMIT PRESERVE ROWS; INSERT INTO detalle SELECT rfc, nombreEmpleado, salario + salario*comision FROM empleado WHERE comision > 0;

5 Inserción por selección Sentencia WHEN
Ejemplo: Usaremos la cotización del dolar para solventar obligaciones el archivo original contiene valores de 1995 al 18 de enero de Separemos esta tabla en cotizaciones mayores de 14 pesos, entre 13 a 14 y otras CREATE TABLE dolar ( fecha DATE, precio NUMBER(8,4) ); CREATE TABLE dolar13 ( CREATE TABLE dolar12 ( CREATE TABLE dolarOtros ( INSERT WHEN (precio >= 13) THEN INTO dolar13 VALUES (fecha, precio) WHEN (precio >= 12 AND precio < 13) THEN INTO dolar12 VALUES (fecha, precio) ELSE INTO dolarOtros VALUES (fecha, precio) SELECT * FROM dolar

6 DELETE (Oracle y MySQL)
Borrará todas las filas que cumplan la condición especificada en la cláusula WHERE. Si esta cláusula se omite, se borrarán todas las filas de la tabla. DELETE borra todas las filas de una tabla, pero no la definición de la tabla del diccionario. Esta es una diferencia con la sentencia DROP TABLE, que elimina el contenido de la tabla y la definición de la misma. La sintaxis es la que sigue: DELETE FROM tabla [WHERE condición]; Obsérvese que cada comando DELETE sólo opera sobre una relación. Si se desea borrar tuplas de varias relaciones es necesario utilizar una orden DELETE por cada relación. La consulta DELETE FROM empleados; Borra todas las tuplas de la tabla empleados DELETE FROM empleados WHERE cargo = 'Chofer'; Borra los empleados con cargo de chofer

7 Cuando trabajemos con la sentencia DELETE debemos tener en cuenta las siguientes consideraciones:
Solo podemos borrar datos de una única tabla. Cuando borramos datos de una vista, los estamos borrando también de la tabla. Las vistas son solo una forma de ver los datos, no una copia. Si intentamos borrar un registro de una tabla referenciada por una FOREING KEY como tabla maestra, si la tabla dependiente tiene registros relacionados la sentencia DELETE fallará a no ser que la tabla hija contenga la sentencia ON DELETE CASCADE.. TRUNCATE TRUNCATE es una mejor alternativa a DELETE cuando se desea borrar todo el contenido de la tabla. La sintaxis es: TRUNCATE TABLE nombre_tabla; Eliminar registros con la sentencia TRUNCATE es más rápido que con la sentencia DELETE, especialmente cuando la tabla tiene numerosos disparadores, índices y otras dependencias como por ejemplo integridad referencial. La sentencia TRUNCATE no es transaccional. No se puede deshacer (ROLL BACK) y ocurre un error en casos de bloqueo de tabla. La tabla puede recrearse como una vacía con TRUNCATE TABLE, incluso si los archivos de datos o de índice se han corrompido En MySQL el manejador de tablas reinicia el valor AUTO_INCREMENT usado. Esto es cierto incluso para MyISAM y InnoDB

8 UPDATE En determinadas situaciones puede ser deseable cambiar un valor dentro de una tupla, sin cambiar todos los valores de la misma. Para ello se utiliza el comando UPDATE cuya sintaxis se muestra a continuación. UPDATE tabla SET {columna = expresión,} + [WHERE condición;] Se especificará en la cláusula SET las columnas que se actualizarán y con qué valores. La cláusula WHERE indica las filas con las que se va a trabajar, sin la cláusula WHERE la actualización afectará a todas las filas de la tabla. Si se desea actualizar a nulos, se asignará el valor NULL. UPDATE cliente SET observaciones = NULL; Por ejemplo, cambie el nombre del departamento Credito por Crédito. UPDATE Departamento SET nombre = 'Crédito' WHERE nombre = 'Credito'; La clausula WHERE permite SELECT anidados como en el caso del INSERT o el DELETE.

9 SQL ofrece el constructor CASE, que puede usarse para formular actualizaciones dependientes. Por ejemplo; CREATE TABLE moreliaC2012( numero NUMBER(3), nombreJugador CHAR(40), posicion CHAR(4), jj NUMBER(2), jc NUMBER(2), jt NUMBER(2), ec NUMBER(2), sc NUMBER(2), minutos NUMBER(6), gol NUMBER(4), ppg NUMBER(2), tr NUMBER(2), ta NUMBER(2) ); CREATE TABLE juegoLimpio ( nombre CHAR(45), juega CHAR(15) INSERT INTO juegoLimpio (nombre,juega) SELECT nombreJugador,(ta+tr) FROM moreliaC2012; UPDATE juegoLimpio SET juega = CASE WHEN juega = '0' THEN 'Limpio' ELSE 'Sucio' END; SELECT * FROM juegoLimpio; Descargar

10 CREATE TABLE moreliaC2012(
numero INTEGER(3), nombreJugador CHAR(40), posicion CHAR(4), jj INTEGER(2), jc INTEGER(2), jt INTEGER(2), ec INTEGER(2), sc INTEGERER(2), minutos INTEGER(6), gol INTEGER(4), ppg INTEGER(2), tr INTEGER(2), ta INTEGER(2) ); CREATE TABLE juegoLimpio ( nombre CHAR(45), juega CHAR(15) INSERT INTO juegoLimpio (nombre,juega) SELECT nombreJugador,(ta+tr) FROM moreliaC2012; UPDATE juegoLimpio SET juega = CASE WHEN juega = '0' THEN 'Limpio' ELSE 'Sucio' END; SELECT * FROM juegoLimpio;


Descargar ppt "Unidad 3 Lenguaje de manipulación de datos(DML)."

Presentaciones similares


Anuncios Google