Skip to the content.

Curso PostgreSQL

Autor: Luis Fernando Apáez Álvarez
Consultas

Sabemos que si utilizamos, por ejemplo, la siguiente sintaxis

SELECT * FROM empleados

se nos mostrará toda la información de nuestra tabla empleados. Es decir, podemos traducir el código anterior a la siguiente instrucción: selecciona todas las columnas de la tabla empleados. De tal manera, cuando colocamos el * después del SELECT estamos dando la instrucción de ver todas las columnas de la tabla. Si sólo quisiéramos ver el nombre completo de los empleados (que abarcan las columnas nombre, app, apm) escribimos

SELECT nombre, app, apm FROM empleados;

De tal manera, se nos mostrarán las columnas que deseemos de una tabla si las colocamos entre el SELECT y el FROM. Si queremos ver todas las columnas de una tabla colocamos entonces el *.

Ahora, podemos ver el resultado particular de una fila de una tabla. Supongamos que deseamos ver la información del empleado cuyo id de trabajador es el 857. Para ello escribimos

SELECT * FROM empleados WHERE id_empleados = 857;

que se “traduce” a : selecciona todas las columnas de la tabla empleados, donde el id_empleados es igual a 857, y nos arroja

Podemos combinar lo aprendido escribiendo algo como

SELECT nombre, app, apm, horario FROM empleados WHERE id_empleados = 7; 

Además, podemos dar un poco de formato a las consultas. Por ejemplo, podemos concatenar columnas. Supongamos que es de nuestro interés ver el nombre completo de un empleado, pero no de la forma como lo hicimos antes, más bien visualizar el nombre completo junto y no en columnas por separado. Para ello usamos

-- Veamos el nombre completo del empleado con id igual a 1

SELECT nombre || ' ' || app || ' ' || apm FROM empleados WHERE id_empleados = 1;

donde los símbolos || indican concatenación, además ' ' hacen alusión a un espacio en blanco. Entonces, estamos concatenando el nombre con un espacio en blanco con el apellido paterno con un espacio con el apellido materno. Notamos que en la salida el nombre de la columna de nuestra consulta resultante es ?column? pues de hecho, en la columna efectuada estamos combinando varias columnas de manera simultánea, por ello postgres coloca de manera automática dicho nombre. Podemos cambiar esto y para ello utilizaremos lo que se conoce como alias.

Alias

Si bien todas las columnas de nuestras tablas poseen un nombre en concreto, cuando realizamos diversas consultas puede que los resultados arrojen nombres de columnas desconocidos, tales como ?column? como el caso de la consulta anterior. Por ende, utilizamos los alias para nombrar o renombrar una o más columnas sólo en la consulta efectuada. Es decir, si consideramos la columna nombre de la tabla empleados, podemos utilizar un alias para renombrarla, digamos Nombres, no obstante, dicho renombre sólo será válido en la consulta que efectuemos, pues la etiqueta nombre siempre será asociada a dicha columna y no Nombres. De tal manera, puede pensarse a un alias como un nombre o renombre temporal.

Por ejemplo, de la consulta anterior podemos asignarle un alias a la columna ?column? como sigue

SELECT nombre || ' ' || app || ' ' || apm AS nombre_completo 
	FROM empleados WHERE id_empleados = 1;

es decir, después de colocar la concatenación de las columnas hemos escrito AS seguido del alias que queremos asignarle a dicha columna. Notemos que, si volvemos a efectuar la consulta

SELECT nombre || ' ' || app || ' ' || apm FROM empleados WHERE id_empleados = 1;

nuevamente el nombre de la columna resultante de la consulta será ?column?.

Operador WHERE

Hemos visto anteriormente que WHERE nos permite seleccionar una fila en particular de una tabla. Por ejemplo, podemos ver todas las ventas en las que intervino el empleado con id igual a 1, esto es

SELECT * FROM ventas WHERE id_empleado = 1;

Ahora bien, podemos utilizar WHERE no sólo asociándole el símbolo de igualdad (id_empleado = 1), de hecho, podemos utilizar WHERE con más símbolos de comparación. Por ejemplo, podemos ver todas las ventas en las cuales se vendieron más de 20 artículos

SELECT * FROM ventas WHERE cantidad > 20;

donde vemos las primeras ocho filas y las últimas 7. En total tenemos que hay 80 ventas en las cuales se vendieron más de 20 artículos. Así como se utilizó el operador > podemos usar <, <= y >=. Adicionalmente tenemos el operador distinto (<>), por ejemplo podemos hallar todas las ventas cuya cantidad sea distinta de 20:

SELECT * FROM ventas WHERE cantidad <> 20;
OperadorBETWEEN

Podemos traducir la palabra between al español como entre. Lo anterior nos dice cómo funciona el operador BETWEEN, pues podemos hallar ciertos valores comprendidos entre un rango de valores. Para utilizar la sentencia BETWEEN nos auxiliaremos también de la sentencia WHERE. Por ejemplo, podemos hallar todas las ventas en las cuales se han vendido entre los productos 8 y 20:

SELECT * FROM ventas WHERE id_producto_vendido BETWEEN 8 AND 20;

que se traduce como: selecciona todas las ventas de la tabla ventas donde el id_producto_vendido está entre los valores 8 y 20

De forma similar podemos utilizar la sentencia NOT BETWEEN. Por ejemplo, si queremos hallar los empleados que no ganan entre los 10000 y 40000 escribimos

SELECT * FROM empleados WHERE salario NOT BETWEEN 10000 AND 40000;

(sólo mostramos las primeras 8 filas, pero la consulta arrojó más)

Operador LIKE

El operador LIKE nos permite realizar comparaciones exclusivas de cadenas de texto. Recordemos que en consultas como

SELECT * FROM empleados WHERE nombre = 'Luis';

al emplear nombre = 'Luis' estamos realizando una búsqueda exacta. Es decir, si fuera el caso que en nuestra tabla empleados tenemos un empleado con nombre 'Lui' (que probablemente fue mal ingresado a la tabla empleados), la consulta anterior no nos mostraría a dicho empleado. Ahora bien, el operador LIKE nos permite realizar búsquedas no exactas, es decir, nos permite comparar porciones de cadenas.

Por ejemplo, en la tabla empleados, tenemos que el nombre de dos empleados comienzan con Lui, estos son

Así, si nosotros escribiéramos

SELECT * FROM empleados WHERE nombre = 'Lui';

el resultado de la consulta anterior sería vacía, es decir, no nos mostraría nada. Lo anterior debido a que estamos efectuando una búsqueda exacta. En cambio, al realizar una búsqueda que compare porciones de cadena podemos hallar a todos aquellos empleados cuyos nombres comiencen con Lui y nos arrojen a los empleados que mostramos antes. Para ello escribimos

SELECT * FROM empleados WHERE nombre LIKE 'Lui%';

donde hemos colocado % después de 'Lui pues estamos indicando que después de dicha palabra pueden variar los caracteres, como es el caso de Luis y Luise. Entonces, podemos colocar '%is' después del LIKE para buscar todos aquellos nombres de los empleados que terminen en is

SELECT * FROM empleados WHERE nombre LIKE '%is';

También, podemos buscar todos aquellos nombres de los empleados que contienen en su nombre la palabra arris, como por ejemplo Farris:

SELECT * FROM empleados WHERE nombre LIKE '%arris%';

Otros ejemplos. Podemos hallar todos los nombres de los empleados que comienzan con la letra N

SELECT * FROM empleados WHERE nombre LIKE 'N%';

o todos los nombres que terminan en s

SELECT * FROM empleados WHERE nombre LIKE '%s';

o todos los nombres que contienen la letra o

SELECT * FROM empleados WHERE nombre LIKE '%o%';

etcétera.

De forma totalmente análoga también podemos:

Hallar todos los nombres de los empleados que NO comienzan con la letra N

SELECT * FROM empleados WHERE nombre NOT LIKE 'N%';

o todos los nombres que NO terminan en s

SELECT * FROM empleados WHERE nombre NOT LIKE '%s';

o todos los nombres que NO contienen la letra o

SELECT * FROM empleados WHERE nombre NOT LIKE '%o%';

Finalmente, dado que con % estamos sustituyendo en general cualquier tipo de caracteres en las búsquedas, por ejemplo en la búsqueda donde escribimos LIKE 'Lui%' después de la palabra Lui y al escribir % estamos indicando que después puede ir cualquier cantidad de letras o caracteres, tenemos que _ sustituirá tan sólo un carácter en especifico. Por ejemplo, si escribimos

SELECT * FROM empleados WHERE nombre LIKE 'Lui_';

estamos especificando que después de Lui sólo debe ir un carácter, de tal manera en donde el nombre es Luise quedará totalmente descartado puesto que después de Lui va específicamente otros dos caracteres.

De tal forma la consulta anterior sólo arroja


Ejercicios
  1. Realiza 10 consultas empleando el operador WHERE en diferentes tablas y seleccionando sólo algunas columnas de la tabla en cuestión (es decir, no ocupes SELECT * FROM, en su lugar ocupa algo como SELECT nombre, app, apm FROM)
  2. Realiza 2 consultas utilizando el operador WHERE concatenando las columnas de las tablas que consultarás.
  3. Realiza 2 consultas utilizando el operador WHERE con operadores como <,>, <=, >=, <>.
  4. Realiza una consulta utilizando el operador WHERE junto con NOT BETWEEN.
  5. Realiza una consulta utilizando el operador WHERE junto con LIKE o NOT LIKE empleando en la comparación
    1. % al inicio
    2. % al final
    3. % % para caracteres intermedios
    4. _ al inicio
    5. _ al final

Regresar