Publicado el 27 de Junio del 2019
688 visualizaciones desde el 27 de Junio del 2019
113,3 KB
9 paginas
Creado hace 20a (10/03/2005)
Tema 4. SQL
Juan Ignacio Rodríguez de León
Resumen
Este tema se centra exclusivamente en el estudio del lenguaje de
consultas SQL (Structured Query Language). SQL usa una combi-
nación de álgebra relacional y construcciones del cálculo relacional.
Funciones de agregación. Valores nulos. Subconsultas anidadas. Rela-
ciones derivadas. Vistas. Modificación de la base de datos. Reunión
de relaciones. Lenguaje de definición de datos. SQL incorporado. SQL
dinámico. Otras características de SQL
En este apartado se presenta una visión general de SQL basada en
la norma SQL-92 ampliamente implementada. Hay ser consciente de que
algunos sistemas de bases de datos no soportan todas las características de
SQL-92 y de que muchas bases de datos proporcionan características no
estándar que no se tratarán aquí.
Los ejemplos de este capítulo y posteriores se basarán en una empresa
bancaria, con los siguientes esquemas de relación:
EsquemaSucursal = (nombreSucursal, ciudadSucursal, activo)
EsquemaCliente = (nombreCliente, calleCliente, ciudadCliente)
EsquemaPrestamo = (numeroPrestamo, nombreSucursal, importe)
EsquemaPrestatario = (nombreCliente, numeroPrestamo)
EsquemaCuenta = (numeroCuenta, nombreSucursal,saldo)
EsquemaImpositor = (nombreCliente,numeroCuenta)
1. Estructura Básica
La estructura básica de una expresión SQL consiste en tres cláusulas:
select, from y where.
La cláusula select corresponde a la operación proyección del álgebra
relacional (Π). Se usa para listar los atributos deseados como resultado
de una consulta.
La cláusula from corresponde a la operación producto cartesiano del
álgebra relacional (). Lista las relaciones que deben ser utilizadas en
la consulta.
La cláusula where corresponde al predicado selección del álgebra rela-
cional (σ).
1
1 ESTRUCTURA B ÁSICA
1.1. La cláusula select
2
Una primera e importante diferencia con respecto al modelo relacional es
que, por razones de rendimiento, las consultas SQL no eliminan los duplicados
por defecto. Recuerdese que en el sisteme relacional, los tuplas duplicadas
están prohibidas.
Para que los duplicados se eliminen, tenemos que indicarlo de forma
explícita, usando la palabra reservada distinct justo despues del select.
Si deseamos obtener todos los atributos de una consulta, se puede usar
el simbolo asterisco “*” como forma abreviada. Por ejemplo, la consulta:
select *
from Prestamo
Nos devolverá una relación con todos los atributos de Prestamo.
La cláusula select puede contener expresiones aritméticas que con-
tengan los operadores: + , − , ∗ y / operando sobre constantes o atributos.
1.2. La cláusula where
Se pueden usar conectivas lógicas, que en SQL se representan como and,
or y not, así como los operaciones de comparación =, <, <=, >, >= y <> (,).
También dispone de un operador ternario, between, que permite com-
prpbar si un valor determinado esta dentro de un rango, por ejemplo:
select numeroPrestamo
from Prestamo
where importe between 90000 and 120000
También se puede usar not between para comprobar que el valor no
caiga dentro del rango.
1.3.
la cláusula from
La cláusula from define un producto cartesiano. Para realizar reuniones
naturales y externas existe ciertas extensiones que se tratarán más adelante.
1.4. La operación renombramiento
Se puede utilizar la palabra reservada as para renombrar atributos y
expresiones (usándola en la cláusula select) o relaciones (usándola en la
cláusula from).
Es especialmente útil cuando aparacen dos o más veces la misma relación
en una consulta.
2 OPERACIONES SOBRE CONJUNTOS
3
1.5. operaciones sobre cadenas
Se utilizan las comillas simples para delimitar cadenas.
Se puede concatenr cadenas, con el operador || (Dos barras verticales
seguidas), se pueden comparar con los operadores =, <, <=, >=, > y <>.
También se permite la extracción de partes de la cadena (substr), conversión
a may úsculas/min úsculas, cálculo de la longitud.
Se define un también un nuevo opperador de comparación, llamadao
like. Este operador sirve para comparar contra patrones de cadena. Para la
descripción de los patrones se utilizan dos caracteres con significados espe-
ciales:
Tanto por ciento ( %) Casa con cualquier subcadena
Subrayado ( ) Casa con cualquier carácter.
Los patrones distinguen entre may úsculas y min úsculas. También se
puede usar la expresión not like para buscar cadenas de texto que no
casen con el patrón indicado.
1.6. Orden de presentación de las tuplas
SQL permite definir el orden en que deben aparecer las tuplas, usando
la cláusula order by. Por omision, se usa el orden ascendente de los atributos
listados en la cláusula. En caso de desear un orden descendente, se puede
usar el modificador desc despues del atributo.
2. Operaciones sobre conjuntos
En SQL se pueden usar las operaciones ∪, ∩ y −. Para ello se utilizan
las palabras reservadas union, intersect y except, respectivamente. Al igual
que en el álgebra relacional, las relaciones deben tener la misma aridad y
los dominios de los atributos deben ser compatibles.
Estos operadores si eliminan duplicados por omisión. Si quieremos in-
cluir los operadores, hay que definirlo explicitamente usando union all,
intersect all o except all.
3. Funciones de agregación
Son equivalentes a lo explicado en el álgebra relacional. Para las agrupa-
ciones se usa la cláusula group by. Se pueden eliminar los duplicados antes
de calcular una función de agregación utilizando la palabra clave distinct
en la expresión de agregación:
4 VALORES NULOS
4
select nombreSucursal, count (distinct nombreCliente)
from impositor, cuenta
where impositor.numeroCuenta = cuenta.numeroCuenta
group by nombreSucursal
Podemos realizar una segunda selección, basándonos en los valores
calculados mediante las funciones de agregación, utilizando la cláusula
having. Los predicados de la cláusula having se aplican despues de realizarse
las agrupaciones.
4. valores nulos
Se usa la palabra reservada null para representar un valor nulo. Se sigue
la misma lógica para tratar los casos nulos que en el álgebra relacional. La
unica excepcion es count(*), que si tendrá en cuenta los valores nulos.
El uso de nulos dentro de expresiones lógicas puede conducir a resulta-
dos que no sea verdaderos ni falsos, sino desconocidos. Se pueden usar las
cláusualas is unknown e is not unknown para tratar estas expresiones.
5.
subconsultas anidadas
Una subconsulta es una expresión select-from-where que se anida
dentro de otra consulta. Se suelen usar para comprobaciones sobre perte-
nencia a conjuntos, comparación de conjuntos y cardinalidad de conjuntos
5.1. Pertenencia a conjuntos
Se usa la conectiva in para comprobar la pertenencia del valor de uno
o más atributos de una relación a un conjunto, donde el conjunto es la
consulta anidada. Se puede usar not in para comprobar la no pertenencia al
conjunto.
5.2. Comparación de conjuntos
Se pueden utilizar las expresiones some y all, conbinadas con los oper-
adores de comparación, para comparar el valor de uno o más atributos con
alguno o con todos los elementos de un conjunto, donde el conjunto es la
consulta anidada. Por ejemplo, el comparador atributo > some(subconsulta)
sera cierto si el valor del atributo comparado es mayor que al menos
uno de los valores obtenidos de la subconsulta. el comparador atributo >
all(subconsulta) sera cierto si el valor del atributo comparado es mayor que
todos los valores obtenidos de la subconsulta.
Existen los comparadores < some, <= some, > some, >= some y <> some,
así como < all, <= all, > all, >= all y <> all.
6 VISTAS
5
5.3. Comparación de relaciones vacias
Se puede comprobar si una subconsulta no devuelve ning ún resultado,
con el operador exists. También se puede usar not exists para comprobar
que el resultado no esté vacio.
En una subconsulta, sólo se pueden usar variables tupla que estén
definidas en la propia subconsulta (local) o en cualquier consulta que la
contenga (global).
5.4. Comprobación de tuplas duplicadas
Se puede comprobar si una subconsulta produce como resultado tuplas
duplicadas. La constructora unique devuelve cierto si la subconsulta que se
le pasa como argumento no produce tuplas duplicadas.
Se puede utilizar también not unique.
6. Vistas
Se aplica todo lo explicado en el álgebra relacional.
7. Consultas complejas
Se estudiarán dos formas de componer varios bloques SQL para expresar
una consulta compleja: las relaciones derivadas y la cláusula with.
7.1. Relaciones derivadas
SQL permite el uso de una expresión de subconsulta en la cláusula from.
Si se usa una expresión de este tipo se debe dar un nombre a la relación
resultado y se pueden renombrar los atributos usando la cláusula as.
7.2. La cláusula with
La cláusula with proporciona una forma de definir una vista temporal
cuya definición está disponible sólo para la consulta en la que aparece esta
cláusula.
8. Modificaciones de la base de datos
8.1. Borrado
delete from r where p
9 REUNI ÓN DE RELACIONES
6
8.2.
Inserción
insert into r values (v1, v2, . . . , vn) o, si no se conoce el orden en que se
definieron los atributos, insert into r (a1, a2, . . . , an) values (v1, v2, . . . , vn)
8.3. Actualizaciones
update r set a1 = v1, a2 = v2, . . . , an = vn where p
8.4. Actualizaciones de vistas
No se puede, a no ser que la definición de la lista compla la siguiente
condición:
Una modificación de una vista es válida sólo si vista en cuestión se
define en términos de la base de datos relacional real –esto es, del
nivel lógico de la base de datos–, y sin usar agregación.
8.5. Transacciones
Una transacción consiste en una secuencia de instrucciones de consulta
y actualizaciones. La norma SQL especifica que una transacción comien-
za implícitamente cuando se ejecuta una instrucción SQL. La transacción
puede terminar de dos maneras:
Commit work confirma o co
Comentarios de: Tema 4. SQL (0)
No hay comentarios