0% encontró este documento útil (0 votos)
29 vistas17 páginas

A13c06 SQL

Cargado por

Rachel Lopez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como RTF, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
29 vistas17 páginas

A13c06 SQL

Cargado por

Rachel Lopez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como RTF, PDF, TXT o lee en línea desde Scribd

Sistemas de Bases de Datos. Conferencia 9.

Curso 2012 – 2013

Asignatura: Sistemas de Bases de Datos.


Carrera: Ingeniería Informática.
Tipo de Curso: C.R.D. Año: 2do. Semestre: 2do.
Actividad # 23.
Conferencia # 9.
Título: “Lenguaje SQL.”
Contenido:
 SQL estándar.
 Optimización

Bibliografía:
- Date, C.J., An Introduction to Database Systems, 7ma. edición, Capítulos 4
y 17, Apéndices A y B.
- SQL Server 2000. Book online.

Objetivos:
Que los estudiantes sean capaces de interpretar cláusulas de SQL y enunciar su
posible resultado y enunciar las ventajas de la optimización de consultas.

INTRODUCCIÓN
Recordar las características, semejanzas y diferencias entre el álgebra y el cálculo
relacional, así como las operaciones fundamentales de álgebra relacional.

DESARROLLO
En la actualidad existen muchos SGBD cuyos lenguajes son, en general,
diferentes. Sin embargo, todos ellos tienen embebido un lenguaje único conocido
como SQL (siglas de Structured Query Language). Este hecho da una medida de
la importancia de este lenguaje en el ámbito de los SGBD y por eso se hace
necesario su estudio.

 SQL estándar.

1
Sistemas de Bases de Datos. Conferencia 9. Curso 2012 – 2013

Nota:
Para los ejemplos, se utilizará el modelo Suministrador Producto (base de datos
SUM_PROD) que a continuación se representa:
SUMIN (snum, snom, tipo, mun)
PROD (pnum, pnom, precio, peso, color)
SP (s, p, cant)

El lenguaje SQL nació como parte de un SGBD relacional denominado System R,


a principios de los años 70. Evolucionó mucho desde aquellos tiempos y cambió
su nombre desde SEQUEL hasta el SQL actual. El último estándar conocido es
de los ’90.

Cada sistema de programación incorpora una variante del estándar de modo que
no necesariamente lo cubra todo, pero sí puede incluir elementos propios aún
cuando éstos no estén en el estándar.

En esta actividad se discutirán algunos de los comandos fundamentales de este


lenguaje.

Partes del lenguaje

El SQL contiene comandos para las tres partes componentes del lenguaje:
 DDL (Data Description Language)
 DCL (Data Control Language)
 DML (Data Manipulation Language)

Como componentes del DDL están los comandos que permiten definir relaciones,
vistas, índices, etc. Se cuenta, entre otros, con los siguientes:
CREATE TABLE………..Crear una tabla en la base de datos
ALTER TABLE………….Modificar la estructura de una tabla después de creada.
DROP TABLE ………….Eliminar una tabla

2
Sistemas de Bases de Datos. Conferencia 9. Curso 2012 – 2013

Como componentes del DCL están los comandos para controlar los accesos a la
BD, como son:
GRANT……………Otorgar permisos de acceso a la BD.
REVOKE………….Remover (quitar) privilegios de acceso.

Como componentes del DML se encuentran los comandos encargados de realizar


las consultas, además de los que permiten insertar, suprimir y modificar tuplas.
Entre los más importantes están:
SELECT…….…….Realizar consultas (recuperaciones).
INSERT…………..Insertar tuplas.
UPDATE……….…Modificar tuplas.
DELETE…………..Eliminar tuplas.

El primero puede considerarse como el más importante de todos los comandos.


Comprender su estructura y uso permite interpretar correctamente el código SQL
generado por muchos SGBD.

Estructura básica.

Consta de las cláusulas:


 SELECT…………Listar los atributos deseados (Proyección del Álgebra)
 FROM……………Listar las tablas (Producto cartesiano del Álgebra)
 WHERE………… Predicado de selección. Contiene atributos de las tablas del
FROM. Incluye las expresiones de combinación entre las tablas para el JOIN del
Álgebra.

Una instrucción SELECT incluye obligatoriamente las cláusulas SELECT y FROM,


aunque una consulta típica tiene la forma siguiente:

SELECT A1, A2,……….., An

3
Sistemas de Bases de Datos. Conferencia 9. Curso 2012 – 2013

FROM r1, r2,…………., rn


WHERE p

Lo que es equivalente a :
( (r1 x r2 x……. rn ) p ) [ A1,A2,……….An]

SELECT * significa todos los atributos de todas las relaciones.

Ejemplo:
SELECT snom
FROM SUMIN……………Encuentra los nombres de todos los suministradores.

Mientras que:
SELECT snom
FROM SUMIN Recupera los nombres de los suministradores que
WHERE mun = ’Habana Vieja’ radican en la Habana Vieja

El predicado del WHERE permite expresiones con los operadores lógicos AND,
OR, NOT.

Operadores
Además de los operadores lógicos mencionados, y los de comparación <, >, =,
etc., existen otros operadores. Estos son:
BETWEEN……………Para expresiones que incluyan rango de valores.
LIKE…………..………Se emplea en patrones o modelos para las comparaciones
de cadenas de caracteres.

Ej.
SELECT s Recupera los números de los
FROM SP suministradores que suministran

4
Sistemas de Bases de Datos. Conferencia 9. Curso 2012 – 2013

WHERE cant BETWEEN 10 AND 20 productos en cantidades entre 10 y 20

Para los patrones del LIKE se emplean los caracteres % y -, que hacen la función
de comodines con el siguiente significado:
%……Cualquier subcadena
-…….Cualquier carácter
Ej.
SELECT snom
FROM SUMIN Encuentra todos los nombres de los
WHERE snom LIKE “%EZ” suministradores terminados en EZ

Estos operadores de comparación pueden combinarse con NOT.

Tuplas duplicadas.
Los lenguajes de consulta formales se basan en la noción matemática de relación
como un conjunto, lo que implica que no existen tuplas duplicadas. En la práctica,
la eliminación de duplicados lleva tiempo y en SQL se permiten duplicados en los
resultados de las consultas.
Esto se evita con la palabra clave DISTINCT después del SELECT.

Por ejemplo, si se hace:

SELECT s
FROM SP

Se obtienen los mismos s repetidos tantas veces como ellos estén involucrados en
un suministro de un producto diferente.

Esto se evita con:

SELECT DISTINCT s

5
Sistemas de Bases de Datos. Conferencia 9. Curso 2012 – 2013

FROM SP

El inverso de DISTINC es ALL (implícito).

Operaciones de conjuntos
El SQL estándar incluye la operación UNION. En sus primeras versiones se
incluyó también INTERSECT y MINUS, pero no están en el estándar (aunque
pueden lograrse con otras características de este).

Ejemplo:
Para encontrar los números de productos con Peso > 20 o suministrados por ‘S2’
o ambos, es posible hacer:

SELECT pnum
FROM PROD
WHERE peso>20
UNION
SELECT p
FROM SP
WHERE s=’S2’

Consultas con más de una tabla.


El “Join” en SQL puede lograrse de la siguiente forma:

SELECT snom
FROM SUMIN, SP
WHERE snum = s AND cant > 50

La parte en cursiva es la condición de la combinación de las tablas.


Si en ambas tablas el atributo número del suministrador tuviera el mismo nombre,
por ejemplo snum, se hace uso de nombres calificados:

6
Sistemas de Bases de Datos. Conferencia 9. Curso 2012 – 2013

WHERE SUMIN.snum = SP.snum AND cant > 50

Opcionalmente pueden agregarse más condiciones con AND.

El Join no tiene que ser necesariamente un “equijoin” aunque es lo más común.

Puede hacerse el join de una tabla consigo misma. Recuérdese la consulta:


“Encontrar parejas de números de suministradores que radiquen en el mismo
municipio”
Puede expresarse como:

SELECT S1.snum, S2.snum


FROM SUMIN S1, SUMIN S2
WHERE S1.mun = S2.mun AND S1.snum < S2.snum

Lo que se ha hecho significa que el SQL emplea el concepto de variable de tupla


del cálculo relacional y resuelve el problema de referenciar dos tuplas de la misma
relación de esta manera.

Consultas anidadas (subconsulta)


En SQL es posible anidar un SELECT dentro de otro (sin restricciones de
profundidad en el anidamiento, al menos en teoría).

Por ejemplo, para encontrar los nombres de los suministradores que suministran el
producto ‘P2’, hay más de una forma de obtenerlo en SQL.

1. SELECT snom
FROM SUMIN, SP (con join)
WHERE snum = s AND p = ’P2’

7
Sistemas de Bases de Datos. Conferencia 9. Curso 2012 – 2013

2. SELECT snom
FROM SUMIN
WHERE snum IN
(SELECT s
FROM SP
WHERE p = ’P2’)

Lo que significa que una misma consulta puede ser expresada de diferentes
formas.

El operador IN permite comparación de conjuntos, al igual que SOME, ALL.

SOME……..Significa “Algún”
ALL………Significa “Todos”

Ejemplos:
SELECT pnom
FROM PROD
WHERE peso >ALL
(SELECT peso
FROM PROD
WHERE color = ’rojo’)

Esta consulta encuentra los nombres de los productos cuyo peso es mayor que el
peso de los productos de color rojo.

Uso del cuantificador Existencial ($ )


SQL da la posibilidad de comprobar si una subconsulta tiene alguna tupla en su
resultado. EXISTS devuelve TRUE si la subconsulta del argumento no está vacía.

8
Sistemas de Bases de Datos. Conferencia 9. Curso 2012 – 2013

Ejemplo. Encontrar los nombres de los suministradores que suministran el


producto ‘p2’ (tercera variante).

SELECT snom
FROM SUMIN
WHERE EXISTS
(SELECT *
FROM SP
WHERE s = snum AND p = ’P2’)

EXISTS representa el $ y devolverá verdadero cuando el resultado del SELECT


anidado tenga alguna tupla, o sea, cuando haya algún suministro de P2 por parte
de algún suministrador. La consulta devuelve entonces los suministradores para
los que existe un suministro de ‘p2’.

Puede combinarse con NOT.

Ejemplo. Encontrar los que no suministran ‘p2’

SELECT snom
FROM SUMIN
WHERE NOT EXISTS
(SELECT *
FROM SP
WHERE s = snum AND p = ’P2’)

Ordenamiento de la presentación del resultado.

Es posible que las tuplas obtenidas aparezcan en cierto orden. Esto se logra con
la cláusula ORDER BY.
Ejemplo.

9
Sistemas de Bases de Datos. Conferencia 9. Curso 2012 – 2013

SELECT snom
FROM SUMIN
WHERE mun=’H.Vieja’
ORDER BY snom

El orden implícito es ascendente pero puede especificarse lo contrario con ASC,


DESC. El ordenamiento puede ser sobre múltiples atributos.

Funciones de agregación.
Es posible utilizar funciones que, en general operan sobre los valores de una
columna. Éstas son:

AVG………..realiza una media de una columna de datos numéricos.


COUNT…....cuenta el número de elementos seleccionados en una columna.
COUNT (*)….cuenta el número de filas en el resultado de la consulta.
MIN…………determina el menor valor de una columna.
MAX………..determina el mayor valor de una columna.
SUM………..proporciona el total de la suma de una columna de datos numéricos.

Ejemplos:
a) SELECT COUNT(*)
FROM SUM………………………….Devuelve cantidad de suministradores

b) SELECT COUNT(DISTINCT s)
FROM SP…………………Cantidad de suministradores que tienen suministros

c) SELECT SUM (Cant)


FROM SP
WHERE p = ’P1’……………Suma de las cantidades de ‘P1’ suministradas

10
Sistemas de Bases de Datos. Conferencia 9. Curso 2012 – 2013

Estas funciones son llamadas “de agregación” pues pueden operar sobre grupos
de tuplas. Para ello se combinan con la cláusula GROUP BY.
En esta cláusula se especifica un atributo (o varios atributos) y el efecto es como
si se formaran “grupos” en la tabla, donde, en cada grupo formado, estarán las
tuplas con igual valor en el atributo(s) especificado(s) en el GROUP BY.
Ejemplo:
SELECT p, SUM(Cant)
FROM SP
GROUP BY p

De esta forma es posible calcular la suma de la cantidad suministrada no sólo para


el producto ‘P1’, sino para todos los productos.

Ejemplo. Se desea encontrar la cantidad de productos que suministra cada


suministrador.
SELECT s, COUNT(DISTINCT p)
FROM SP
GROUP BY s

Pnum SNum Cantidad


p1 s1 100
p2 s1 50
p4 s1 10
p3 s2 20
p4 s2 30

Respuesta: S1 3
S2 2

También es posible usar funciones en una subconsulta:

11
Sistemas de Bases de Datos. Conferencia 9. Curso 2012 – 2013

SELECT pnom
FROM PROD
WHERE peso > (SELECT avg(peso) FROM PROD)

A veces es necesario declarar una condición o predicado para que sea aplicado a
los grupos y no a las tuplas. Para ello se usa HAVING

Ejemplo.
SELECT p, SUM(cant)
FROM SP
GROUP BY p
HAVING SUM(cant) > 100

El empleo de Group By y Having exige que:


 cada expresión del SELECT tenga un solo valor por grupo.
 la expresión de Having tenga un solo valor por grupo.
Es decir, no es posible tener: SELECT p, cant
From SP
Group By p
Having cant > 100
porque cant no tiene un solo valor para cada P

En un SELECT pueden combinarse cláusulas WHERE y HAVING. En tal caso,


primero se aplica el predicado del WHERE a todas las tuplas y sólo éstas serán
agrupadas según el Group By para luego aplicar el predicado del Having.

Ejemplo:
SELECT AVG(cant)
FROM SUMIN,SP
WHERE SUMIN.snum = SP.s and mun =’Plaza’

12
Sistemas de Bases de Datos. Conferencia 9. Curso 2012 – 2013

Group By SP.s
Having COUNT(DISTINCT P) ³ 3

En este ejemplo se calcula el valor promedio del atributo cant para aquellos
suministradores que radican en Plaza y que, además, suministran más de tres
productos diferentes.

Comandos para modificar tuplas en tablas de una BD.


 Eliminación. DELETE
FROM R
WHERE P

Ej. a) DELETE b) DELETE c) DELETE


From SP From SUMIN From PROD
Where snum =’S5’ Where peso Between 10 and 50

En el inciso a) se eliminan todas las tuplas de SP. En el inciso b) se elimina el


suministrador cuyo número es ’S5’. En el inciso c) se eliminan los productos cuyo
peso está entre 10 y 50.

 Inserción. INSERT
INTO R[(atr[,atr…])]
VALUES(constante[,constante…]) para una tupla.

INSERT
INTO R[(atr[,atr…])]
SELECT ….
FROM.. .
WHERE… para varias tuplas

Ej. a) INSERT b) INSERT

13
Sistemas de Bases de Datos. Conferencia 9. Curso 2012 – 2013

INTO SUMIN (snum,snom,mun) INTO SUMIN (snum,snom,mun)


VALUES (‘S6’,’Perez’,’Cerro’) Select snum,snom,mun
From STEMP **Creada antes
Where mun = ’Cerro’

En el inciso a) se inserta una tupla en SUMIN (el suministrador ‘S6’), sin darle
valor al atributo tipo, por lo que éste pasa a tener valor null en esa tupla. En el
inciso b) se insertan en SUMIN Todas las tuplas de la tabla STEMP para las cuales
el municipio sea ‘Cerro’

 Actualización. UPDATE R Cambiar los valores de


SET Atr=Exp[,Atr=exp..] las tuplas deseadas.
Where P

Ej. a) UPDATE PROD b) UPDATE SP


SET color = ‘rojo’ SET cant = cant * 2
peso = peso + 5 Where p = ’P1’
Where pnum= ’P1’

Vistas
Las vistas son el resultado de operaciones del Álgebra Relacional sobre tablas o
entre tablas y otras vistas almacenándose de ellas en la BD sólo su definición, es
decir, el comando que las define.

CREATE VIEW <Nombre>


AS <comando SELECT que la define>

Ej. Create View CantProd


As Select p, SUM(cant)
From SP

14
Sistemas de Bases de Datos. Conferencia 9. Curso 2012 – 2013

Group By p

DROP VIEW < Nombre> para eliminar la vista de la BD

Tipos de combinación para las consultas y vistas.

Una combinación es una operación con una vista o consulta que vincula las filas
en dos o más tablas comparando valores de campos específicos. Por ejemplo, la
combinación predeterminada entre tablas es una combinación interna que sólo
selecciona registros de ambas tablas cuando los valores de los campos
combinados son iguales. Como SQL está basado en la teoría matemática de
conjuntos, cada tabla se puede representar como un círculo. La condición de
combinación determina el punto de superposición que representan el conjunto de
registros que coinciden. Esta superposición ocurre en el interior de la parte
“interna” de los dos círculos. Una combinación externa incluye no sólo las filas
coincidentes que se encuentran en la intersección de las tablas, sino también las
filas de la parte externa del círculo a la izquierda o la derecha de la intersección.

El SQL estándar ha incluido la posibilidad de definir el tipo de combinación entre


las tablas relacionadas y esto se especifica en la cláusula FROM del SELECT.
Sustituye la condición de combinación de la cláusula WHERE.

Combinación interna (INNER JOIN)


En el resultado se incluyen sólo las filas que “casan” en las tablas combinadas.
Corresponde al JOIN del Álgebra relacional

Ejemplo:
SELECT SUMIN.snom, SP.p, SP.cant;
FROM sum_prod!SUMIN INNER JOIN sum_prod!sp ;
ON SUMIN.snum = SP.s

15
Sistemas de Bases de Datos. Conferencia 9. Curso 2012 – 2013

En esta instrucción se obtendrán los nombres de los suministradores que tienen


suministros (que aparecen en SP) junto con el número del producto que suministra
y la cantidad en que lo suministra.

Combinación externa (outer JOIN)


Tiene 3 variantes: LEFT, RIGHT y FULL con el siguiente significado:

LEFT: Incluye todas las filas de la tabla de la izquierda (la que aparece a la
izquierda de la palabra LEFT) y las que casan de la derecha. Aplicando esta
combinación al ejemplo anterior la instrucción quedaría:

SELECT SUMIN.snom, SP.p, SP.cant;


FROM sum_prod!SUMIN LEFT OUTER JOIN sum_prod!sp ;
ON SUMIN.snum = SP.s

Y en el resultado estarían todos los suministradores. En el caso de los que no


tienen suministros, en las columnas p y cant aparece un NULL.

RIGHT: Incluye todas las filas de la tabla de la derecha, más las que casan. Si la
tabla de la derecha es una tabla secundaria en una relación (como lo es SP
respecto a SUMIN), esta operación sirve para encontrar las violaciones de la
integridad referencial en un sistema que no la chequee. Rellena con NULL los
campos en que no haya valores por tratarse de filas que no casan.

FULL: Incluye todas las filas de las 2 tablas, casen o no. Rellena con NULL los
campos en que no haya valores por tratarse de filas que no casan.

OPTIMIZACIÓN DE CONSULTAS
Como se ha visto a través de las operaciones, primero del álgebra relacional y
ahora con las cláusulas SQL, una misma consulta puede ser expresada de
diferentes maneras y aunque el resultado sea el mismo, el tiempo que puede

16
Sistemas de Bases de Datos. Conferencia 9. Curso 2012 – 2013

demorar la respuesta dependerá de la cantidad de tuplas involucradas, la cantidad


de valores diferentes para cada atributo, entre otros elementos.

Por tal motivo, los sistemas de gestión incluyen un optimizador que se encarga de
analizar la cláusula suministrada y convertirla a una nueva consulta equivalente en
la que se puede obtener un mejor rendimiento.

Por ejemplo, si se quisiera recuperar los proveedores que suministran el producto


de código P2, una posible solución sería:

((SP JOIN P) WHERE p = pnum (p = “P2”)) (snom)

Si la base de datos tiene 100 proveedores y 10 000 suministros, de los cuales solo
50 corresponden con el producto P2, sería mejor (ver en el libro, la explicación de
porqué 100 veces mejor) si primeramente se seleccionan las tuplas
correspondientes a P2 y después se realiza el JOIN.

La optimización de una consulta implica análisis que la computadora está en


mejores condiciones de hacer en comparación con la mente humana, sin
embargo, el proceso de optimización también lleva tiempo, por lo que será mucho
mejor plantear consultas lo más eficientes posibles.

CONCLUSIONES
 El hecho de ser un estándar garantiza que más o menos se pueda llevar de
un gestor a otro y no se requiera aprendizaje para cada uno.
 Es importante no dejar todo el trabajo al optimizador de consultas.

ESTUDIO INDEPENDIENTE
1. Crear las consultas necesarias para generar las salidas de sus proyectos
de curso.

17

También podría gustarte