Upload
humberto-ochoa-mendez
View
27
Download
3
Embed Size (px)
DESCRIPTION
base de datos
Citation preview
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