jueves, 18 de julio de 2013

Realizar consultas a una base de datos PostgreSQL empleando las instrucciones del lenguaje SQL.

clip_image002

Una vez que ya nos hemos introducido un poco en el mundo de las base en dos artículos anteriores, vamos a comenzar a ver cómo podemos consultar los datos registrados en ellas, para ello vamos a ir ilustrado algunos ejemplos y ver algunos ejercicios prácticos que sin duda nos van a ir ayudando mucho más a comprender de lo que hablamos:

La sentencia SELECT es usada para obtener la información guardada en una tabla. La forma general de esta sentencia es:

SELECT Información 

FROM Tabla

WHERE Condición.

Aquí, Información es la información que queremos ver. Esta puede ser una lista de columnas, o un * para indicar "todas las columnas".

Tabla indica el nombre de la tabla de la cual vamos a obtener los datos.

La cláusula WHERE es opcional. Si está presente, la Condición especifica las condiciones que los registros deben satisfacer para que puedan ser mostrados.

La manera más sencilla de la sentencia SELECT es cuando se recuperan todos los datos de la tabla: SELECT * FROM public."trabajadores";

Si no deseamos ver los registros completos de una tabla, entonces tenemos que usar los nombres de las columnas en las que estamos interesados separándolas por coma.

SELECT nombre, apellido1, apellido2, salario FROM trabajadores;

También es posible mostrar columnas calculadas a partir de la información contenida en otras columnas de la tabla. Ejemplo:

SELECT nombre, salario, salario*0.3 FROM trabajadores;

Los campos en la tabla resultante se muestran en el orden en que los solicitamos con la sentencia SELECT independientemente de cuál sea el orden que tengan en la estructura de la tabla.

SELECT nombre, apellido1, apellido2 FROM trabajadores; 

O podemos intercambiar el orden por ejemplo:

SELECT nombre, apellido1, apellido2 FROM trabajadores;

En ocasiones la cantidad de registros que recuperamos es muy grande y el resultado de la consulta ocupa varias pantallas. Es posible “limitar” la cantidad de filas que se mostrarán como resultado de una consulta empleando la cláusula LIMIT de la manera siguiente:

SELECT * FROM trabajadores LIMIT 5;

¿Qué podemos hacer para mostrar sólo el 3er registro en la tabla trabajadores?

En Postgre las posiciones de los registros en la tabla comienzan a contarse a partir de cero. EL primer registro está en la fila cero. El segundo registro está en la fila 1 y así sucesivamente hasta el registro n que estará en la fila n-1. Por tanto para mostrar el registro que ocupa la 3ra posición debemos recuperar el registro de la fila #2 y para lo cual podemos usar la cláusula LIMIT de la manera siguiente:

SELECT * FROM trabajadores LIMIT 1 OFFSET 2

Con LIMIT 1 OFFSET 2 estamos ordenando a PostgreSQL que devuelva 1 registro a partir de la fila 2.

Ahora vamos a pasar a explicar una función que consideramos pueda ser muy útil e interesante para los usuarios: CAST, aplicando la función CAST podemos convertir una cadena que contenga números en su representación como número tal como se muestra a continuación:

CAST (SUBSTR(idnum,10,1) AS INTEGER)

Con esta expresión extraemos el carácter que ocupa la posición 10 en el número de identidad y lo convertimos o representamos como un número entero

PostgreSQL posee una estructura muy útil que permite seleccionar cuál debe ser el valor definitivo de campos calculados a partir de evaluar expresiones aritméticas que devuelvan un valor entero. La sintaxis de esta estructura es:

CASE expression

WHEN value THEN result

[WHEN ...]

[ELSE result]

END


Ejemplos de su uso:

CASE CAST (SUBSTR(idnum,10,1) AS INTEGER ) % 2 

WHEN 0 THEN ‘HOMBRE’

WHEN 1 THEN ‘MUJER’

END

Un posible problema real para utilizar esta función de manera muy práctica puede ser a partir de posibles numeraciones de identidad y donde se sabe que en la posición 10 de la numeración se encuentra el dato de si es Masculino o Femenino a partir de si es par es Masculino y si es impar es Femenino puede ser la siguiente:

Selecciones los 10 primeros registros a partir de la tabla de trabajadores y conociendo los números de identificación diga si son M o F.

SELECT idnum, nombre,

CASE CAST (SUBSTR(idnum,10,1) AS INTEGER ) % 2

WHEN 0 THEN 'HOMBRE'

WHEN 1 THEN 'MUJER'

END AS sexo

FROM TRABAJADORES

LIMIT 10;


Volviendo a sintaxis más sencillas para no perder neuronas con funciones de carácter un poco más complejos vamos a terminar con la misma cláusula que comenzamos pero profundizando un poquito más en la misma. Es decir hasta el momento hemos empleado los comandos de PostgreSQL para recuperar y mostrar información almacenada en una tabla de la base de datos. Pero en todos los casos la información ha estado desorganizada. En SQL es posible hacer una consulta indicando que los resultados queden ordenados atendiendo a un determinado criterio. Dicho de manera más práctica, es posible recuperar datos y mostrarlos ordenados por una o más columnas.

Por ejemplo: Queremos obtener el listado de todos los trabajadores pero mostrarlo ordenado alfabéticamente por el nombre.

SELECT 

nombre,

apellido1,

apellido2

FROM TRABAJADORES

ORDER BY nombre;


Bueno colegas con este ejemplo un poco más sencillo cerramos por ahora exhortándolos a profundizar un poco más en las consultas y estudiando sus funciones más potentes, síganos en próximos artículos.


¿Te ha gustado este Post? Compártelo con tus amigos.

9 comentarios:

  1. Me gustó me ayudo muchísimo, gracias!

    ResponderEliminar
    Respuestas
    1. Que bien que le fue de utilidad nuestro blog, esperemos siga visitandolo y estamos abiertos a cualquier aporte o sugerencia, no dude en contactarnos. Gracias.

      Eliminar
  2. es buen material pero donde se puede encontrar consultas mas avanzadas

    ResponderEliminar
  3. como puedo realizar una consulta con una restricción como por ejemplo: mostrar todos los autos que NO sean rojos, amarillos y verdes

    ResponderEliminar
    Respuestas
    1. Depende de como manejes los datos en donde guardas los colores, una forma podría ser
      Select * FROM autos
      WHERE color != 'rojo' and color != 'amarillo' and color != 'verde'

      en el caso que tengas todos los datos en una misma tabla y lo guardes como string.
      Acá podes consultar todos los operadores lógicos que soporta postgreSQL: http://www.tutorialspoint.com/postgresql/postgresql_operators.htm

      Eliminar
  4. Gracias por la informacion, muy clara y comprensible.

    ResponderEliminar
  5. como puedo hacer una consulta de listado de clientes que no tengan hijos

    ResponderEliminar
  6. Excelente explicaciòn, muy buena, pero si tengo tres tablas y necesito extraer datos de las tres cual seria el Querie

    ResponderEliminar

IconIconIcon