Universidad Nacional Autónoma de México Dirección General de Servicios de Cómputo Académico
DIPLOMADO DE A DMINISTRACIÓN DE B ASES DE D ATOS A TOS
Dirección General General de Servici Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos Datos
Lenguaje Lenguaje Estructurado Estructu rado de Consul ta SQL
Descripción: En este módulo se proporcionarán los elementos necesarios para el desarrollo de consultas a la base de datos utilizando el lenguaje nativo SQL. SQL. Objetivo: El participante utilizará el lenguaje SQL para extraer la información necesaria en el desarrollo de las aplicaciones en su entorno de trabajo a través de la elaboración de las consultas que se puedan requerir y de la
Dirección General General de Servici Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos Datos
Lenguaje Lenguaje Estructurado Estructu rado de Consul ta SQL
Descripción: En este módulo se proporcionarán los elementos necesarios para el desarrollo de consultas a la base de datos utilizando el lenguaje nativo SQL. SQL. Objetivo: El participante utilizará el lenguaje SQL para extraer la información necesaria en el desarrollo de las aplicaciones en su entorno de trabajo a través de la elaboración de las consultas que se puedan requerir y de la
Dirección General General de Servici Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos Datos
Índice.
INTRODUCCIÓN.
6
I.
7
DEFINICIÓN DE DATOS. I.1 TIPOS DE DATOS DEL SISTEMA
7
I.2 EL VALOR NULO
8
I.3 T ABL AS
9
I.3.1 CONVENCIÓN DE NOMBRES
9
I.3.2. CREACIÓN DE TABLAS
10
I.3.3. ELIMINACIÓN DE TABLAS I.3.4. MODIFICACIÓN DE TABLAS
10 11
I.4 REGLAS
12
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
II.2.4. CLÁUSULA GROUP BY
27
II.2.5. CLÁUSULA HAVING
28
II.2.6. CLÁUSULA ORDER BY
30
II.3. INSERCIÓN DE DATOS.
31
II.3.1. CLÁUSULA INSERT.
31
II.3.2. CLÁUSULA INTO. II.3.3. CLÁUSULA VALUES.
31 32
II.4. ELIMINACIÓN DE REGISTROS .
33
II.4.1. CLÁUSULA DELETE.
33
II.4.2. CLÁUSULA FROM
33
II.4.3. CLÁUSULA WHERE
33
II.5. A CTUALIZACIÓN DE DATOS .
34
II.5.1. CLÁUSULA UPDATE.
34
II.5.2. CLÁUSULA SET.
34
II.5.3. CLÁUSULA WHERE.
35
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
VI.
VII.
V.1. IF-THEN-END IF
46
V.2. IF-THEN-ELSE-END IF
46
V.3. FOR LOOP
46
V.4. WHILE LOOP
47
V.5. ETIQUETAS
48
PROCEDIMIENTOS AL MACENADOS.
48
VI.1. DECLARACIÓN DE VARIABLES .
49
VI.2. CREACIÓN DE PROCEDIMIENTOS.
52
VI.3. EJECUCIÓN DE PROCEDIMIENTOS.
53
VI.4. ELIMINACIÓN DE PROCEDIMIENTOS .
54
VI.5. P ASO DE PARÁMETROS .
54
TRIGGERS.
55
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
INTRODUCCIÓN. SQL (Structured Query Language; Lenguaje Estructurado de Consulta) es un lenguaje de consulta para bases de datos, siendo adoptado como estándar de la industria en 1986. Desde entonces se han realizado revisiones al estándar para incorporar nueva funcionalidad conforme la industria de las bases de datos lo va requiriendo. Una de las revisiones más importantes fue la de 1992, conocida como ANSI SQL92. La ventaja de la adopción del ANSI SQL, es que los diversos RDBMS (Relational DataBase Management System; Sistema Manejador de Bases de Datos Relacional) tienen que acoplarse al estándar, permitiendo así una mayor compatibilidad entre ellos. Esto implica que conociendo una variante del SQL, se tienen los conocimientos necesarios para poder utilizar otros RDBMS: MS SQL Server, Oracle, Sybase, Interbase, MySQL, PostgreSQL, DB2, etc. Aunque los distintos fabricantes tratan de acoplarse al estándar ANSI SQL, es cierto que cada uno implementa funcionalidades extra que le dan un valor agregado a su producto pero sacrificando un
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
I.
Definición de datos.
Antes de comenzar a trabajar con SQL, es necesario conocer los elementos que intervienen en la definición de la información en una base de datos, para poder manipularla de manera adecuada. La tabla es el elemento fundamental de una base de datos relacional, la cual consiste de una serie de renglones (registros) que representan la información. Cada renglón está dividido en columnas (campos) los cuales deben de tener un tipo de dato establecido.
I.1 Tipos de datos d el sistema Cada columna dentro de una tabla debe tener asociado un tipo de dato, siendo la labor del diseñador de la base de datos, el de encontrar el mejor tipo de dato que satisfaga las necesidades de almacenamiento y recuperación de cierta información. Los tipos de datos que se manejan en una base, pueden variar ligeramente entre diferentes RDBMS, sin embargo el estándar ANSI, asegura que cierto tipo de datos estará presente en
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos time timestamp char, character(n) interval blob clob
time timestamp char(n)
time timestamp char(n)
date char(n)
datetime char(n)
datetime char(n)
blob clob
image text
image text
interval blob text
text
Hora del día Fecha y hora del día Cadena de caracteres de longitud fija Tiempo de intervalo Binary large object Character large object
I.2 El valor Nulo Es importante conocer el concepto de valor nulo, en el contexto de una base de datos, debido a que frecuentemente un valor nulo es confundido con un valor numérico de 0 o una cadena vacía. Un valor nulo se representa en SQL con la cláusula NULL y representa la ausencia de información. Por ejemplo si en un listado de empleados algunos aparecen en el dato de comisión como NULL, esto indica que no se tiene dicha información aunque erróneamente se podría interpretar que estos empleados tienen comisión del 0%. Ahora, suponiendo que los datos que aparecen como NULL corresponden a la edad, indican que el dato no fue proporcionado y por lo tanto se carece de dicha información y claramente se observa que no es lo mismo que una edad de 0.
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
I.3 Tablas Las tablas son el elemento fundamental que compone a una base de datos relacional porque todo gira en torno a ellas. Las tablas son estructuras de almacenamiento que albergan la información en forma de registros (renglones) que deben de ser identificados de manera única y esto se logra a través de una llave primaria. La tabla es la representación física en la base de datos de una Entidad (Recordar el diagrama Entidad-Relación visto en el módulo de Modelo Relacional) mientras que las relaciones son representadas mediante restricciones. Tabla
At ri bu to 1 co n t ip o At ri bu to 2 co n t ip o de dato especificado de dato especificado Valor del atributo1
Valor del atributo2
At ri bu to N co n t ip o ... de dato especificado Valor del atributoN
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
-
No pueden usarse palabras reservadas del servidor SQL. No pueden tener el mismo nombre que otro objeto que pertenezca al usuario que las creo. Es aconsejable usar nombres descriptivos.
I.3.2. Creación de tablas La sintaxis básica para la creación de una tabla es la siguiente: CREATE TABLE
( [NULL | NOT NULL] [DEFAULT < val_predeterminado>], [NULL | NOT NULL] [DEFAULT < val_predeterminado>], [NULL | NOT NULL] [DEFAULT < val_predeterminado>], … [NULL | NOT NULL] [DEFAULT < val_predeterminado>] )
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
Ej: Drop table empleados
I.3.4. Modificación de tablas Dependiendo del RDBMS esta modificación de estructura de la tabla ofrece mayor o menor flexibilidad. Por ejemplo, MySQL es de las más flexibles, porque permite cambiar incluso el tipo de dato de una columna mientras que en Sybase o MS SQL Server es necesario eliminar y volver a crear la tabla con la estructura deseada. Características soportadas: Agregar campo Eliminar campo Renombrar campo Cambiar el tipo de dato del
MySQL
PostgreSQL
Oracle
Sybase
Si Si Si
Si No Si
Si Si No
Si No No
MS SQL Server Si No No
Si
No
Si
No
No
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
I.4 Reglas Las reglas dentro de la base de datos, permiten definir condiciones que debe cumplir la información para que sea válida. Por ejemplo se puede definir una regla que especifique que la percepción de un empleado no sobrepase los $10,000 pesos. En la práctica, muchas de estas reglas no se definen en la base de datos sino mediante la lógica de una aplicación desarrollada en algún lenguaje, que tiene acceso a la información, ya que el exceso de reglas puede disminuir el rendimiento del RDBMS en los procesos de inserción y modificación de información. En Sybase y MS SQL Server las reglas se pueden crear como objetos independientes que se vinculan a distintas tablas. En cambio en Oracle y PostgreSQL no son objetos independientes y sólo pueden ser definidas como restricciones que afecta a una sola tabla.
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos CHECK
I.5 Defaults Los defaults establecen que valor será registrado de manera predeterminada para una columna, en caso de que no se especifique al momento de introducir los datos. En algunos RDBMS los defaults son objetos que se pueden emplear en diferentes tablas, mientras que en los demás, están ligados a la definición de la tabla. Al igual que con las reglas, la funcionalidad de los defaults pueden implementarse utilizando la lógica de la aplicación. Nuevamente en Sybase y MS SQL Server es posible definir un DEFAULT como un objeto independiente que se puede vincular a varias campos de una o más tablas, mientras que en Oracle, MySQL y PostgreSQL los defaults están ligados a un solo campo. MySQL
PostgreSQL
Oracle
Sybase
MS SQL
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
En Todos los RDBMS, los valores predeterminados se pueden especificar al momento de generar una tabla, o en algunos casos es posible modificar la tabla para agregar estos valores predeterminados: Ej. Create table cliente ( id_cliente numeric(10) not null primary key, fecha_afiliacion date default sysdate )
Nota: Este ejemplo es específico para Oracle. Para que funcione en Postgresql y MySQL es necesario cambiar sysdate (que representa la fecha y hora actual) por current_date
I.6 Llaves e Índi ces
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos CREATE TABLE pais ( id_pais numeric(3) NOT NULL PRIMARY KEY , nombre varchar(100) )
En el ejemplo anterior, la tabla solamente consta de un campo que forma la llave primaria “id_pais”, por ello es posible utilizar la cláusula PRIMARY KEY. Pero cuando la llave primaria consta de dos o más campos la sintaxis anterior no es útil, por lo cual se emplea la siguiente sintaxis: CREATE TABLE pedido ( id_cliente numeric(10) NOT NULL, id_producto numeric(10) NOT NULL, fecha date, PRIMARY KEY (id_client e, id_prod ucto ) )
En el ejemplo anterior, se puede observar que se ocupa la cláusula PRIMARY KEY, como si fuera
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
implementar con lógica de aplicación en caso de que exista y porque la falta de implementación de estas restricciones, permite que MySQL trabaje más rápido que cualquier otro RDBMS. Dependiendo del tipo de información y de aplicación a desarrollar se puede sacrificar la característica a cambio de rapidez en respuesta. Las llaves foráneas se pueden crear dentro de la definición de la tabla, o una vez que esta ya existe, se puede utilizar la cláusula ALTER TABLE para agregar esta restricción. A diferencia de las llaves primarias, las llaves foráneas no generan un índice, por lo que de ser necesario se deberá crear con la cláusula CREATE INDEX.
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
Ej. En el momento de crear la tabla: CREATE TABLE Marcador ( id_pais1 NUMBER(3) NOT NULL, id_pais2 NUMBER(3) NOT NULL, resultado VARCHAR2(15) NOT NULL, FOREIGN KEY (id_pais2) REFERENCES Pais, FOREIGN KEY (id _pais1) REFERENCES Pais );
A través de un ALTER TABLE: ALTER TABLE Marcador ADD ( FOREIGN KEY (id_pais1) REFERENCES Pais ) ;
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
considerable. Por lo general se suele crear un índice únicamente cuando una columna es empleada frecuentemente en una cláusula WHERE y la tabla tiene un tamaño considerable.
I.6.4 Eliminación de índices Para eliminar un índice se utiliza la siguiente instrucción: DROP INDEX
Ej. DROP INDEX idx_empleado
II.
Manipulación de datos.
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
II.1 Selecció n, proyección y join. SQL se basa en el álgebra relacional, por ello es importante conocer las operaciones del álgebra relacional y su relación con SQL.
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos 10 11 12 13 14 15 16 17
Susana García Fernanda Ramírez Roxana Guerrero Manuel Alavez Angeles Nolasco Teresa Barba Alberto González Ricardo Contreras
31 18 25 35 29 37 56 58
M M M H M M H H
18000 18000 26500 12600 6000 12000 35000 50500
NULL NULL NULL NULL NULL NULL NULL NULL
07/01/2002 15/05/2002 15/07/2002 23/09/2002 23/09/2002 23/09/2002 27/10/2002 27/10/2002
3 3 3 2 5 5
1 1 2 2 1 2 5 6
Teniendo el conjunto de registros anteriores, un ejemplo de selección sería mostrar únicamente aquellos que sean del sexo femenino: Id_ empleado
nombr e_ empleado
edad_ empleado
sexo_ empleado
sueldo_ empleado
porcentaje_ comision
fecha_ contratacion
Id_ departamento
Id_ cargo
3 4 10 11 12 14 15
Alma Benitez Carolina Fernández Susana García Fernanda Ramírez Roxana Guerrero Angeles Nolasco Teresa Barba
19 32 31 18 25 29 37
M M M M M M M
10000 15000 18000 18000 26500 6000 12000
NULL NULL NULL NULL NULL NULL NULL
01/01/2001 01/03/2001 07/01/2002 15/05/2002 15/07/2002 23/09/2002 23/09/2002
4 4 3 3 3 5 5
1 2 1 1 2 1 2
II.1.2. Proyección.
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
II.1.3. Unión. La operación unión realiza la misma acción que en el álgebra de conjuntos, es decir {1,4,5,10} U {1,4,3,9} = {1,3,4,5,9,10}. Esta operación se realiza con la cláusula UNION del SQL.
II.1.4. Producto Cartesiano El producto cartesiano es el producto cruz entre 2 tablas: {a,b} X {1,2} = {a1, a2, b1, b2} El resultado es la combinación de cada renglón de una tabla con cada renglón de la otra tabla.
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
SELECT {* | [DISTINCT] < campo>, ... } FROM , [ ] [WHERE ] [GROUP BY < campo>, ,... ] [HAVING ] [ORDER BY , ,.... ]
Lo que se puede apreciar en la estructura de la instrucción SELECT, es que nunca debe faltar ni la palabra SELECT, ni FROM. Todos los demás elementos son opcionales.
II.2.1. Cláusula SELECT
Dirección General General de Servici Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos Datos
Ejemplos: Nota: los sig uientes ejemplos son sentencias completas de SQL, donde el texto resaltado corresponde a la ejemplifi ejemplifi cación del con cepto en cuestión.
a) Seleccionar el nombre del empleado empleado de la tabla empleado y el nombre de de departamento de la tabla departamento. SELECT SELECT empleado.nom empleado.nom bre_empleado, departamento.nombr e_departamento e_departamento
FROM empleado, departamento WHERE departamento.id_departamento = empleado.id_departamento empleado.id_departamento
b) Seleccionar todos los campos campos de la tabla empleado. SELECT *
FROM empleado
c) Seleccionar todos los campos de la tabla empleado y el nombre del departamento departamento de la
Dirección General General de Servici Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos Datos Where departamento.id_departamento = empleado.id_departamento
b) Seleccionar todos los campos campos de la tabla empleado. SELECT * FROM empleado
c) Seleccionar todos los campos de la tabla empleado y el nombre del departamento departamento de la tabla departamento. SELECT empleado.*, departamento.nombre_departamento departamento.nombre_departamento FROM FROM empleado, d epartamento Where departamento.id_departamento = empleado.id_departamento
Uso de alias para tablas.
Cuando una consulta involucra más de una tabla, es necesario especificar de cual tabla es el
Dirección General General de Servici Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos Datos
Para escribir condiciones de manera adecuada a decuada es muy importante recordar que: - Para expresar expresar un valor d e tipo alfanumérico o fecha, es es requisit o entrecomillarlo c on comillas simples. especifiq ue entre comil las simples, será interpretado interpretado como tipo d e - Todo valor que no s e especifiq dato numérico.
El valor NULL es un valor especial por lo cual se debe tener sumo cuidado cuando se desee utilizar condiciones con NULL. La única forma de comparar contra un valor NULL es utilizar el operador IS o IS NOT. SELECT * FROM empleado WHERE comision = NULL; --incorrecto SELECT * FROM empleado WHERE comision is NULL; --correcto Las expresiones más frecuentes son las que involucran una comparación entre dos elementos. e lementos. Igualdad Desigualdad
= !=
empleado.id_departamento = departamento.id_departamento nombre_cargo != ‘Director’
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
La comparación de similitud que se hace mediante el uso de la cláusula LIKE, requiere de incluir comodines, que sustituyan uno o varios caracteres.
% _
representa 0 o más caracteres. representa 1 carácter
Ejemplos. Finalmente complementando los 3 ejemplos anteriores quedarían de la siguiente manera: a) Seleccionar el nombre del empleado de la tabla empleado y el nombre de departamento de la tabla departamento. SELECT empleado.nombre_empleado, departamento.nombre_departamento FROM empleado, departamento
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
realizan ciertas operaciones sobre el valor de los campos indicados. Estas funciones son conocidas como funciones de agregación: Función Count(*) Count() Sum() Avg() Min() Max()
Acción Regresa el número de registros encontrados Regresa el número de registros cuyo valor del campo especificado no es nulo Suma los valores de la columna especificada Promedia los valores del campo especificado Regresa el valor mínimo del campo especificado Regresa el valor máximo del campo especificado
Ejemplos: a) Mostrar la clave de departamento y el dinero total empleado para pagar a los empleados de dicho departamento. SELECT id_departamento, SUM(sueldo)
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
Esta cláusula es el equivalente a la cláusula WHERE, es decir, especifica un criterio o condición, pero la diferencia radica en que se ocupa únicamente cuando se desea especificar una función de agregación en la condición.
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
Ejemplos: Mostrar la clave de departamento y sueldo promedio de sus empleados, de aquellos departamentos cuyo salario promedio sea mayor que 12000 SELECT id_departamento, AVG(sueldo_empleado) FROM empleado GROUP BY id_departamento HAVING AVG(sueldo_empleado)>12000
Es incorrecto usar la cláusula WHERE junto con una función de agregación, la consulta anterior es incorrecta si se escrib e: SELECT id_departamento, AVG(sueldo_empleado) FROM empleado WHERE AVG(sueldo_empl eado)>12000 --Incor rect o GROUP BY id_departamento
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos ORDER BY 3
II.3. Inserción d e datos. A través de la instrucción INSERT de SQL, se introduce la información a una tabla. La estructura general de este comando es la siguiente: INSERT INTO [(, , ...)] {VALUES (, , ... ) | }
II.3.1. Cláusula INSERT. Esta cláusula permite indicar que la operación a realizar es la inserción de un registro.
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
II.3.3. Cláusula VALUES. Esta cláusula permite especificar los valores a insertar para cada uno de los campos involucrados en la sentencia. Para especificar los valores a insertar de manera adecuada es muy importante recordar que: -
Para expresar un valor d e tipo alfanumérico o fecha, es requisit o entrecomillarlo c on comillas simples.
-
Todo valor que no s e especifiqu e entre comill as simples, será interpretado como tipo de dato numérico.
Ejemplo: Insertar el registro de un nuevo empleado con clave 18, llamada Lorena Aguilar, de 19 años de
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
II.4. Eliminación de registros. La instrucción delete elimina registros de la tabla indicada con la posibilidad de indicar un criterio, en caso de omitirlo, se eliminan todos los registros de la tabla. La sintaxis es la siguiente: DELETE FROM [ WHERE ]
II.4.1. Cláusula DELETE. La cláusula DELETE permite indicar que la operación a realizar es una eliminación de registros
II.4.2. Cláusula FROM
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
II.5. Actu alización d e datos. Para modificar o actualizar los valores de los registros de una tabla se utiliza el comando UPDATE. Si no se especifica una condición con la cláusula WHERE, todos los registros que existan en la tabla serán actualizados. La sintaxis es la siguiente: UPDATE SET = , = , .... [ FROM , .... ] [ WHERE ]
II.5.1. Cláusula UPDATE. La cláusula UPDATE es la que indica que la operación a ejecutar es una actualización. Después de
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
UPDATE empleado SET salario_empleado = 27000, edad = 27 WHERE id_empleado = 12
II.5.3. Cláusula WHERE. Esta cláusula permite especificar un criterio para delimitar el conjunto de registros a modificar. Para mayor detalle de las condiciones consulte la sección II.2.3. Ejemplos: Actualizar el salario a 27,000 pesos y edad a 27 años de la empleada con clave 12 “Roxana Guerrero” UPDATE empleado
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
II.6.1. Creación de vistas . La sintaxis para crear una vista es: CREATE VIEW < nombre_vista> AS
Por ejemplo : CREATE VIEW empleados_h AS SELECT * FROM empleados WHERE tipo_emp = “H”
II.6.2. Eliminación de Vistas Para eliminar una vista se utiliza la siguiente instrucción.
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
-
Utilizar la cláusula ORDER BY
Sin embargo, la cláusula ORDER BY se pueden aplicar a la vista una vez creada, siendo consultada como cualquier tabla.
II.7. Definición d e privil egios. Unos de los componentes de un RDBMS es el DCL (Data Control Language) que permite controlar y establecer restricciones de acceso a la información contenida en la base de datos. Es tarea del administrador de la base de datos el encargado de asignar o revocar permisos y/o crear usuarios en la base de datos. El manejo de usuario varía considerablemente de un RDBMS a otro, siendo que en algunos es más completo, el esquema del manejo de usuario y permisos, que en otros. En Sybase: Antes de que un usuario pueda acceder a alguna base de datos, éste debe primero darse de alta
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
Se pueden controlar los privilegios a los usuarios de creación de objetos en la base de datos, así como la manipulación de la información contenida en ella, mediante la siguiente sintaxis: GRANT TO
REVOKE FROM
Donde GRANT se utiliza para otorgar privilegios y REVOKE para eliminarlos. Por ejemplo: Grant all to admon revoke create table from capturista
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
En Oracle: La sintaxis básica para crear un nuevo usuario es la siguiente: CREATE USER IDENTIFIED BY < contraseña>;
Una vez creado el usuario es necesario establecer los permisos correspondientes con la cláusula GRANT, para que se pueda utilizar dicha cuenta.
III.
Funciones de utilidad.
Aunque el estándar SQL92 define las funciones con las que debe contar un RDBMS, desafortunadamente en la práctica, no todos los RDBMS cumplen con el estándar.
III.1. Funcio nes para datos de tipo carácter. El SQL92 define funciones de texto con sintaxis específica. A continuación se muestran aquellas
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
Función SQL92
MySQL
PostgreSQL
Oracle
Sybase
char_length
Si
Si
No
No
Ms SQL Server No
Si Si Si Si Si Si No Si
Si Si Si Si Si Si Si Si
Si No No No estándar Si Si Si Si
Si No No No estándar No Si No No
Si No No No estándar No Si No No
character_length lower octet_length position substring trim upper || case
A continuación se muestran las funciones de Sybase/Ms SQL Server que remplazan a las ausentes del estándar SQL92: FUNCION substring
SINTAXIS
substring (,#empiezo, #longitud)
Extrae una cadena de la cadena a partir de #empiezo hacia la izq. de #longitud
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
A continuación se muestran las funciones de Oracle que remplazan a las ausentes del estándar SQL92: Función
Sintaxis
Instr
Instr(,) Busca la cadena2 dentro de la cadena1,
Substr
Substr(,#empiezo, #longitud)
Length
Length() Obtiene la longitud de la cadena de texto especificada.
regresando la posición donde se encontró.
Extrae una cadena de la cadena a partir de #empiezo hacia la izq. de #longitud (Si este último se omite, se regresa hasta el final de la cadena)
III.2. Funciones matemáticas. A continuación se muestra un listado de las funciones que forman parte del estándar SQL92 y en su caso, la función equivalente. SQL92 abs
MySQL Si
PostgreSQL Si
Oracle Si
Sybase Si
Ms SQL Server Si
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
III.3. Funciones para datos tipo fecha. Las funciones estándar para manejo de fecha son las siguientes: Función
Descripción
Current_date / Current_date()
Regresa la fecha actual en formato 'YYYY-MM-DD' o YYYYMMDD
Current_time / Current_time()
Regresa la hora actual en formato 'HH:MM:SS' o HHMMSS Regresa la fecha y hora actual con formato 'YYYYMM-DD HH:MM:SS' o YYYYMMDDHHMMSS
Current_timestamp / Current_timestamp()
Desafortunadamente ni Oracle, ni Sybase, ni MS SQL Server implementan las funciones definidas por el estándar, manejando sus propias funciones, y los campos tipo fecha incluyen también la hora como si fueran un campo de tipo timestamp. Función SQL92
MySQL
PostgreSQL Oracle
Sybase
Ms SQL
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
Una transacción es atómica, porque todas las instrucciones de SQL deben completarse con éxito, o ninguna de ellas. Una vez que el RDBMS determina que la transacción fue exitosa es necesario que la información sea almacenada de manera permanente. Una base de datos transaccional garantiza que todas las operaciones realizadas en una transacción sean guardadas en almacenamiento permanente antes de que ésta sea reportada como completada, previniendo así, perdida de información por fallas del equipo, por ejemplo en un corte del suministro de energía. Cuando múltiples usuarios realizan transacciones de manera concurrente, cada uno de ellos no debe ver los cambios incompletos realizados por los demás. En el momento que transacción finaliza adecuadamente y es almacenada permanentemente, los cambios se vuelven visibles para todos los demás usuarios.
IV.1. Commit y Roll back. El comando commit permite indicar que los cambios a realizar dentro de una transacción sean llevados a cabo de manera permanente, y el comando rollback permite deshacer los cambios. El
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
En el ejemplo anterior, se muestra las operaciones necesarias para realizar una transacción monetaria de $1,000 pesos de la cuenta de Fernanda a la cuenta de Alfredo. Si por alguna razón alguna de las dos instrucciones fallara todo el proceso sería cancelado. La cláusula COMMIT, realiza los cambios de manera permanente. Si se diera el caso que Fernanda deseara cancelar su operación, en lugar de emplear la cláusula COMMIT se debería emplear la cláusula ROLLBACK.
IV.2. Commi t y Roll back por f ases. Es posible especificar un punto en la transacción al cual se puede posteriormente realizar un rollback sin que esto afecte a toda la operación sino únicamente hasta el punto de referencia indicado (SAVEPOINT). Este tipo de transacciones con rollback por fases, no está disponible en todos los RDBMS. Un ejemplo en Oracle es:
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
ROLLBACK TO SAVEPOINT javier_salario UPDATE empleado SET sueldo_empleado = 7000 WHERE nombre_empleado = 'Gilberto Aparicio'; COMMIT;
En Sybase varían las cláusulas para establecer el punto de referencia. En el siguiente ejemplo se resaltan las diferencias: UPDATE empleado SET sueldo_empleado = 8000 WHERE nombre_empleado = 'Javier González'; SAVE TRANSACTION javier_salario;
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
aspecto de programación en la base de datos, sin embargo las instrucciones aunque similares, difieren entre uno y otro.
V.1. IF-THEN-END IF La sintaxis en Sybase, MS SQL Server, Oracle es: IF ELSE END IF
Si la expresión evaluada es verdadera se ejecuta el bloque A de instrucciones y de lo contrario se ejecuta el bloque B.
V.2. IF-THEN-ELSE-END IF
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
FOR IN .. LOOP END LOOP;
Este ciclo iterativo inicializa la variable especificada y ejecuta las instrucciones cíclicamente hasta que la variable alcanza el valor final.
V.4. WHILE L OOP Esta estructura se utiliza cuando se desea realizar una o un grupo de instrucciones repetidamente. La sintaxis en Sybase y MS SQL Server es: WHILE [BREAK]
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
En Oracle la sintaxis es la siguiente: WHILE LOOP END LOOP;
V.5. ETIQUETAS Aunque las etiquetas no se recomiendan emplearlas en un ambiente de programación estructurado, en ocasiones pueden ser muy útiles para resolver un problema de una manera muy sencilla. Las etiquetas en Sybase se emplean junto con la instrucción GOTO para trasladar el flujo del programa a la línea donde se encuentra la etiqueta señalada por el Goto. La sintaxis es: GOTO ....
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
Soporte para Procedimientos Almacenados
MySQL
PostgreSQL Oracle
Sybase
No
Si
Si
Si
Ms SQL Server Si
El lenguaje que se emplea para programar los procedimientos almacenados, varía de un RDBMS a otro, y existen algunos que permiten programar en más de un lenguaje.
VI.1. Declaración de variables. Las variables son elementos fundamentales en la programación de procedimientos. Las variables deben ser declaradas al inicio del programa, antes de utilizarlas, para ello existe la cláusula DECLARE en Sybase, Ms SQL Server y Oracle. Las variables locales sólo existen durante la ejecución del procedimiento donde son declaradas; cuando éste termina, las variables locales son eliminadas.
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
En este caso el uso de las cláusulas From y Where son opcionales.
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
Por ejemplo: -- asignando constantes a las variables SELECT @descuento = 0.45, @fecha = getdate()
-- asignando valores de una tabla a las variables SELECT @salario = salario, @nombre = nombre_emp FROM empleados WHERE clave_emp = "AA01"
•
Si una instrucción SELECT que recupera datos de una tabla no regresa registros, las variables ahí involucradas conservan su valor.
Sybase y Ms SQL Server utiliza una serie de variables para alojar información a distintos niveles, ya sea a nivel de servidor, a nivel de sesión o a nivel de proceso; a dichas variables se les llama variables globales y el usuario no puede declararlas o asignarles valores. De esto se encarga
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
En el caso de Oracle el manejo de variables es similar, porque también se emplea la cláusula DECLARE para definir las variables. Por ejemplo: DECLARE producto VARCHAR(20); precio NUMBER(6,2);
En algunos casos, es posible que se desee que el tipo de una variable coincida con el tipo usado para una columna de una tabla determinada, en esos casos se puede usar la construcción: DECLARE sueldo empleado.sueldo_empleado%TYPE;
Con lo cual se logra que la variable sueldo tenga el mismo tipo que la columna sueldo_empleado
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos RETURN
Por ejemplo : CREATE PROCEDURE nombres_empleados AS SELECT nombre_empleado FROM empleados ORDER BY nombre_empleado RETURN
En Oracle no difiere mucho la sintaxis: CREATE PROCEDURE [( [IN | OUT] ) ] AS
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
Por ejemplo: EXEC nombre_empleados
En el caso de Oracle se emplea la instrucción CALL para llamar al procedimiento almacenado: CALL nombre_empleados
VI.4. Eliminación de procedimientos. Para eliminar un procedimiento almacenado, se dispone de la instrucción DROP PROCEDURE. La sintaxis es la siguiente: DROP PROCEDURE
VI.5. Paso de parámetros. El uso de parámetros incrementa la flexibilidad de un procedimiento almacenado. Éstos se definen
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
En Oracle el ejemplo anterior quedaría de la siguiente manera: CREATE PROCEDURE sueldo_empleado (sueldo IN number(8,2)) AS BEGIN SELECT nombre_empleado, sueldo_empleado FROM empleado WHERE sueldo_empleado <= sueldo ORDER BY nombre_empleado; END;
Para ejecutar el procedimiento: call sueldo_empleado 10000
VII. Triggers.
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
En Sybase y MS SQL Server un trigger al dispararse crea dos tablas temporales las cuales sólo pueden ser accesadas dentro del trigger, y poseen la misma estructura de la tabla a la que está ligada. Estas tablas son: Inserted y Deleted. Tabla
Contenido
En Triggers
Inserted Contiene los registros que se van a agregar a la tabla, como resultado
Insert, Update
de los comandos Insert y Update Deleted
Contiene los registros que se van a eliminar de la tabla, como resultado Delete, Update de los comandos Delete y Update
En Oracle se utiliza el alias OLD y NEW para hacer referencia a los valores antes de la actualización y el nuevo valor, respectivamente.
VII.2. Creación. Para crear un trigger se utiliza la siguiente sintaxis: Sybase/Ms SQL Server
Oracle
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
- Cláusula BEFORE y AFTER. El trigger es una acción que se ejecuta cuando se da un determinado evento, por ejemplo una inserción. Con las cláusulas BEFORE y AFTER se especifica en que momento debe de activarse la acción, si Antes de la realización del evento o después. A un lado de cualquiera de estas dos cláusulas, se especifica el evento que va disparar la acción, pudiendo ser INSERT, DELETE o UPDATE que corresponde a una inserción, eliminación ó actualización de datos, respectivamente. En el caso de una actualización es posible especificar que únicamente cuando la modificación afecte a cierta columna se dispare la acción. Esto se realiza empleando la cláusula OF COLUMN seguida del nombre de la columna. - Cláusula ON Permite especificar en que tabla se va a asociar el disparador de acción. Después de la cláusula ON se coloca el nombre de la tabla. - Cláusula FOR EACH_ROW Esta cláusula permite especificar que la acción se ejecutara a nivel renglón. Es decir por cada
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos where empleados.clave_emp = inserted.clave_emp) = 0 begin /* No existe el empleado por tanto se cancela la transacción */ rollback transaction return end return
VII.3. Eliminación. La sintaxis para eliminar un trigger es muy simple, únicamente se utiliza la instrucción Drop Trigger. DROP TRIGGER
VIII. Cursores.
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
-
Declaración del cursor.
En la declaración de un cursor se indica: el nombre del cursor y una instrucción select la cual definirá los campos y registros que se consultarán a la base de datos. Para declarar un cursor se sigue la siguiente sintaxis: Sybase/MS SQL Server
Oracle
DECLARE CURSOR FOR [FOR {READ ONLY | UPDATE [OF ] }]
DECLARE CURSOR IS ;
- Apertura del cursor Un cursor internamente es una sentencia SELECT cuyo resultado se guarda en el servidor en tablas temporales y que se va retornando cada una de las filas según se va pidiendo desde el cliente. El primer paso es ejecutar la sentencia SELECT y guardar su resultado dentro de las tablas temporales. Este paso se denomina Abrir el cursor. La apertura del cursor debe realizarse sólo una vez.
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
Podremos recuperar filas mientras la consulta SELECT tenga filas pendientes de recuperar. Para saber cuándo se debe detener el ciclo de instrucciones FETCH, se realiza lo siguiente: Sybase/MS SQL Server
Oracle
Se evalúa la variable @@sqlstatus que contiene los siguientes valores:
Se realiza la evaluación de alguno de los siguientes atributos:
0 Se logró el acceso al registro 1 No se logró el acceso al registro 2 No hay más registros
%FOUND BOOLEAN
Retorna si la última fila recuperada fue válida %ISOPEN BOOLEAN
Retorna si el cursor está abierto %NOTFOUND BOOLEAN
Retorna si la última fila fue inválida %ROWCOUNT NUMBER
Retorna el número de filas recuperadas Así lo acción más típica es recuperar filas mientras queden alguna por recuperar en el servidor. Esto se logra través del siguiente bloque de código:
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
IX.
Joins Internos.
Un join se emplea para definir la relación que existe entre dos tablas. El INNER JOIN es una cláusula que nos permite definir estas relaciones. Este tipo de join puede expresarse de otra manera utilizando restricciones en la sección del WHERE en una consulta. Ej. Consulta empleando INNER JOIN: SELECT e.nombre_empleado, d.nombre_departamento FROM empleado e INNER JOIN departamento d ON e.id_departamento = d.id_departamento
La consulta anterior puede escribirse sin utilizar el INNER JOIN de la siguiente manera: SELECT e.nombre_empleado, d.nombre_departamento FROM empleado e, departamento d WHERE
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
X.
Joins Externos
Si se deseara mostrar un listado de todos empleados con su respectivo departamento se pensaría en utilizar la siguiente consulta: SELECT e.nombre_empleado, d.nombre_departamento FROM empleado e, departamento d WHERE e.id_departamento = d.id_departamento
Esto nos traería el siguiente resultado: nombre_ empleado
Gilberto Aparicio Javier González Alma Benitez Carolina Fernández Alberto Ibáñez Carlos López Arturo Rangel Javier Bárcenas
nombre_ departamento Sistemas Sistemas Sistemas Sistemas Sistemas Sistemas Ventas Ventas
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
En Sybase ó Ms SQL Server: SELECT e.nombre_empleado, d.nombre_departamento FROM empleado e, departamento d WHERE e.id_departamento *= d.id_departamento
En Oracle: SELECT e.nombre_empleado, d.nombre_departamento FROM empleado e, departamento d WHERE e.id_departamento = d.id_departamento(+)
En MySQL ó PostgreSQL: SELECT e.nombre_empleado, d.nombre_departamento FROM empleado e LEFT JOIN departamento d ON e.id_departamento = d.id_departamento
Dirección General de Servici os de Cómputo Académico Diplomado de Admin istración d e Base de Datos
XI.
Operaciones de conjuntos
La operación más usual y disponible en la mayoría de los RDBMS es la unión del resultado de dos consultas. Antes de emplear alguna de las operaciones con conjuntos permitidas, es mejor analizar si no existe una mejor alternativa, por ejemplo el uso de joins en lugar de una operación de conjunto, ya que el proceso de obtención del resultado es más rápido porque puede tomar ventaja de los índices. Oracle adicionalmente brinda las operaciones de intersección (INTERSECT) y la de resta (MINUS). UNION. Permite realizar la unión del resultado de dos consultas. El proceso de UNION elimina los registros duplicados, aunque algunos RDBMS proporcionan una cláusula que permite mostrar todos los registros resultantes de la unión. Ej. Mostar el sueldo máximo y el mínimo que perciben los empleados.
Tablas de ejemplo. departamento Id_departamento 1 2 3 4 5 6
nombre_departamento Ventas Recursos Humanos Diseño Sistemas Administración Redes
cargo Id_cargo 1 2 3 4 5 6
nombre_cargo Empleado Jefe de Departamento Coordinador Ejecutivo de cuenta Subdirector Director
empleado Id_ empleado 1 2 3 4
5 6 7 8 9 10 11 12 13 14 15 16 17
nombre_ empleado Gilberto Aparicio Javier González Alma Benitez Carolina Fernández Alberto Ibáñez Carlos López Arturo Rangel Javier Bárcenas Ernesto Almaraz Susana García Fernanda Ramírez Roxana Guerrero Manuel Alavez Angeles Nolasco Teresa Barba Alberto González Ricardo Contreras
edad_ empleado 25 30 19 32
sexo_ empleado H H M M
sueldo_ empleado 7000 7500 10000 15000
porcentaje _ com isio n NULL NULL NULL NULL
fecha_ contratacion 25/11/2000 25/11/2000 01/01/2001 01/03/2001
Id_ departamento 4 4 4 4
Id_ cargo 1 1 1 2
32 32 45 29 32 31 18
H H H H H M M
25000 27000 18000 18000 20000 18000 18000
NULL NULL 5 10 NULL NULL NULL
04/05/2001 04/05/2001 25/10/2001 25/10/2001 07/01/2002 07/01/2002 15/05/2002
4 4 1 1 1 3 3
2 3 4 4 2 1 1
25 35 29 37 56 58
M H M M H H
26500 12600 6000 12000 35000 50500
NULL NULL NULL NULL NULL NULL
15/07/2002 23/09/2002 23/09/2002 23/09/2002 27/10/2002 27/10/2002
3 2 5 5
2 2 1 2 5 6