Sei sulla pagina 1di 20

FUNDAMENTOS DE BASES DE DATOS

SEMANA 5
SQL: lenguaje para la definición, manipulación y
control de bases de datos relacionales II

Todos los derechos de autor son deexclusiva


la propiedad de IACCo de los otorgantesde sus licencias. No está
permitido copiar, reproducir, reeditar, descargar, publicar, emitir
, difundir,poner a disposición del público ni 1
ESTE
utilizarDOCUMENTO
los contenidos paraCONTI
fine ENE LAde
s comerciales SEMANA 5
ninguna clase.
ESTE DOCUMENTO CONTIENE LA SEMANA 5 2
ÍNDICE

SQL: LENGUAJE PARA LA DEFINICIÓN, MANIPULACIÓN Y CONTROL DE BASE DE DATOS


RELACIONALES II...............................................................................................................................4
OBJETIVOS ESPECÍFICOS....................................................................................................................4
INTRODUCCIÓN.................................................................................................................................4
1. LENGUAJE SQL..............................................................................................................................5
1.1. LENGUAJE DE CONTROL DE DATOS (COMANDOS DCL)..........................................................5
1.1.1. GRANT............................................................................................................................5
1.1.2. REVOKE...........................................................................................................................7
1.1.3. COMMIT.........................................................................................................................8
1.1.4. ROLLBACK.......................................................................................................................9
2. FUNCIONES SQL............................................................................................................................9
2.1. FUNCIONES DE AGREGACIÓN.................................................................................................9
2.2. FUNCIONES DE CONTROL DE FLUJO.....................................................................................14
2.2.1. IF...................................................................................................................................14
2.2.2. CASE..............................................................................................................................16
COMENTARIO FINAL........................................................................................................................18
REFERENCIAS...................................................................................................................................19

ESTE DOCUMENTO CONTIENE LA SEMANA 5 2


SQL: LENGUAJE PARA LA DEFINICIÓN, MANIPULACIÓN Y
CONTROL DE BASE DE DATOS RELACIONALES II

OBJETIVOS ESPECÍFICOS
• Emplear los comandos de control de datos del lenguaje SQL.

• Analizar funciones de SQL para el trabajo con base de datos.

INTRODUCCIÓN
Esta semana se continúa conociendo el lenguaje SQL, aunque en esta oportunidad se conocerá el
lenguaje de control de datos. Este lenguaje es principalmente utilizado por los administradores de
bases de datos, dado que permite controlar el acceso a los datos.

De igual forma, se conocerán parte de las funciones que ofrece SQL para la manipulación de los
registros que se tengan en la base de datos. Primeramente se conocerán funciones de agregación,
y luego funciones de control de flujo. Con las primeras se puede, a partir de los datos que se
tengan, obtener diversos resultados de acuerdo a las necesidades, como por ejemplo sumas,
promedios, mínimos, máximos, entre otros; respecto a las funciones de control de flujo, estas
permiten, a partir de los datos, mostrar de diversas formas los resultados, esto con el fin de
facilitar la toma de decisiones o entregar de una forma más adecuada los mismos.

1. LENGUAJE SQL
El lenguaje SQL comprende no solo la definición y manipulación de datos, sino que además incluye
un lenguaje para el control de los mismos. Justamente este lenguaje será abordado durante el
contenido de esta semana de estudio.

ESTE DOCUMENTO CONTIENE LA SEMANA 5 2


1.1. LENGUAJE DE CONTROL DE DATOS (COMANDOS DCL)
Según Ramos, Ramos y Montero (2006), el lenguaje de control de datos es un lenguaje que
permite al administrador de la base de datos controlar el acceso a los datos que se encuentran en
la misma. Este lenguaje contiene una serie de sentencias que permiten controlar la integridad de
la base de datos y su seguridad, sobre todo en aquellos entornos que sean multiusuarios.

1.1.1. GRANT
Este comando, específicamente se utiliza para otorgar permiso a uno o varios usuarios para
realizar determinadas actividades en la base de datos. La sintaxis de este comando es la siguiente:

GRANT {ALL PRIVILEGES |privilegios}


ON {tabla1 | tabla2}
TO {PUBLIC | lista_usuarios}
[WITH GRANT OPTION];

Los privilegios a los que se refiere la sintaxis anterior son: SELECT, DELETE, INSERT, UPDATE O
REFERENCES (nombre_columna), donde el hecho de colocar ALL PRIVILEGES implica que todos los
anteriores han sido otorgados. Luego del ON, es necesario especificar el nombre de la tabla a la
cual se le está dando determinado privilegio (o todos según sea el caso), y respecto al TO se debe
especificar a los usuarios a los cuales se les está otorgando el privilegio. Y por último, la cláusula
opcional WITH GRANT OPTION permite a los usuarios a los que se les acaba de otorgar privilegios
otorgar los mismos a otros. Es importante acotar que el “|” implica un “o”.

Hasta este momento, no ha sido abordada la creación de usuarios, pero para ver ejemplos del
comando GRANT se asumirá que existen dentro de la base de datos los siguientes usuarios: “U01”,
“U02” y “U03”; y las tablas “estudiantes” y “carreras”. Utilizando estos usuarios y las siguientes
tablas se otorgarán los permisos.

Un ejemplo para otorgar todos los privilegios sobre el usuario U01 en la tabla estudiantes sin que
este pueda otorgar privilegios a otros usuarios, sería:

ESTE DOCUMENTO CONTIENE LA SEMANA 5 2


GRANT ALL PRIVILEGES
ON estudiantes
TO U01;

Si se quisiera que el U01 pudiese otorgar los permisos recibidos a otros usuarios, el código sería:

GRANT ALL PRIVILEGES


ON estudiantes
TO U01
WITH GRANT OPTION;

 Si se quiere verificar que la sintaxis SQL escrita es correcta, se


puede hacer en:

Ahora bien, si se quisiera otorgar permiso de SELECT al usuario U02 sobre la tabla carreras, el
código sería:

GRANT SELECT
ON carreras
TO U02
WITH GRANT OPTION;

ESTE DOCUMENTO CONTIENE LA SEMANA 5 2


Si el usuario U02 Y U03 tuvieran que tener permisos DELETE sobre la tabla carreras, pero sin poder
otorgar esos permisos a otro usuario, el código sería el siguiente:

GRANT DELETE
ON carreras
TO U02, U03;

1.1.2. REVOKE
Ricardo (2009) indica que es un comando en SQL que permite remover o revocar cierto privilegio o
privilegios a ciertos usuarios sobre determinado objeto. La sintaxis es la siguiente:

REVOKE {ALL PRIVILEGES |privilegios}


ON {tabla1 | tabla2}
FROM {PUBLIC | lista_usuarios}
[CASCADE | RESTRICT];

La diferencia de esta sintaxis con la del comando GRANT es que primeramente el comando a
llamar es REVOKE y el opcional puede ser CASCADE o RESTRICT; el primero implica que el privilegio
se le revocará al usuario que se especifica y a todos a los que este le haya concedido tal permiso. Si
se utiliza RESTRICT, el REVOKE fallará cuando existan otros usuarios al que este le otorgó los
privilegios. Si no se especifica alguno de estos dos, el sistema asume CASCADE.

Para ver ejemplos, se revocarán todos los permisos concedidos en el comando anterior:

REVOKE ALL PRIVILEGES


ON estudiantes
FROM U01;

ESTE DOCUMENTO CONTIENE LA SEMANA 5 2


REVOKE SELECT
ON carreras
FROM U02;

REVOKE SELECT
ON carreras
FROM U02;

1.1.3. COMMIT
Ricardo (2009) explica que los cambios que se hacen en base de datos no son definitivos hasta que
el usuario escribe y ejecuta el comando COMMIT, que en español significa compromiso. Este
comando se encarga de hacer permanentes los cambios realizados desde el comienzo de alguna
transacción. Si el usuario está seguro de cada una de las acciones que ha realizado, es
recomendable que ejecute el COMMIT con frecuencia, ya que de esta manera hace permanente
los cambios realizados. La sintaxis sería:

COMMIT;

1.1.4. ROLLBACK
Para este comando, mientras no se haya ejecutado un COMMIT, el ROLLBACK va a permitir
deshacer los cambios realizados. Si por error un usuario ejecutó un DELETE o un UPDATE sin incluir
la cláusula WHERE, tal como se vio la semana pasada, esto afectaría a todos los registros de la
tabla sobre la cual se ejecutó. La solución a este error sería ejecutar un ROLLBACK, ya que de esta
forma el cambio que se realizó por error se deshace. Es importante recordar que esto funcionará
mientras no se haya ejecutado un COMMIT (Ricardo, 2009). La sintaxis sería:

ESTE DOCUMENTO CONTIENE LA SEMANA 5 2


ROLLBACK;

2. FUNCIONES SQL
Para Ramos, Ramos y Montero (2006), las funciones en SQL son aquellas que permiten actuar con
los valores de las columnas, pudiendo ser utilizadas en cláusulas SELECT, WHERE y ORDER BY. En
general, estas consultas producen dos resultados: o modifican la información original, por ejemplo
si se cambiara a minúscula todo el valor que devuelve determinada columna de una base de datos,
o indican información, por ejemplo promedios, mínimos, máximos, entre otros.

2.1. FUNCIONES DE AGREGACIÓN


Una de las funciones que ofrece SQL corresponde a las funciones de agregación, lo que para
Ramos, Ramos y Montero (2006) son conocidas como funciones de grupos de valores. Estas
funciones se encargan de trabajar con varias filas a la vez, permitiendo obtener diversos
resultados. A continuación, se detallan las funciones de agregación en SQL genéricas para todos los
manejadores de bases de datos.
Función Propósito
AVG(n) Esta función se emplea para columnas
numéricas, y se encarga de devolver el
promedio entre los datos almacenados en la
columna especificada entre paréntesis.
COUNT(* |expresión) Es el encargado de devolver el total de filas,
donde si se coloca entre paréntesis un asterisco
(“*”) contará el número de filas, incluyendo
aquellas con valores nulos. En cambio, si se
especifica el nombre de la columna, solo
contará aquellos que no tengan valores nulos.
MAX(expresión) Se encarga de devolver el valor máximo entre
los registros especificados en la columna entre
paréntesis.
MIN(expresión) Se encarga de devolver el valor mínimo entre
los registros especificados en la columna entre
paréntesis.
SUM(expresión) Se encarga de devolver la suma de todos los

ESTE DOCUMENTO CONTIENE LA SEMANA 5 2


valores registrados en la columna especificada,
al igual que AVG, solo se usa para columnas
numéricas.

A continuación, se expondrán ejemplos para la siguiente tabla previamente creada y con datos
cargados:

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

Si se quisiera saber cuál es el promedio de los montos totales de las boletas, se haría lo siguiente:

SELECT AVG(monto_total) AS Promedio FROM boletas;

ESTE DOCUMENTO CONTIENE LA SEMANA 5 2


El resultado obtenido sería:

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

Para obtener el valor máximo pagado por algún cliente, se emplea la función MAX de la siguiente
forma:

SELECT MAX(monto_total) as MAXIMO FROM boletas;

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

Para obtener el valor mínimo pagado por algún cliente, se emplea la función MIN de la siguiente
forma:

SELECT MIN(monto_total) as MINIMO FROM boletas;

ESTE DOCUMENTO CONTIENE LA SEMANA 5 2


Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

Si se quisiera obtener todos los ingresos que se han tenido, se emplearía la función SUM de la
siguiente forma:

SELECT SUM(monto_total) AS Suma FROM boletas;

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

Para saber cuánto se ha recaudado, se utiliza el SUM:

SELECT SUM(monto_total) AS Suma FROM boletas;

ESTE DOCUMENTO CONTIENE LA SEMANA 5 2


Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

Si se quisiera saber cuántas boletas se han emitido, se emplearía la función COUNT de la siguiente
forma:

SELECT COUNT(*) AS Total FROM boletas;

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

 En el siguiente link se pueden consultar las funciones de


agregación propias de MySQL:

ESTE DOCUMENTO CONTIENE LA SEMANA 5 2


 Para ver otros ejemplos se recomienda acceder al siguiente
material:

2.2. FUNCIONES DE CONTROL DE FLUJO


Las funciones de control de flujo en SQL van a permitir comparar resultados extraídos de la base
de datos con parámetros establecidos, bien sea para tomar alguna decisión o para mostrar algún
valor. Estas consultas son útiles cuando el valor traído de la base de datos por sí solo no permite
realizar algo, por ejemplo, si se tiene almacenado en la base de datos la edad de los estudiantes
matriculados en IACC y si Vicerrectoría Académica quisiera agruparlas por rangos para
determinado fin, es útil emplear una función de control de flujo, ya que se podría, si la edad está
entre tal rango y tal rango, hacer una operación en detrimento de otra, dependiendo de las
opciones planteadas para cada caso.

2.2.1. IF
Según Joyanes (2008), esta función permite ejecutar una determinada acción cuando se cumple
una determinada condición. En todos los lenguajes de programación existe y se conoce como
condicional. Y para SQL la sintaxis es la siguiente (Microsoft, 2016):

IF Boolean_expression
{ sql_statement | statement_block }
[ ELSE
{ sql_statement | statement_block } ]

Según la sintaxis, se coloca luego del IF una expresión booleana, que de ser cierta se ejecutan las
sentencias en SQL que se coloquen. Y el ELSE es opcional en caso de que el resultado de la
expresión booleana sea falso.

ESTE DOCUMENTO CONTIENE LA SEMANA 5 2


Para ejemplificar el uso del IF, se empleará la tabla usada anteriormente y que tiene los siguientes
registros:

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

Se supondrá que para las boletas registradas, se debe mostrar cuáles de ellas implican un % de
comisión para el grupo de vendedores. Para ello se indicará que todas las boletas en las cuales el
monto supera los 5000 pesos, aplicarán comisión. Por tanto, el código será el siguiente:

SELECT NRO_BOLETA, if(MONTO_TOTAL > 5000 , 'SI', 'NO') as


APLICA_COMISION FROM boletas;

El resultado es:

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

ESTE DOCUMENTO CONTIENE LA SEMANA 5 2


2.2.2. CASE
Microsoft (2016) señala que esta función permite evaluar varias opciones y devolver la que cumple
con el requisito indicado. Además, explica que puede ser utilizada con los comandos SELECT,
UPDATE, DELETE y en las cláusulas WHERE y ORDER BY.

La sintaxis es la siguiente:

CASE
WHEN Boolean_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END

Tal como se observa anteriormente, el CASE evaluará si una expresión booleana es verdadera o
falsa. De ser verdadera, ejecutará la(s) instrucción(es) que se encuentre(n) luego del THEN, y el
ELSE en este caso es opcional.

Siguiendo con la tabla y registros que se tiene, se supondrá que de acuerdo a diferentes valores se
otorgará un porcentaje de comisión, siguiendo los siguientes parámetros:

• Si el monto de la boleta está entre 1 y 2000 pesos, no aplica comisión.


• Si el monto es mayor a 2000 pesos y menor o igual a 5000, el porcentaje de comisión es
del 1%.

• Si el monto es mayor a 5000 pesos y menor o igual a 10000 pesos, el porcentaje de


comisión es del 2%.
• Si el monto es mayor a 10000 pesos, el porcentaje de comisión es del 3%.

De acuerdo a lo anterior, se tendría el siguiente código:

ESTE DOCUMENTO CONTIENE LA SEMANA 5 2


SELECT NRO_BOLETA, MONTO_TOTAL
,CASE WHEN MONTO_TOTAL <= 2000 THEN 'NO APLICA COMISION'
WHEN MONTO_TOTAL2000 > AND MONTO_TOTAL <= 5000 THEN 'APLICA COMISION DEL 1%'
WHEN MONTO_TOTAL > 5000 AND MONTO_TOTAL <= 10000 THEN 'APLICA COMISION DEL 2%'
ELSE 'APLICA COMISION DEL 3%'
END
FROM boletas;

Obteniendo el siguiente resultado:

Fuente: material elaborado para esta asignatura (C. Zammarrelli, 2016).

 En el siguiente video se puede consultar un ejemplo para el uso


del CASE:

COMENTARIO FINAL
Al finalizar la semana, se pudo conocer más sobre el lenguaje SQL, específicamente el lenguaje de
control de datos, que permitirá a los administradores controlar la forma en la que diversos
usuarios manipulan los registros de la base de datos. Este lenguaje reviste gran importancia, ya
que para el trabajo con base de datos se hace necesario contar con perfiles de usuarios o, dicho de

ESTE DOCUMENTO CONTIENE LA SEMANA 5 2


otra forma, no todos los usuarios pueden realizar las mismas acciones sobre la base de datos, y es
por eso que los diversos comandos que ofrece este lenguaje son de gran utilidad.

Otro de los temas abordados durante esta semana correspondió a las funciones que ofrece SQL
para diversas acciones, donde estas funciones pueden ser utilizadas de diversas formas, ya que
todo va a depender de lo que se necesite en el momento. Con las funciones de agregación, por
ejemplo, se pueden obtener resultados a partir de lo que se tenga, y con las de control de flujo se
pueden mostrar de otra forma los registros, bien sea para facilitar la toma de decisiones o para
cumplir con un requerimiento que se tenga.

Es importante acotar que los ejemplos pueden ser infinitos, y que la idea es que cada persona que
se aventura en el mundo de las bases de datos deje volar la creatividad, y realice prácticas para así
descubrir más usos de estas funciones.

REFERENCIAS
Joyanes, L. (2008). Fundamentos de programación. Madrid, España: McGraw-Hill.

Microsoft (2016). CASE (Transact-SQL). Recuperado de:

https://msdn.microsoft.com/eses/library/ms181765(v=sql.120).aspx

Ramos, M.; Ramos, A. y Montero, F. (2006). Sistemas gestores de bases de datos. Madrid, España:

McGraw-Hill.

Ricardo, C. (2009). Bases de datos. México DF, México: McGraw-Hill.

ESTE DOCUMENTO CONTIENE LA SEMANA 5 2


PARA REFERENCIAR ESTE DOCUMENTO, CONSIDERE:

IACC (2016). SQL: lenguaje para la definición, manipulación y control de bases de datos

relacionales II. Fundamentos de Bases de Datos. Semana 5.

ESTE DOCUMENTO CONTIENE LA SEMANA 5 2


ESTE DOCUMENTO CONTIENE LA SEMANA 5 2

Potrebbero piacerti anche