Contenido
1 CONSULTAS SIMPLES. LA SENTENCIA SELECT
1.5 Ejercicios consultas
simples
1.6 Soluciones
ejercicios consultas simples
2.5 Soluciones
ejercicios multitabla
3.3 Determinación de los
valores mínimos y máximos (MIN, MAX)
3.4 Ejercicios consultas
sumarias
3.5 Soluciones consultas
sumarias
La
sentencia SELECT es de mucho la más compleja y potente de las sentencias SQL,
también es considerada como la “reina” del SQL.
Empezaremos
por ver las consultas más simples, basadas en una sola tabla, para pasar en el
siguiente punto consultas utilizando varias tablas.
Las
consultas más sencillas solicitan columnas de datos de una única tabla, en este
tipo de columnas sólo aparece la cláusula FROM.
La
lista de columnas que queremos que aparezcan en el resultado es lo que llamamos
lista de selección y se especifica delante de la cláusula FROM. Las columnas se
pueden especificar mediante su nombre simple o nombre cualificado (con el
nombre de la tabla seguido de un punto) es obligatorio utilizar el nombre
cualificado cuando el nombre de columna aparece en más de una tabla.
Listar nombres, oficinas, y fechas de
contrato de todos los vendedores.
SELECT
nombre, oficinarep, contrato
FROM
repventas
El Access
permite definir un nombre de columna alternativo denominado alias de columna,
indica mediante la cláusula AS.
Ejemplo:
SELECT
num-clie, empresa AS nombre
FROM
clientes
FROM
oficinas
En
lugar de indicar todas las columnas de la tabla, se puede utilizar el carácter
de sustitución *.
La sentencia SELECT puede contener o bien una
selección de todas las columnas, o bien una lista de selección, pero no ambas,
sin embargo otras implementaciones permiten combinar el asterisco con otros
elementos de la lista (el estándar ANSI/ISO tampoco lo permite). En ACCESS sí
podemos combinar el * con columnas.
Mostrar todos los datos de la tabla oficinas.
SELECT
*
FROM
oficinas
Obtener todos los datos de oficinas y
el importe de ventas por encima o debajo del objetivo.
SELECT
*, (ventas-objetivo)
FROM
oficinas
Devuelve
la n primeras filas. Bla bla bla…
Condiciones
de búsqueda compuestas.
Tablas
de verdad de los operadores con el valor NULL según norma ANSI/ISO:
AND TRUE FALSE NULL
TRUE TRUE FALSE NULL
FALSE FALSE FALSE NULL
NULL NULL NULL NULL
1.
Obtener todos los productos cuyo precio exceda de 2.000 pts. o que
se haya vendido en un pedido más de 30.000 pts. del producto. Solucion1
2.
Lo mismo pero agrupado por producto y dentro de producto por
fabricante. Solucion2
3.
Listar los productos que no aparezcan en ningún pedido. Solucion3
SELECT idfab, idproducto
FROM productos
WHERE
precio > 2000
UNION
SELECT fab,
producto
FROM
pedidos
WHERE importe > 30000
SELECT idfab, idproducto
FROM productos
WHERE
precio > 2000
UNION
SELECT fab,
producto
FROM
pedidos
WHERE
importe > 30000
ORDER BY 2,1
SELECT id-fab, id-producto
FROM productos
MINUS
SELECT
DISTINCT fab, producto
FROM
pedidos
Antes
de hablar de las consultas multitabla propiamente dichas, veamos unas
operaciones que se puede realizar con
consultas, y que permite obtener datos utilizando varias tablas.
Aparecen
en la tabla resultante las filas de la primera sentencia SELECT que no aparecen
en la segunda.
Si se
especifica ALL, el sistema devuelve todas las filas resultante de la unión
incluidas las repetidas, si no se indica ALL, el sistema elimina repeticiones.
La
unión tiene las mismas restricciones que los operadores anteriores.
Muchas
consultas útiles necesitan datos de dos o más tablas en la base de datos.
Cuando queremos combinar tablas distintas no podemos utilizar las operaciones
anteriores (necesitan el mismo esquema), para ello tenemos lo que llamaremos la
composición de tablas.
1. Listar los vendedores y las oficinas
en las que trabajan.
2. Listar las oficinas y los nombres y
títulos de sus directores.
3. Listar todos los pedidos, mostrando
los importes y las descripciones del producto.
4. Listar los pedidos superiores a 25.000
pts, incluyendo el nombre del vendedor que tomó el pedido y el nombre del
cliente que los solicitó.
1. SELECT numemp, nombre, oficina, ciudad
FROM
oficinas RIGHT JOIN repventas
ON oficinas.oficina = repventas.oficinarep
2. SELECT numpedido, importe, empresa,
limitecredito
FROM pedidos INNER JOIN clientes ON
pedidos.clie=clientes.num.clie;
3. SELECT numemp, nombre, ciudad, region
FROM
oficinas RIGHT JOIN repventas
ON oficinas.oficina =
repventas.oficinarep;
4. SELECT oficina, ciudad, nombre, titulo
FROM
oficinas LEFT JOIN repventas ON oficinas.dir = repventas.numemp;
Aquí va
la descripción de la consulta de resumen y las definiciones básicas.
La
función SUM() calcula la suma de los valores en una columna de datos. Los datos
de la columna deben ser de tipo numérico (entero, decimal, coma flotante o
monetario). El resultado será del mismo tipo aunque puede tener una precisión
mayor.
Las
funciones MIN y MAX determinan los valores menores y mayores respectivamente.
Los valores de la columna pueden ser numéricos, de cadena o de fecha. El
resultado de la función tendrá el mismo tipo de dato.
La
condición de búsqueda sufre restricciones derivadas de la definición de HAVING,
la condición debe ser aplicable a un grupo de filas no a una fila determinada
de la tabla origen. Es decir:
·
Una constante
·
Una función de agrupación
·
Una columna de agrupación
Una expresión basada en las anteriores.
Ejercicios consultas sumarias
1. Saber cuántas oficinas tienen
vendedores que superan su cuota.
2. Calcular el importe medio de los
pedidos realizados por el cliente 2103.
3. Hallar las cuotas mínima y máxima de
los representantes.
4. Hallar en qué fecha se realizó el
primer pedido.
1.
SELECT COUNT(DISTINCT
oficina-rep)
FROM repventas
WHERE ventas > cuota
2. SELECT AVG(cuota), AVG(ventas)
FROM repventas
3. SELECT 100 * AVG(ventas/cuota)
FROM repventas
4. SELECT SUM(cuota), SUM (ventas)
FROM repventas