Contenido

1       CONSULTAS SIMPLES. LA SENTENCIA SELECT.. 2

1.1          Lista de selección. 2

1.2          Alias de campo. 2

1.3          Utilización del *. 2

1.4          La cláusula TOP. 2

1.5          Ejercicios consultas simples. 3

1.6          Soluciones  consultas simples. 3

2       CONSULTAS MULTITABLA.. 4

2.1          El operador MINUS. 4

2.2          El operador UNION.. 4

2.3          LA COMPOSICIÓN DE TABLAS. 4

2.4          Ejercicios multitabla. 4

2.5          Soluciones ejercicios multitabla. 4

3       CONSULTAS DE RESUMEN.. 5

3.1          Definiciones. 5

3.2          Cálculo de una suma (SUM) 5

3.3          Determinación de los valores mínimos y máximos (MIN, MAX) 5

3.4          Ejercicios consultas sumarias. 6

3.5          Soluciones consultas sumarias. 6

 

 


 

1         CONSULTAS SIMPLES. LA SENTENCIA SELECT

 

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.           

 

1.1        Lista de selección

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

 

 

1.2        Alias de campo

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

 

1.3        Utilización del *

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

 

1.4        La cláusula TOP

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.5        Ejercicios consultas simples

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.

 

2.    Lo mismo pero agrupado por producto y dentro de producto por fabricante.

 

3.    Listar los productos que no aparezcan en ningún pedido.

 

1.6        Soluciones ejercicios consultas simples[JOR1] 

 

1.    SELECT idfab, idproducto

      FROM  productos

      WHERE precio > 2000

      UNION

      SELECT fab, producto

      FROM pedidos

      WHERE importe > 30000

 

2.    SELECT idfab, idproducto

      FROM  productos

      WHERE precio > 2000

      UNION

      SELECT fab, producto

      FROM pedidos

      WHERE importe > 30000

      ORDER BY 2,1

 

3.    SELECT id-fab, id-producto

      FROM  productos

      MINUS

      SELECT DISTINCT fab, producto

      FROM pedidos

 


 

2          CONSULTAS MULTITABLA

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.

 

2.1        El operador MINUS

 

Aparecen en la tabla resultante las filas de la primera sentencia SELECT que no aparecen en la segunda.

 

2.2        El operador UNION

 

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.

 

2.3        LA COMPOSICIÓN DE TABLAS

 

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.

 

2.4        Ejercicios MULTITABLA

 

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ó.

2.5        Soluciones ejercicios multitabla[JOR2] 

 

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;

3          CONSULTAS DE RESUMEN

3.1        Definiciones

 

Aquí va la descripción de la consulta de resumen y las definiciones básicas.

 

3.2        Cálculo de una suma (SUM)

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.

 

3.3        Determinación de los valores mínimos y máximos (MIN, MAX)

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.                           

 


3.4        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.

 

3.5        Soluciones consultas sumarias

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

 


 [JOR1]Quitar la palabra ejercicios para que guarde coherencia con los enunciados de las soluciones de otros temas.

 [JOR2]Cambiar a minúsculas.