Para recuperar datos de una tabla, se hacen consultas. Para esto, se usa la declaración de SQL SELECT. Esta declaración se divide en una lista de selecciones (la parte que lista las columnas que se van a devolver), una lista de tablas (la parte que lista las tablas a partir de las cuales se van a recuperar los datos) y una cualidad opcional (la parte que especifica cualquier restricción). Por ejemplo, para recuperar todas las filas de la tabla weather, escriba:
midb=# SELECT * FROM weather;
Arriba, * significa “todas las columnas”. Así que lo siguiente daría el mismo resultado:
midb=# SELECT city, temp_lo, temp_hi, prcp, date FROM weather;
Advertencia
Evite usar * en producción.
Aunque SELECT * sirve para hacer consultas rápidamente, su uso en código de producción se considera mal estilo, ya que si se agrega una columna nueva a la tabla el resultado cambiaría.
Al ejecutar cualquiera de las órdenes de arriba debería ver una tabla con 3 filas correspondientes a los datos que generó en la página anterior:
midb=# SELECT * FROM weather;
city | temp_lo | temp_hi | prcp | date
---------------+---------+---------+------+------------
San Francisco | 46 | 50 | 0.25 | 1994-11-27
San Francisco | 43 | 57 | 0 | 1994-11-29
Hayward | 37 | 54 | | 1994-11-29
(3 filas)
También puede escribir expresiones en la lista de selecciones, no solamente referencias a las columnas existentes. Escriba lo siguiente:
midb=# SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;
En este caso, se genera una columna nueva en el resultado, con el nombre temp_avg, cuyo valor corresponde al promedio de temperatura de cada fila:
midb=# SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;
city | temp_avg | date
---------------+----------+------------
San Francisco | 48 | 1994-11-27
San Francisco | 50 | 1994-11-29
Hayward | 45 | 1994-11-29
(3 filas)
Se puede agregar “restricciones” a una consulta usando la cláusula WHERE que especifica qué tipo de filas se desea obtener. La cláusula WHERE contiene una expresión Booleana y solamente se devuelven las filas para las cuales dicha expresión sea verdadera. Se permiten los operadores Booleanos usuales (AND, OR y NOT) en la “restricción”. Por ejemplo, escriba lo siguiente para obtener climas registrados de San Francisco en días lluviosos:
midb=# SELECT * FROM weather WHERE city = 'San Francisco' AND prcp > 0.0;
Resultado:
city | temp_lo | temp_hi | prcp | date
---------------+---------+---------+------+------------
San Francisco | 46 | 50 | 0.25 | 1994-11-27
(1 fila)
Puede pedir también que los resultados de una consulta estén ordenados:
midb=# SELECT * FROM weather ORDER BY city;
city | temp_lo | temp_hi | prcp | date
---------------+---------+---------+------+------------
Hayward | 37 | 54 | | 1994-11-29
San Francisco | 46 | 50 | 0.25 | 1994-11-27
San Francisco | 43 | 57 | 0 | 1994-11-29
(3 filas)
En el ejemplo anterior, el orden no está bien específicado del todo, y por eso se obtienen las filas de San Francisco en cualquier orden. Para organizar no solo por el nombre de la ciudad sino también por la temperatura más baja:
midb=# SELECT * FROM weather ORDER BY city, temp_lo;
city | temp_lo | temp_hi | prcp | date
---------------+---------+---------+------+------------
Hayward | 37 | 54 | | 1994-11-29
San Francisco | 43 | 57 | 0 | 1994-11-29
San Francisco | 46 | 50 | 0.25 | 1994-11-27
(3 filas)
Además, puede pedir que no se muestren filas duplicadas en el resultado:
midb=# SELECT DISTINCT city FROM weather;
city
---------------
Hayward
San Francisco
(2 filas)