63
Manipulación de Datos tanto en SQL Server 2000 como en Oracle 8i y 9i

manipulacion datos

Embed Size (px)

DESCRIPTION

base de datos

Citation preview

Manipulación de Datos tanto en SQL Server 2000 como en Oracle 8i y 9i

Contenido:

Sentencia SELECT Sentencia INSERT Sentencia UPDATE Sentencia DELETE y TRUNCATE TABLE JOINGS y Desencadenadores (TRIGGER) Ejercicios en ORACLE Rollback y Commit

Objetivos:

Conocer los comandos DML tanto en SQL Server 2000 como en Oracle 8i y 9i

Realizar JOINS Conocer la funcionalidad de los

Desencadenadores (TRIGGER) Ejercicios de aplicación

Sentencia SELECT

Recupera información de la Base de Datos y permite la selección de una o más filas o columnas de una o muchas tablas. La sintaxis completa de la instrucción SELECT es compleja, sus cláusulas principales pueden ser resumidas de la siguiente manera.

Sentencia SELECT

SELECT lista_cols [INTO nueva_tabla] FROM tabla_origen [WHERE condición]

[GROUP BY columna1,…] [HAVING condición]

[ORDER BY columna1, … [ASC][DESC]]

Sentencia SELECT

Tener en cuenta lo siguiente: La lista de select recupera y muestra las

columnas en el orden especificado. Separar los nombres de columnas con

comas, excepto la última columna. Usar un asterisco en la lista de select para

recuperar todas las columnas de la tabla.

Ejemplo de SELECT

Mostrar las lista de las oficinas de ventas con sus objetivos y ventas reales

SELECT CIUDAD, OBJETIVO, VENTAS FROM Oficinas GO

Ejemplo de SELECT

Mostrar los nombres, objetivos y ventas de los vendedores

SELECT NOMBRE, OBJETIVO, VENTAS FROM REPVENTAS GO

Sentencia INSERT

Utilice la sentencia INSERT para agregar registros a una tabla.

La sintaxis reducida puede ser : INSERT [INTO] <Nombre de la Tabla> VALUES

(Valor1, ....) GO Recuerde que si el valor que intenta agregar a una de

las columnas no cumple con alguno de los constraints establecidos la operación abortará inmediatamente.

Sentencia INSERT

También es posible agregar múltiples filas a través del siguiente formato:

INSERT [INTO] <Nombre de la Tabla> SELECT <lista de campos> FROM

<Tabla>

Ejemplo de INSERT

Insertar los siguientes registros a la tabla de Clientes

 INSERT Clientes Values (500, 'Mauricio Hidalgo', 104, 45000) GO

INSERT Clientes Values (501, 'Gaby Mansilla', 104, 45000) GO

INSERT Clientes Values (502, 'Cristina Donayre', 104, 45000) GO

 Select * From Clientes GO

Sentencia UPDATE

Esta sentencia nos permite modificar la información de las tablas.

 La sintaxis reducida puede ser:  UPDATE <Nombre de la Tabla> SET

<columna> = <Nuevo Valor> [WHERE <condición>] GO

Sentencia UPDATE

Recuerde que si la actualización de una fila no cumple con una restricción o regla, infringe la configuración de valores NULL o si el nuevo valor es de un tipo de datos incompatible, se cancela la instrucción, se devuelve un error y no se actualiza ningún registro

Ejemplo de UPDATE

Actualizar la información del registro del cliente de código 502

 UPDATE Clientes SET empresa = 'Cristina Hidalgo' WHERE num_clie = 502 GO

 Select * From Clientes Where num_clie= 502 GO

Ejemplo de UPDATE

A cada código sumarle 500 para los códigos menores que 1000

 UPDATE Clientes SET num_clie = num_clie + 500 WHERE num_clie < 1000 GO

 Select * From Clientes GO

Sentencia DELETE

La sentencia DELETE remueve filas de una tabla.

 La sintaxis de DELETE puede ser:  DELETE <Nombre de la tabla> [WHERE

<Condición>]

Sentencia DELETE y TRUNCATE TABLE Usar la instrucción DELETE para eliminar

una o más filas de una tabla. Tener en cuenta las siguientes consideraciones:

El SQL Server borra todas las filas de una tabla a menos que se use la cláusula WHERE.

Cada fila borrada genera historia en el Log de Transacciones.

Ejemplo de DELETE

Eliminar el registro de código 1000 en la tabla de clientes

 DELETE Clientes WHERE Num_Clie = 1000 GO SELECT * FROM CLIENTES GO

Ejemplo de DELETE

Eliminar los registros cuyo código de cliente es menor que 2000

DELETE Clientes WHERE Num_Clie < 2000 GO

SELECT * FROM CLIENTES GO

Sentencia TRUNCATE TABLE

Para eliminar registros puede utilizar también la sentencia TRUNCATE TABLE, que resulta más rápida que DELETE puesto que no genera entradas en el log de transacciones.

 Su sintaxis es:  TRUNCATE TABLE <Nombre de la

Tabla>

Ejemplo de TRUNCATE TABLE TRUNCATE TABLE MejoresCli GO  Select * From MejoresCli GO  Luego de probar este ejemplo elimine la

tabla MejoresCli  DROP TABLE MejoresCli GO

Recuperar información de dos o más tablas (JOINS)

Para muchas de las consultas que los usuarios realizan sobre la data almacenada en nuestra base de datos es necesario extraer información de más de una tabla, para ello es necesario emplear los JOINS que representan una operación para producir un conjunto de resultados que incorporen filas y columnas de las tablas referidas en la consulta, esto lo hace basándose en columnas comunes a las tablas.

JOINS

Cuando se ejecutan los JOINS, SQL Server compara los valores de las columnas especificadas fila por fila entonces usa los resultados de la comparación para combinar los valores que califican como nuevas filas.

JOINS

SELECT <lista de columnas> FROM <tabla o vista > [INNER | LEFT|RIGHT|FULL

[OUTER]] JOIN <Tabla o Vista > ON <condición>

Ejemplo de JOINS Mostrar los pedidos indicando el número de

pedido, importe, nombre del cliente y el límite de crédito

SELECT Num_Pedido, Importe, Empresa, Limite_credito

FROM PEDIDOS INNER JOIN CLIENTES ON CLIE = NUM_CLIE GO

Ejemplo de JOINS

Muestra la lista de vendedores con especificación de la ciudad y región a la cual pertenece

SELECT Nombre, Ciudad, Región FROM REPVENTAS INNER JOIN

OFICINAS ON OFICINA_REP = OFICINA GO

Desencadenadores (TRIGGERS)

Un Desencadenador (Trigger) es un tipo especial de procedimiento almacenado que se activa de forma controlada por sucesos antes que por llamadas directas. Los desencadenadores (Triggers) están asociados a tablas.

TRIGGERS

Son una gran herramienta para controlar las reglas de negocio más complejas que una simple integridad referencial, los desencadenadores (Triggers) y las sentencias que desencadenan su ejecución trabajan unidas como una transacción.

TRIGGERS

El grueso de instrucciones de la definición del Desencadenador deben ser INSERT, UPDATE o DELETE, aunque se puede utilizar SELECT, no es recomendable ya que el usuario no espera que se le devuelva registros luego de agregar o modificar información.

Los desencadenadores (Triggers) siempre toman acción después de que la operación fue registrada en el log

TRIGGERS

CREATE DESENCADENADOR <Nombre del Desencadenador>

ON <Nombre de la Tabla> FOR <INSERT l UPDATE l DELETE> AS Sentencias…. GO

Ejemplo de Desencadenador (TRIGGERS) GO CREATE DESENCADENADOR NuevoPedido ON Pedidos FOR INSERT AS UPDATE RepVentas SET VENTAS =VENTAS + INSERTED.IMPORTE FROM REPVENTAS INNER JOIN INSERTED ON REPVENTAS.NUM_EMPL = INSERTED.REP UPDATE PRODUCTOS SET EXISTENCIAS = EXISTENCIAS - INSERTED.CANT FROM PRODUCTOS INNER JOIN INSERTED ON PRODUCTOS.ID_FAB = INSERTED.FAB AND PRODUCTOS.ID_PRODUCTO = INSERTED.PRODUCTO GO

Sentencia SELECT en ORACLE

Una SELECT recupera información de la BD. La definición básica es la siguiente:

SELECT [DISTINCT] {*, columna [[AS] alias]}

FROM tabla;

Sentencia SELECT en ORACLE

SELECT identifica qué columnas forman parte de la respuesta resultante

FROM identifica desde qué tablas se extraen los datos respuesta

 Palabra clave: hace referencia a un elemento SQL individual. (“SELECT”,“FROM”)

Sentencia SELECT en ORACLE

Cláusula: es una parte de una sentencia SQL. (“SELECT ID, NOMBRE”)

Sentencia: combinación de dos o más cláusulas. (“SELECT * FROM DEPARTAMENTOS”)

Ejemplo de SELECT en ORACLE Seleccionar todas las columnas de una tabla SELECT * FROM DEPARTAMENTOS;

  Seleccionar algunas columnas de una tabla SELECT NOMBRE, APELLIDOS FROM EMPLEADOS;

Ejemplo de SELECT en ORACLE SELECT NOMBRE, SUELDO, SUELDO +

35000 FROM EMPLEADOS;  Precedencia de los operadores:  La multiplicación y división tienen prioridad

sobre la suma y resta.  Los operadores de igual prioridad se evalúan

de izquierda a derecha.  Los paréntesis permiten cambiar la prioridad.

Ejemplo de SELECT en ORACLE SELECT NOMBRE, SUELDO, 12 *

SUELDO + 35000 FROM EMPLEADOS; SELECT NOMBRE, SUELDO, 12 *

(SUELDO + 35000) FROM EMPLEADOS; Valor NULL Null es un valor inaccesible, no es un cero

ni un espacio en blanco.

Ejemplo de SELECT en ORACLE SELECT NOMBRE, COMISION FROM

EMPLEADOS;  Las expresiones aritméticas que contengan

un Null se evalúan a Null.  SELECT NOMBRE,

12*SUELDO+COMISION FROM EMPLEADOS;

Sentencia INSERT en ORACLE

Para añadir nuevos registros a una tabla empleamos la sentencia INSERT

 INSERT INTO tabla [(columna [, columna ...])]

VALUES (valor [, valor ...]);

Ejemplo INSERT en ORACLE

Insertar el departamento de Desarrollo de Sevilla

 INSERT INTO DEPARTAMENTOS (ID, NOMBRE, LOCALIDAD)

VALUES (5, ‘DESARROLLO’, ‘SEVILLA’);

Ejemplo INSERT en ORACLE

Insertar al empleado ‘Luis Barrios Gómez’ del departamento de Desarrollo a partir de hoy, con un sueldo de 2650 € y sin comisión.

INSERT INTO EMPLEADOS (ID, NOMBRE, APELLIDOS, FECHA_ALTA

SUELDO, COMISION, DEPARTAMENTO_ID) VALUES (8, ‘Luis’, ‘Barrios Gómez’, SYSDATE

2650, NULL, 5); o bien: (sin indicar la comisión)

Sentencia UPDATE en ORACLE

Para modificar valores de uno o más registros de una tabla empleamos la sentencia UPDATE.

UPDATE tabla SET columna = valor [, columna = valor] [WHERE condición(es)];

Ejemplo de UPDATE en ORACLE Actualizar todos los nombres y apellidos de

empleados dejando la primera letra en mayúsculas y el resto en minúsculas.

UPDATE EMPLEADOS SET NOMBRE =

INITCAP(LOWER(NOMBRE)), APELLIDOS =

INITCAP(LOWER(APELLIDOS));

Sentencia DELETE en ORACLE

Para borrar registros de una tabla empleamos la sentencia DELETE

DELETE [FROM] tabla [WHERE condición(es)];

Ejemplo de DELETE en ORACLE Borra a los empleados del departamento de

Desarrollo DELETE EMPLEADOS WHERE DEPARTAMENTO_ID IN

(SELECT ID FROM DEPARTAMENTOS WHERE NOMBRE = ‘DESARROLLO’);

Ejercicios en ORACLE en ORACLE Borrar el usuario CURSO_GATE si existe

eliminando todos sus objetos.  DROP USER CURSO_GATE CASCADE;

Ejercicios en ORACLE

Crear el usuario CURSO_GATE, garantizarle los roles CONNECT y RESOURCE, y conectarse como este usuario.

CREATE USER CURSO_GATE IDENTIFIED BY CURSO_GATE;

GRANT CONNECT, RESOURCE TO CURSO_GATE;

CONNECT CURSO_GATE/CURSO_GATE

Ejercicios en ORACLE Crear la tabla de Departamentos (DEPARTAMENTOS) con la siguiente estructura:  ID NUMBER(10) NOMBRE VARCHAR2(50) LOCALIDAD VARCHAR2(50) ID es la clave primaria, no nula y con índice DROP TABLE DEPARTAMENTOS CASCADE CONSTRAINTS; CREATE TABLE DEPARTAMENTOS ( ID NUMBER(10) NOT NULL, NOMBRE VARCHAR2(50), LOCALIDAD VARCHAR2(50), CONSTRAINT DEPARTAMENTOS_PK PRIMARY KEY (ID) USING INDEX); La borramos primero, por si ya existiera.

Ejercicios en ORACLE

Mostrar el nombre, apellidos, sueldo y comisión; de los empleados que tienen jefe, y su comisión es superior a 2500 dolares.

 SELECT NOMBRE, APELLIDOS, SUELDO, COMISION

FROM EMPLEADOS WHERE (JEFE_ID IS NOT NULL) AND (COMISION IS NOT NULL) AND (COMISION > 2500);

Ejercicios en ORACLE

Mostrar el nombre, sueldo y sueldo anual de los empleados cuyo sueldo anual

supere los 36000 dolares.  SELECT NOMBRE, SUELDO,

12*SUELDO “SUELDO ANUAL” FROM EMPLEADOS WHERE (12*SUELDO) > 36000;

Ejercicios en ORACLE

Mostrar el sueldo de los empleados incrementado en un 10%, ordenados por nombre y apellidos.

 SELECT NOMBRE, SUELDO, 1.1*SUELDO “SUELDO + 10%”

FROM EMPLEADOS ORDER BY NOMBRE, APELLIDOS;

Rollback y Commit

Una transacción es un conjunto de operaciones que van a ser tratadas como una única unidad. Estas transacciones deben cumplir 4 propiedades fundamentales comúnmente conocidas como ACID (atomicidad, coherencia, asilamiento y durabilidad).

La transacción más simple en SQL Server es una única sentencia SQL. Por ejemplo una sentencia como esta:

Rollback y Commit

UPDATE Products SET UnitPrice=20 WHERE ProductName =’Chai’

Es una transacción. Esta es una transacción ‘autocommit’, una

transacción autocompletada.

Rollback y Commit

Cuando enviamos esta sentencia al SQL Server se escribe en el fichero de transacciones lo que va a ocurrir y a continuación realiza los cambios necesarios en la base de datos. Si hay algún tipo de problema al hacer esta operación el SQL Server puede leer en el fichero de transacciones lo que se estaba haciendo y si es necesario puede devolver la base de datos al estado en el que se encontraba antes de recibir la sentencia.

Rollback y Commit

Por supuesto este tipo de transacciones no requieren de nuestra intervención puesto que el sistema se encarga de todo. Sin embargo si hay que realizar varias operaciones y queremos que sean tratadas como una unidad tenemos que crear esas transacciones de manera explícita.

Rollback y Commit

Como decíamos una transacción es un conjunto de operaciones tratadas como una sola. Este conjunto de operaciones debe marcarse como transacción para que todas las operaciones que la conforman tengan éxito o todas fracasen.

La sentencia que se utiliza para indicar el comienzo de una transacción es ‘BEGIN TRAN’.

Rollback y Commit

Si alguna de las operaciones de una transacción falla hay que deshacer la transacción en su totalidad para volver al estado inicial en el que estaba la base de datos antes de empezar. Esto se consigue con la sentencia ‘ROLLBACK TRAN’.

Si todas las operaciones de una transacción se completan con éxito hay que marcar el fin de una transacción para que la base de datos vuelva a estar en un estado consistente con la sentencia ‘COMMIT TRAN’.

Ejemplo usando Rollback y Commit Trabajaremos con la base de datos Northwind

en nuestros ejemplos. Vamos a realizar una transacción que

modifica el precio de dos productos de la base de datos.

USE NorthWind DECLARE @Error int --Declaramos una variable que utilizaremos

para almacenar un posible código de error

Ejemplo usando Rollback y Commit BEGIN TRAN --Iniciamos la transacción UPDATE Products SET UnitPrice=20 WHERE

ProductName =’Chai’ --Ejecutamos la primera sentencia SET @Error=@@ERROR Si ocurre un error almacenamos su código en

@Error y saltamos al trozo de código que deshara la transacción. Si, eso de ahí es un GOTO, pero no pasa nada por usarlo cuando es necesario

Ejemplo usando Rollback y Commit IF (@Error<>0) GOTO TratarError --Si la primera sentencia se ejecuta con

éxito, pasamos a la segunda UPDATE Products SET UnitPrice=20

WHERE ProductName=’Chang’ SET @Error=@@ERROR --Y si hay un error hacemos como antes

Ejemplo usando Rollback y Commit IF (@Error<>0) GOTO TratarError --Si llegamos hasta aquí es que los dos

UPDATE se han completado con éxito y podemos "guardar" la transacción en la base de datos

COMMIT TRAN TratarError: --Si ha ocurrido algún error llegamos hasta

aquí

Ejemplo usando Rollback y Commit If @@Error<>0 THEN BEGIN PRINT ‘Ha ecorrido un error. Abortamos la

transacción’ --Se lo comunicamos al usuario y deshacemos

la transacción y todo volverá a estar como si nada hubiera ocurrido

ROLLBACK TRAN END

GRACIAS