Renombrar las columnas, utilizando AS
Podemos cambiar el nombre a las
columnas. Así, la llamada a un id se muestra siempre como id en el resultado.
Podemos cambiarle el nombre:
SELECT empleado.id AS id_persona, departamento.id AS id_departamento FROM empleado
JOIN departamento ON empleado.id = departamento.id_pertenece;
Después del nombre de la columna,
por ejemplo, empleado.id, utilizamos la nueva palabra clave AS y ponemos el
nuevo nombre después de ella (id_persona). Podemos repetir este proceso con
todas las columnas.
El nuevo nombre solo es un alias,
lo que significa que es temporal y no cambia el nombre real de la columna en la
base de datos. Solo influye en cómo la columna se muestra en el resultado de
dicha consulta. Esta técnica se suele utilizar cuando hay varias columnas con
el mismo nombre que proceden de diferentes tablas. Normalmente, cuando SQL
muestra las columnas en el resultado, no hay información sobre las tablas de
las que forman parte cada una de ellas.
En nuestro ejemplo, teníamos dos
columnas id, así que, las renombramos como id_persona e id_departamento,
respectivamente. Si ahora vemos las columnas en el resultado, sabremos a qué
tabla pertenece cada columna.
Filtrar tablas combinadas
Vamos a ver cómo filtrar aún más
los resultados:
SELECT empleado.id,
departamento.nombre FROM empleado JOIN departamento ON empleado.id = departamento.id_pertenece WHERE empleado.edad
< 25;
La cláusula WHERE sirve para
filtrar las filas en las que el propietario sea menor de 25 años. Es necesario
asegurarse de que se incluye el nombre de la tabla en la condición (empleado.edad).
Ordenar filas con ORDER BY
La secuencia en la que aparecen
las filas es arbitraria, y cada base de datos puede comportarse de forma
diferente. Incluso se puede ejecutar la misma instrucción de SQL varias veces y
obtener un orden diferente cada vez, salvo que se pida a la base de datos que
ordene las filas, obviamente.
SELECT * FROM pedidos ORDER BY
id_cliente;
SELECT * FROM pedidos WHERE
id_cliente = 100 ORDER BY importe_total;
SELECT * FROM empleados WHERE
fecha = 2011 ORDER BY salario;
SELECT * FROM pedidos ORDER BY
importe_total ASC;
También podemos invertir el orden
y hacer que los valores más altos aparezcan primero.
SELECT * FROM pedidos ORDER BY importe_total
DESC;
SELECT * FROM empleados ORDER BY
apellido DESC;
Ordenar en base a varias columnas
Los resultados se pueden ordenar
en base a más de una columna y, cada una de ellas, puede estar ordenada de
forma diferente:
SELECT * FROM pedidos ORDER BY
id_cliente ASC, importe_total DESC;
Como se puede ver, los resultados
se ordenarán, primero, en orden ascendente (los valores más bajos primero)
según la columna id_cliente y, luego, para cada id_cliente, los pedidos se
ordenarán en orden descendente (los valores más grandes primero) según la
columna importe_total.
Resultados duplicados
De forma predeterminada, la base
de datos devuelve todas las filas que coinciden con los criterios
especificados. Esto es lo que normalmente queremos, pero hay casos en los que
podemos querer cambiar este comportamiento.
Imagina la siguiente situación:
queremos obtener los números de cliente de todos los clientes que alguna vez
hayan hecho un pedido. Podríamos utilizar la siguiente query:
SELECT id_cliente FROM pedidos;
¿Cuál es el problema del código
en este caso?
Hay muchas filas con el mismo id_cliente,
por lo que cada cliente aparece muchas veces en los resultados.
En nuestro ejemplo de pedidos, si
un cliente hubiera hecho muchos pedidos, el ID de ese cliente se mostraría
muchas veces en los resultados. Para ello hacemos:
SELECT DISTINCT id_cliente FROM
pedidos;
Antes del nombre de la columna,
hemos añadido la palabra DISTINCT. Ahora, la base de datos eliminará los duplicados
y solo mostrará los valores únicos. Cada id_cliente aparecerá solo una vez.
Seleccionar valores únicos de varias columnas
También se puede utilizar
DISTINCT en un grupo de columnas. Observa el siguiente código:
SELECT DISTINCT id_cliente,
fecha_de_pedido FROM pedidos;
Un cliente puede hacer muchos
pedidos cada día, pero si solo queremos saber en qué días cada cliente hizo al
menos un pedido, la consulta anterior nos dará el resultado que deseamos.
COUNT Contar las filas
Es posible calcular las estadísticas
de varias filas. Esta operación se llama agregación.
SELECT COUNT(*) FROM empleados;
En lugar del asterisco (*), que
significa "todo", ponemos la expresión COUNT(*).
COUNT(*) es una función. Las
funciones de SQL siempre tienen un nombre seguido de un paréntesis. En los
paréntesis, se puede poner la información que la función necesita para
funcionar. Por ejemplo, COUNT() calcula el número de filas especificado en el
paréntesis.
En este caso, utilizamos
COUNT(*), que significa "contar todas las filas". Como resultado,
solo obtendremos la cantidad total de filas que tiene la tabla empleados, en
vez de su contenido.
Contar las filas e ignorar los valores NULL
Podemos pedir a la base de datos
que cuente los valores de una columna específica, por ejemplo, de la siguiente
manera:
SELECT COUNT(id_empleado) FROM empleados;
¿Cuál es la diferencia entre
COUNT(*) y COUNT(id_empleado)? Pues, la primera opción cuenta todas las filas
de la tabla y, la segunda, cuenta todas las filas en las que la columna
id_cliente tiene un valor que no sea nulo. En otras palabras, si hay un NULL en
la columna id_cliente, esa fila no se contará.
Contar los valores únicos de una columna
También podemos añadir la palabra
clave DISTINCT a nuestra función COUNT() de la siguiente manera:
SELECT COUNT(DISTINCT id_cliente)
AS clientes_unicos FROM pedidos;
Esta vez, contamos todas las
filas que tienen valores distintos en la columna id_cliente. En otras palabras,
esta instrucción nos dice cuántos clientes diferentes hicieron un pedido hasta el
momento. Si un cliente realizó 5 pedidos, solo se contará una vez.
Obtener los valores mínimo y máximo
SELECT MIN(importe_total) FROM
pedidos;
La función MIN(importe_total)
devuelve el valor más pequeño de la columna importe_total. Así, podemos saber
el pedido más barato de nuestra tabla.
También, se puede utilizar una
función similar llamada MAX(), que devuelve el valor más alto de la columna
especificada.
Obtener el promedio
SELECT AVG(importe_total) FROM
pedidos WHERE id_cliente = 100;
La función AVG() devuelve el
promedio de la columna especificada.
En el ejemplo de arriba se
obtiene el promedio del pedido del cliente con id 100.
Obtener la suma
SELECT SUM(importe_total) FROM
pedidos WHERE id_cliente = 100;
La instrucción anterior devolverá
la suma total de los importes todos los pedidos realizados por el cliente con
id 100.
No hay comentarios:
Publicar un comentario