Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Realización de consultas.
Caso práctico
En la unidad anterior Alejandra ha dejado
lista la base de datos que le encargaron en
Talleres Faber para empezar a introducir la
información en las tablas, de forma que se
pueda acceder a los datos como si de una
sola tabla se tratara. En este momento ha
acabado la primera parte de su proyecto y
quiere mostrar el resultado.
Por lo que has estudiado en unidades anteriores, conoces las ventajas que ofrece
un SGBD, pero también sabes que si no conocemos la forma de relacionarnos con
la base de datos, la información puede estar “disponible” pero no podremos
acceder a ella.
1 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
El siguiente paso sería introducir los datos en las tablas, pero para
facilitar la comprensión del proceso vamos a partir de una base de datos
ya creada y que contenga información. Explicaremos a continuación
como hacer consultas en ella, tanto desde herramientas gráficas como
utilizando el lenguaje SQL.
2 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Caso práctico
Alejandra sabe que para
conseguir el acceso a los
datos es muy importante
conocer bien:
Pues bien, vamos a revisar con ella las herramientas gráficas que se
utilizan con algunos SGBD muy conocidos como: asistentes para
realizar consultas, entornos para introducir consultas en modo diseño,
editores para crear nuestras sentencias en SQL etc.
3 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Autoevaluación
De las siguientes aplicaciones ¿alguna es una herramienta gráfica
para realizar consultas en MySQL? Selecciona la opción correcta.
No es la respuesta acertada.
Solución
1. Incorrecto
2. Incorrecto
3. Incorrecto
4. Opción correcta
5. Incorrecto
4 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Estos asistentes son aplicaciones que nos permiten seleccionar las tablas, los
campos, el orden de las filas, establecer criterios de selección, grupos y
cálculos, etc., siguiendo unos pasos muy sencillos.
Tanto en los propios SGBD como en aplicaciones que se pueden instalar para
aumentar las prestaciones y que son externas al SGBD, podemos encontrar
herramientas gráficas para diseñar consultas mediante opciones como:
5 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
6 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
7 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Recomendación
Te recomendamos que visites el siguiente enlace donde aparecen
varios editores de SQL muy interesantes y la descripción completa de
cada uno de ellos. ¡No te lo pierdas!
Editores SQL.
8 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Caso práctico
En este punto Alejandra se dispone
a trabajar con el lenguaje de
manipulación de datos (LMD), y
dentro de él comenzará por las
instrucciones que le van a permitir
hacer consultas a los datos
contenidos en Talleres Faber.
LDD
Incluye sentencias para gestionar las.
(Lenguaje de Definición de
estructuras
Datos)
LMD
(Lenguaje de Manipulación de Incluye sentencias para gestionar los datos.
Datos)
LCD
Incluye sentencias para gestionar la seguridad
(Lenguaje de Control de
y los permisos.
Datos)
9 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Pues bien, ahora vamos a tratar con el LMD que es una parte del lenguaje SQL que
se encarga de la gestión de los datos almacenados. El LMD tiene instrucciones para
ayudarnos a:
Sin ninguna duda, la operación que más veces se realiza sobre una base
de datos es la consulta.
Reflexiona
Tanto en el LDD, como en el LMD existen sentencias que nos
permiten Modificar o Borrar. La diferencia está en que cuando
tratamos con el Lenguaje de definición de datos, las instrucciones de
modificación y/o borrado afectan a la estructura de la base de datos:
tablas, columnas, índices, etc.; es decir, a los objetos que la
componen.
Autoevaluación
Siguiendo la reflexión del párrafo anterior, de la siguiente lista,
¿Cuál crees que sería la diferencia entre la instrucción DROP que
ya conoces y que pertenece al LDD y la instrucción DELETE que
pertenece al LMD?
10 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Solución
1. Incorrecto
2. Opción correcta
3. Incorrecto
11 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Caso práctico
Como hemos visto, las
herramientas gráficas nos
ofrecen una gran ayuda a
la hora de enviar consultas
a nuestra base de datos.
Pero sin duda para tener
mayor control sobre
cualquier SGBD, y en
concreto sobre las
consultas a los datos que
almacena, Alejandra
piensa que lo más seguro
es conocer las instrucciones de SQL que integran el LMD.
Utilizaremos esta sentencia para consultar los datos de una base de datos. En la
sentencia SELECT el usuario especifica lo que quiere obtener, no cómo, ni
dónde.
Como hemos dicho presenta muchas opciones. Las más comunes son:
SELECT
[ALL | DISTINCT | DISTINCTROW ]
{Expresión | Columna1, ... | * }
FROM TablasReferenciadas
12 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
[WHERE Condiciones]
[GROUP BY {NombreColumna | Expresión | Posición} [ASC | DESC], …]
[HAVING Condiciones]
[ORDER BY { NombreColumna | Expresión | Posición } [ASC | DESC] , ...]
[LIMIT { [desplazamiento,] contador | contador OFFSET desplazamiento}
]
Para realizar una consulta a una o varias tablas con esta sentencia es
imprescindible utilizar al menos las palabras:
NombreTabla.NombreColumna
NombreBaseDeDatos.NombreTabla
13 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Autoevaluación
Contesta si es verdadera o falsa la siguiente afirmación:
Sugerencia
Verdadero Falso
Falso
Debe respetarse el orden de las cláusulas definido en la sintaxis.
14 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
FROM
Esta cláusula permite indicar las tablas o vistas de las cuales vamos a obtener la
información, escribiendo sus nombres separados por comas si se trata de más de
una tabla. De momento, veremos ejemplos para obtener información de una sola
tabla.
Alias de columnas:
El encabezado de las columnas que aparece en las consultas, es el nombre de la
columna o campo correspondiente. Si éste resulta demasiado largo o es el
resultado de un cálculo, se puede cambiar usando un alias de columna. Es
posible asignar un alias a cualquiera de las expresiones SELECT.
Para ello, se escribe tras el nombre de columna la cláusula AS seguida del nuevo
nombre que va a aparecer en el encabezado entre comillas, aunque esta palabra es
opcional.
Ejemplo:
Alias de tablas:
Un alias se puede utilizar también para asociar un nuevo nombre a una tabla. Se
trata de un nombre, generalmente más corto, que se utiliza sobre todo cuando
consultamos varias tablas y hay nombres de columnas que coinciden.
15 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Columnas calculadas:
Una consulta en SQL puede incluir columnas cuyos valores se obtienen haciendo
cálculos a partir de los datos almacenados en las columnas de las tablas. Cuando
queremos mostrar el resultado de la columna calculada dentro de SELECT es
conveniente utilizar un alias de columna para evitar que se incluya como cabecera
la propia función u operación realizada.
WHERE
Permite obtener los datos de las filas que cumplen con la condición expresada. Tras
WHERE se escribe una expresión de tipo relacional o de comparación que usará
alguno de los operadores relacionales y lógicos que veremos después.
FROM Nombre_Tabla_Vista
WHERE Condiciones
16 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
17 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
ALL
Permite que se puedan presentar todas las filas afectadas por el resto de
condiciones de la consulta aunque algunas estén repetidas. Es la opción por
defecto.
DISTINCT y DISTINCTROW
Cuando seleccionamos algunas columnas de una o varias tablas pueden mostrarse
valores de filas repetidos.
Esta cláusula permite que se puedan presentar todas las filas afectadas por el resto
de condiciones de la consulta pero las repetidas aparecen sólo una vez.
GROUP BY
Es posible agrupar las filas que devuelve una consulta según los valores de una
columna, usando la cláusula GROUP BY. Aunque en algunos casos podríamos
hacer esto mismo usando la opción DISTINCT, esta cláusula es más potente y
presenta las siguientes diferencias:
18 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
duplicadas.
Permite usar funciones de resumen o reunión. Por ejemplo: COUNT(), SUM(),
MAX(), MIN(), AVG(), STD(), VARIANCE().
Estas funciones también se pueden usar sin la cláusula GROUP BY siempre que en
la consulta no se seleccionen otras columnas. Estas consultas se denominan
consultas de resumen y las veremos en esta unidad.
Esta cláusula, combinada con las funciones anteriores, permite hacer cálculos
sobre una serie de filas agrupadas. A estas consultas las denominaremos consultas
agrupadas y se verán en un apartado posterior.
HAVING
Permite hacer selecciones en situaciones en las que no es posible usar WHERE. La
cláusula WHERE no se puede aplicar a columnas calculadas mediante las
funciones de reunión que hemos mencionado en el apartado anterior. Tanto la
cláusula GROUP BY como HAVING se tratarán más adelante en las consultas
agrupadas.
LIMIT
Permite limitar el número de filas devueltas. Se suele utilizar para no sobrecargar
demasiado al servidor o a la aplicación que va a recibir los resultados de la
consulta.
19 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Ejercicio resuelto
Queremos consultar la referencia, descripción e importe de las 10
actuaciones más baratas que se pueden llevar a cabo en nuestro
taller.
20 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Mostrar retroalimentación
Autoevaluación
Contesta si esta afirmación es verdadera o falsa.
Sugerencia
Verdadero Falso
Verdadero
Cierto. Un mismo vehículo puede haber sufrido varias
reparaciones por la misma avería (Ejemplo pinchazo de una
rueda).
21 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
4.- Operadores.
Caso práctico
Una vez vistas las cláusulas que
pueden intervenir en una consulta,
Alejandra considera importante
conocer también los operadores que
se pueden usar dentro de las
expresiones en el SGBD que está
utilizando, en este caso MySQL, y que
le ayudarán, entre otras cosas, a
establecer condiciones de búsqueda básicas.
Con el lenguaje SQL podemos utilizar muchos operadores diferentes para cada
tipo de columna. Veremos los operadores de que dispone MySQL, pero la mayoría
de ellos son compatibles con otros SGBD.
Los operadores sirven para obtener nuevos datos a partir de los ya existentes.
Se pueden utilizar con números, cadenas de caracteres, fechas, campos booleanos,
binarios, etc.
Una expresión es una combinación de operadores y operandos (como campos,
constantes, variables, funciones y otras expresiones) que se combinan unos con
otros.
22 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Debes conocer
Para consultar el orden de prioridad de los operadores disponibles en
MySQL pincha en el siguiente enlace:
Reflexiona
En caso de que tengas que combinar varios operadores en una misma
expresión es aconsejable que utilices tantos paréntesis como
consideres necesario para que éstos se evalúen en el orden que te
interese. De este modo evitarás sorpresas desagradables.
23 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
24 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Con SET
Ejemplo: SET @hoy= CURRENT_DATE();
SELECT @hoy;
(Veremos la fecha actual)
Una variable sin asignar será de tipo cadena y su valor será NULL.
Operadores aritméticos:
Operador Significado
25 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Los operadores de mayor prevalencia son los aritméticos, y entre ellos, el orden de
prevalencia es:
1. Exponenciación.
2. Operadores de signo.
3. Multiplicación y división.
4. Suma y resta.
26 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Autoevaluación
Calcular el resultado de la siguiente expresión: SELECT
(3*3+20)^2/5
168.2
6,2000
952,2
3,84
Solución
1. Opción correcta
2. Incorrecto
3. Incorrecto
4. Incorrecto
27 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Operador Significado
< Menor.
> Mayor.
Funciona como =, salvo que si una de las dos expresiones o las dos
< => es nula, el resultado no es NULL. Si se comparan dos expresiones
nulas, el resultado es verdadero (1).
28 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Autoevaluación
De las siguientes consultas selecciona las que estén enunciadas
correctamente:
Mostrar retroalimentación
29 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Solución
1. Correcto
2. Incorrecto
3. Incorrecto
4. Correcto
30 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Solo existen dos valores posibles para los resultados: verdadero y falso, pero
MySQL añade un tercer valor: desconocido para poder trabajar con valores NULL.
1 TRUE
0 FALSE
desconocido NULL
Operador Función
AND ó Devuelve el valor TRUE cuando las dos condiciones son verdaderas
&& y FALSE si alguna de ellas es falsa.
1. Operadores de comparación
2. Operador NOT
3. Operador AND
4. Operador OR
Al igual que todos los operadores binarios que veremos, estos operadores se
pueden asociar, es decir, se pueden crear expresiones como
A AND B AND C
31 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Ejercicio resuelto
Consultar las matrículas de los vehículos que hayan entrado a
reparar en 2017 con menos de 100000 Km y que hayan salido del
taller sin reparar:
Mostrar retroalimentación
32 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Comodín Significado
BETWEEN
33 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Reflexiona
Observa la diferencia entre las dos soluciones del ejemplo anterior:
IN, NOT IN
Reflexiona
¿Cómo buscaríamos en una cadena el carácter % ó el _?
Mostrar retroalimentación
34 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
35 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Caso práctico
En este punto Alejandra se plantea
revisar el tratamiento que se hace
en los SGBD de los valores nulos.
Ella sabe que no es lo mismo que un
campo contenga el valor nulo o que
contenga un cero.
Datos y nulos
Un valor nulo es un valor que no es asignable a ningún tipo de datos y que significa
que no se ha definido ningún valor inicial para ese dato, es decir que el valor de ese
dato es desconocido.
NombreColumna IS NULL
Por el contrario, para comprobar si en una columna hay algún valor, se emplea la
expresión:
36 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Debes conocer
Los operadores aritméticos con valores nulos devuelven un valor nulo.
Cuando comparamos con valores nulos o no nulos no podemos
utilizar los operadores de igualdad mayor o menor.
Autoevaluación
Marca en la siguiente lista los datos que contienen un valor null:
Mostrar retroalimentación
Solución
37 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
1. Incorrecto
2. Correcto
3. Correcto
4. Incorrecto
38 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
6.- Funciones.
Caso práctico
Alejandra ha reunido información
sobre los distintos tipos de
operadores que pueden intervenir en
las consultas SQL. A menudo estos
operadores intervienen en expresiones
construidas también con funciones, por
eso considera importante consultar la
documentación relativa a las funciones
que podrían ser de utilidad. Dado que MySQL dispone de multitud
de funciones no considera necesario conocerlas todas. Siguiendo
sus pasos nos conformaremos con agruparlas por tipos y ver las más
comunes. Para el resto de funciones incluiremos el enlace
correspondiente.
Las funciones se usan dentro de expresiones y actúan sobre los valores de las
columnas de las tablas, con variables o con constantes. Se utilizan en cláusulas
SELECT, WHERE y ORDER BY.
Funciones aritméticas:
39 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
REPLACE(c, b, s): Sustituye en la cadena “c” el valor buscado “b” por el valor
indicado en “s”.
En MySQL existen numerosas funciones para trabajar con las fechas y las
horas.
Por defecto el formato de almacenamiento de las fechas es AAAA-MM-DD y
de las horas HH:MM:SS pero existen muchas funciones que nos permiten
descomponer la fecha y la hora, obtener la fecha y hora actuales, etc.
40 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
DATEADD(f, n, d): Devuelve una fecha “n” periodos (días, meses años, según lo
indicado) superior a la fecha “d”. Si se le pasa un número “n” negativo, devuelve
una fecha “n” periodos inferior. De gran utilidad en consultas.
Funciones de comparación:
Se trata de funciones que comparan los valores de cada una de las columnas en
el interior de una fila para obtener: el menor o el mayor valor de ellos, así como
comprobar si el valor de una columna es nulo.
Debes conocer
En el siguiente documento te presentamos un resumen de las
funciones de cada tipo que se utilizan con más frecuencia en MyQL y
algunos ejemplos de aplicación:
41 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Autoevaluación
La siguiente consulta:
Falso
MONTH devuelve el número del mes de la fecha, no el nombre
del mes.
42 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Caso práctico
Hasta ahora nos hemos dejado
guiar por Alejandra para
aprender a realizar consultas
sencillas que manejaban una
sola tabla. Ha llegado el
momento de realizar consultas
más complejas para obtener
datos de varias tablas. Está claro
que en el diseño de Talleres
Faber intervienen múltiples tablas y que en el trabajo diario con la
base de datos estas consultas van a ser frecuentes. Tendremos
que seguir los pasos de Alejandra para aprender a combinar las tablas
y hacer consultas que muestren los resultados buscados.
En las consultas realizadas hasta ahora sólo hemos utilizado una tabla que se
indicaba a la derecha de la cláusula FROM, pero hay veces que una consulta
necesita columnas de varias tablas.
43 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Consulta multitabla.
Reflexiona
Cuando realizamos consultas a varias tablas y no especificamos
las columnas por las que se relacionan, el resultado de la consulta
es el producto cartesiano, tal y como hemos explicado. Este
resultado casi siempre será un error. En muy pocos casos nos interesa
mezclar filas de una tabla con filas de otra, sin ningún criterio para
establecer esa combinación.
Autoevaluación
Observa la siguiente consulta y elige la opción correspondiente
de la lista:
44 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
No tiene errores.
Las tablas no están relacionadas correctamente en la cláusula
WHERE.
No se pueden consultar esas 3 tablas por no estar relacionadas.
Error en la cláusula FROM.
Las columnas seleccionadas no corresponden a las tablas
relacionadas. Error en SELECT.
Solución
1. Opción correcta
2. Incorrecto
3. Incorrecto
4. Incorrecto
45 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Caso práctico
Alejandra está reuniendo información
sobre los distintos tipos de consulta
que se pueden realizar sobre las
tablas de la base de datos Talleres
Faber. En este momento veremos
cómo obtener resúmenes de los datos
aplicando sobre las columnas una serie
de funciones de grupos. Estas
funciones van a permitir calcular, por ejemplo, el precio medio de los
recambios, el número de vehículos que visitan el taller en un mes, el
tiempo máximo que dura una reparación, etc.
Las funciones de grupos de valores ignoran los valores nulos a la hora de realizar
los cálculos.
FUNCIONES DE
Descripción
COLUMNA
MIN(Expresión o
Obtiene el valor mínimo del argumento indicado.
46 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Columna)
MAX(Expresión o
Obtiene el valor máximo del argumento indicado.
Columna)
47 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Reflexiona
¿De qué forma intervienen las cláusulas COUNT Y DISTINCT en
ambas?
Mostrar retroalimentación
Ejercicio resuelto
Realiza las siguientes consultas a las tablas de TalleresFaber:
Mostrar retroalimentación
48 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
49 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Caso práctico
Cuando hemos recorrido con Alejandra
las cláusulas de la sentencia SELECT,
hemos visto que podíamos utilizar
GROUP BY para agrupar filas y
HAVING para establecer condiciones
en las filas agrupadas. Combinando
estas cláusulas con las funciones de
grupo del apartado anterior. Alejandra
piensa que podrá encontrar soluciones a cuestiones que hasta
ahora no podía resolver y que pueden ser útiles.
Si queremos saber, por ejemplo, ¿cuántos coches de cada marca han visitado
nuestro taller? Hasta ahora lo que podíamos hacer era mostrar las filas de la tabla
automóviles, ordenadas por marca y contar visualmente cuántas filas había por
cada marca, de la siguiente forma:
50 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Del mismo modo que para establecer condiciones de búsqueda para filas
individuales se utiliza WHERE, para establecer condiciones de búsqueda para
grupos de filas se utiliza HAVING. La cláusula HAVING se emplea para evaluar
condiciones sobre las filas que devuelve GROUP BY.
Ejercicio resuelto
Obtener la media de horas empleadas en cada tipo de actuación,
mostrando únicamente aquéllas cuya media no sea inferior a una
hora.
51 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Mostrar retroalimentación
52 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Caso práctico
En este apartado vamos a aprender a diseñar un tipo de consultas
que puede ser de gran utilidad en nuestro taller. Alejandra se
encuentra en muchos casos con tablas que, teniendo la misma
estructura, contienen información que se refiere a distintos periodos
de tiempo. Por ejemplo las facturas de los clientes almacenadas en
distinta tabla cada año (facturas_2016, facturas_2017). Alejandra
nos va a mostrar cómo podríamos unir la información que
contienen dos o más tablas en una consulta, para saber, por
ejemplo, la facturación acumulada desde que Talleres Faber inició
su actividad.
El resultado es una tabla con las filas de la primera tabla y las filas de la segunda.
53 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Ejercicio resuelto
Supongamos que tenemos dos tablas de FACTURAS: Una
denominada FACTURAS_2016 con las facturas emitidas ese año y
otra FACTURAS_2017 con las facturas emitidas en este año. Realizar
una consulta de unión entre las facturas de ambas tablas
correspondientes al mes de enero.
54 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Mostrar retroalimentación
Autoevaluación
Recambios_chapa Recambios_mecánica
Verdadero
El nombre de las columnas no tiene porqué coincidir. Es
necesario que los datos sean compatibles.
55 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Caso práctico
Hemos aprendido de la mano de
Alejandra a hacer consultas a los
datos contenidos en varias tablas
combinando las filas, nos hemos
dejado por el camino un tipo de
consultas que pueden ser también de
utilidad en un taller como talleres Faber,
porque permiten mostrar, no sólo los
empleados y las reparaciones en las que han intervenido, sino que se
podrá conocer también los empleados que no hayan intervenido en
ninguna reparación.
Las combinaciones de tablas que hemos visto hasta ahora en consultas multitabla
son “Composiciones o combinaciones internas”. En estas se combina información
procedente de dos o más tablas, formando filas relacionadas según la condición de
búsqueda establecida con WHERE que generalmente es la clave principal de una
tabla y la clave ajena relacionada en la otra tabla.
56 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
relación..
SELECT … FROM NombreTabla1 JOIN NombreTabla2 WHERE
condición de relación..
SELECT ….FROM NombreTabla1 INNER JOIN NombreTabla2
USING(ColumnaRelacionada)..
Reflexiona
Compara las siguientes alternativas para definir combinaciones
internas:
Mostrar retroalimentación
57 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
58 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
59 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Ejercicio resuelto
Obtener un listado de los vehículos registrados en nuestra base
de datos que no hayan sufrido reparaciones.
Mostrar retroalimentación
60 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
12.- Subconsultas.
Caso práctico
Con lo que hemos visto hasta ahora, necesitaríamos hacer dos consultas:
Supongamos que el Importe medio obtenido sea 100. Ahora haríamos la segunda
61 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Las subconsultas permiten escribir estas dos consultas en una, escribiendo tras la
cláusula WHERE otra sentencia SELECT. Así el SELECT principal actúa sobre las
filas devueltas por el SELECT anidado.
La sintaxis será:
La subconsulta entre
paréntesis (subconsulta anidada) se ejecuta primero y el valor extraído se introduce
en la consulta más externa.
Condiciones
Por tanto, son expresiones lógicas a comprobar para la condición de filtro, que
tras su resolución devuelven para cada fila un valor simple, normalmente TRUE o
FALSE, en función de que se cumplan o no. Se puede utilizar cualquier expresión
lógica y en ella utilizar diversos operadores de comparación como:
> (Mayor)
< (Menor)
= (Igual)
<> o != (Distinto)
62 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Son subconsultas que devuelven más de una fila o más de un valor. En ese caso
utilizaremos el operador IN ó NOT IN en la cláusula WHERE.
WHERE
63 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Reflexiona
En la práctica una consulta consume mucho más tiempo y memoria
cuando se incrementa el número de niveles de anidamiento, además
resulta más difícil de leer y de mantener cuando contiene más de dos
niveles de anidamiento.
Ejercicio resuelto
Obtener los nombres de los empleados que no hayan intervenido
en reparaciones desde enero de 2017.
Mostrar retroalimentación
64 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
65 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
Recurso Recurso
Datos del recurso (1) Datos del recurso (2)
(1) (2)
Autoría: Bert23
Autoría: Jeremy Brooks.
www.aerosolplanet.com
Licencia: CC by nc.
Licencia: CC by sa.
Procedencia:
Procedencia:
http://www.flickr.com
http://www.flickr.com
/photos/jeremybrooks
/photos/pjb2332
/1716349656/
/3893043955/
Autoría: Christopher
Autoría: whiteoakart.
Blizzard.
Licencia: CC by nc sa.
Licencia: CC by sa.
Procedencia:
Procedencia:
http://www.flickr.com
http://www.flickr.com
/photos/whiteoakart
/photos/christopherblizzard
/249859836
/4507105483
66 de 67 16/7/16 13:07
Realización de consultas. http://localhost:51235/temp_print_dirs/eXeTempPrintDir_lmvG...
67 de 67 16/7/16 13:07