SQL02
SQL02
CONSULTAS SIMPLES
INTRODUCCIÓN
DESARROLLO
Comenzaremos el estudio de consultas simples a una Base de Datos, en estas
consultas participará solamente una tabla.
Para la realización de consultas se utiliza la sentencia SELECT, la cual recupera
datos de una BD y los devuelve en forma de resultados de la consulta.
Para consultas sencillas, la petición en lenguaje inglés y la sentencia SELECT son
muy similares.
La sentencia SELECT tiene el siguiente formato:
SELECT ítem-seleccionado
ALL ,
DISTINCT *
1
Como se puede apreciar la sentencia SELECT consiste de seis cláusulas. Las
cláusulas SELECT y FROM necesarias, las otras cuatro son opcionales. Aunque lo
veremos después con más detenimiento resumiremos el uso de cada una de las
cláusulas:
Ø La cláusula SELECT lista los datos a recuperar por la sentencia. Los ítems
pueden ser columnas de la BD o columnas a calcular por SQL.
Ø La cláusula FROM lista las tablas que contienen los datos a recuperar la
consulta.
Ø La cláusula WHERE dice a SQL que incluya sólo ciertas filas de datos en los
resultados de la consulta, precisamente los que satisfacen la condición de
búsqueda que se especifica.
Ø La cláusula GROUP BY especifica una consulta resumen. Agrupa todas las
filas similares y produce una fila resumen.
Ø La cláusula HAVING dice a SQL que incluya sólo ciertos grupos producidos
por la cláusula GROUP BY.
Ø La cláusula ORDER BY ordena los resultados de las consultas sobre la base de
los datos de una o más columnas.
Cláusula SELECT
La cláusula SELECT que empieza cada sentencia SELECT especifica los ítems de
datos a recuperar por la consulta. Un ítem puede ser:
- Un nombre de columna, identificando una columna de la tabla designada en la
cláusula FROM. Cuando un nombre de columna aparece en el SELECT, SQL
simplemente toma el valor de esa columna de cada fila de la tabla de la BD.
- Una constante, especificando que el mismo valor constante va a aparecer en
todas las filas de los resultados de la consulta.
- Una expresión SQL, indicado que SQL debe calcular el valor a colocar en los
resultados.
Cláusula FROM
Especifica las tablas que intervienen en la consulta. Estas tablas se llaman tablas
fuentes. Todas las consultas que veremos en esta clase tienen una única tabla fuente.
Resultados de consultas
2
ese programa deberá manipular. Las columnas de la tabla corresponden a los items
de la cláusula SELECT.
Es importante destacar que aún cuando la consulta devuelva un valor, este considera
una tabla de una fila y una columna.
Consultas Sencillas
Las consultas más sencillas solicitan columnas de datos de una única tabla en la BD.
Generalmente la sentencia SELECT incluye sólo las cláusulas SELECT y FROM y
conceptualmente SQL procesa la consulta recorriendo la tabla nominada en la
cláusula FROM, una fila cada vez. Por cada fila, SQL toma los valores de las
columnas solicitadas en la lista de selección y produce una única fila de resultados.
Los resultados contienen por tanto una fila de datos por cada fila de la tabla.
Ejemplo:
Listar la ciudad, región e importe de ventas de cada oficina
SELECT ciudad, region, ventas
FROM oficinas
3
(Los resultados de la consulta parecen consistir en una “frase” distinta por cada
oficina, pero realmente es una tabla de 3 columnas. La segunda columna contiene la
misma cadena de texto para cada una de las filas.)
SELECT *
FROM oficinas
Por ejemplo:
SELECT dir
FROM oficinas
Si un director dirige más de una oficina su número saldría tantas veces como oficina
dirija.
Para evitar esta repetición se inserta la palabra clave DISTINCT en la cláusula
SELECT justo antes de la lista de selección.
En nuestro caso queda la consulta de la siguiente manera:
4
SQL efectúa esta consulta generando primero un conjunto completo de resultados y
eliminando luego las filas que son duplicados exactos de alguna otra para formar los
resultados finales.
Observar que hasta este momento todas las operaciones que hemos realizado sobre
las tablas corresponden a la operación de proyección del álgebra relacional.
Las consultas SQL que recuperan todas las filas de una tabla no son frecuentes en
las aplicaciones. Generalmente se desea seleccionar parte de las filas de una tabla.
La cláusula WHERE se emplea para especificar las filas que se desean recuperar.
Esta cláusula consta de la palabra clave WHERE seguida de una condición de
búsqueda que especifica las filas a recuperar. Dicha condición en general es una
expresión lógica
Ejemplos:
SQL recorre cada fila de la tabla, una a una, y aplica la condición. Se pueden
producir tres casos:
- Si la condición de búsqueda es TRUE (cierta), la fila en cuestión se incluye en
los resultados de la consulta.
- Si la condición de búsqueda es FALSE (falsa), la fila se excluye de los
resultados de la consulta.
- Si la condición de búsqueda tiene un valor NULL (desconocido), la fila se
excluye de los resultados de la consulta.
5
Condiciones de búsqueda
a) Test de comparación
En el caso que alguna de las dos expresiones sea NULL la comparación genera
un valor NULL. Observe que si es la única expresión en la cláusula WHERE esa
fila no se incluirá en el resultado.
b) Test de Rango
Ejemplo:
El test incluye los puntos extremos del rango, por lo que los pedidos remitidos el
1 de octubre o el 31 de diciembre se incluirán en los resultados de la consulta.
6
Listar los vendedores cuyas ventas no están entre el 80 y el 120 por ciento de su
cuota.
Ejemplos:
La expresión del test puede ser una expresión cualquiera. Todos los elementos
de la lista deben tener el mismo tipo de datos, y este debe coincidir con el tipo
de la expresión.
7
Si la expresión produce NULL, el test devuelve NULL.
Caracteres comodines:
Ejemplos:
Se busca en la tabla clientes aquellos cuyo nombre comience por Smith, luego
tengan una secuencia de caracteres y terminen en Corp.
Esta consulta busca en la tabla clientes aquellos cuyos nombres comienzan con
Smiths, tiene un carácter luego y después n Corp.
El test LIKE debe aplicarse a columnas con tipo de dato cadenas. Si el valor de
dato en la columna es NULL, el test devuelve el valor NULL.
8
Nuestro ejemplo quedaría:
SELECT num_pedido, producto
FROM pedidos
WHERE producto LIKE ‘A$%BC%’ ESCAPE ‘$’
NOT
SELECT nombres
FROM vededores
WHERE oficina_vend IS NULL
AND
OR
Ejemplo:
9
Hallar los vendedores que están por debajo de la cuota o con ventas inferiores a
30000.
SELECT nombre, cuota, ventas
FROM vendedores
WHERE (ventas < cuota) OR (ventas < 30000)
Los paréntesis en este caso son opcionales, solo se han puesto para claridad de la
expresión.
El estándar especifica que estos operadores tienen la siguiente prioridad: NOT,
AND y OR.
Las tablas de verdad, incluyendo los valores nulos, se muestran en las siguientes
tablas:
NOT
TRUE FALSE
FALSE TRUE
NULL NULL
Las posiciones que están en negritas serían las operaciones donde participan
valores nulos.
10
CONCLUSIONES
Sentencia SELECT
Condiciones de búsqueda:
Test de comparación
Test de rango
Test de pertenencia a conjuntos
Test de concordancia con patrón
Test de valores nulos
Bibliografía:
Del Texto señalado: Capítulo 6 (página 83 – 112).
Ejercicios:
1. Listar las oficinas de ventas con sus objetivos y ventas reales.
2. Listar las oficinas de ventas de la región Este con sus objetivos y ventas.
3. Listar las oficinas de ventas de la región Este cuyas ventas exceden a sus objetivos.
4. Listar los nombres, oficinas y fechas de contrato de todos los vendedores.
5. ¿Cuál es el nombre, cuota y ventas del empleado número 107?
6. Listar el nombre y fecha de contrato de cualquier vendedor cuyas ventas sean
superiores a 500 000.
7. Listar todos los nombres de los vendedores, sus cuotas y directores.
8. Mostrar que sucederá si se eleva la cuota de cada vendedor en un 3% de sus ventas
anuales
9. Muestra los empleados dirigidos por Bob Smith (empleado 104).
10. Halla los vendedores contratados antes de 1988.
11. Listar las oficinas cuyas ventas están por debajo del 80% del objetivo.
12. ¿Cuál es el nombre y el límite de crédito del cliente número 2107?
13. Listar los pedidos cuyos importes están entre 30000 y 40000.
14. Listar los pedidos obtenidos por los vendedores 107, 109, 101 y 103.
15. Listar todos lo vendedores cuyos nombres comience con B.
16. Listar todos los productos del fabricante QSA cuyo identificador comience por XK.
17. Listar los vendedores a los que se ha asignado oficina.
18. Hallar todos los vendedores que están pro debajo de la cuota, pero cuyas ventas no
son inferiores a 150000.
11