05.-Consulta de tablas
Para recuperar datos de una tabla, se consulta; para locual utilizamos la declaración SQL SELECT
. La declaración se divide en una lista de selección (la parte que enumera las columnas a devolver), una lista de tablas (la parte que enumera las tablas a partir de las cuales recuperar los datos), y una calificación opcional (la parte que especifica cualquier restricción). Por ejemplo, para recuperar todas las filas de la tabla weather
, escribimos:
SELECT * FROM weather;
Aquí
*
es una abreviatura para todas las columnas. 1 Así que el mismo resultado sería tenido con:
SELECT city, temp_lo, temp_hi, prcp, date FROM weather;
La salida debe ser:
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 rows)
Puedes escribir expresiones, no solo referencias de columna simples, en la lista de selección. Por ejemplo, puede hacer:
SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;
Esto debería dar:
city | temp_avg | date
---------------+----------+------------
San Francisco | 48 | 1994-11-27
San Francisco | 50 | 1994-11-29
Hayward | 45 | 1994-11-29
(3 rows)
Observe cómo el AS
cláusula se utiliza para reetiquete la columna de salida. (El AS
la cláusula es opcional.)
Una consulta puede ser calificada. WHERE
cláusula que especifica qué filas se quieren. El WHERE
cláusula contiene una expresión booleana (valor de la verdad), y sólo se devuelven filas para las que la expresión booleana es verdadera. Los habituales operadores booleanos (AND
, OR
, y NOT
) están permitidos en la calificación. Por ejemplo, los siguientes recuperan el clima de San Francisco en días lluviosos:
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 row)
Puede solicitar que los resultados de una consulta sean devueltos en orden ordenado:
SELECT * FROM weather
ORDER BY city;
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
En este ejemplo, el orden de tipo no está completamente especificado, y por lo que podría obtener las filas de San Francisco en cualquier orden. Pero siempre obtendrías los resultados mostrados arriba si lo haces:
SELECT * FROM weather
ORDER BY city, temp_lo;
Puede solicitar que se eliminen las filas duplicadas del resultado de una consulta:
SELECT DISTINCT city
FROM weather;
city
---------------
Hayward
San Francisco
(2 rows)
Una vez más, el pedido de la fila de resultados podría variar. Usted puede asegurar resultados consistentes mediante el uso de DISTINCT
y ORDER BY
en conjunto: 2
SELECT DISTINCT city
FROM weather
ORDER BY city;
-
Mientras
SELECT *
es útil para las consultas fuera de las esposas, se considera ampliamente mal estilo en el código de producción, ya que añadir una columna a la tabla cambiaría los resultados. ↩ -
En algunos sistemas de bases de datos, incluidas versiones anteriores de PostgreSQL, la implementación de
DISTINCT
automáticamente ordena las filas con lo queORDER BY
es innecesario. Pero esto no es requerido por el estándar SQL, y el PostgreSQL actual no garantiza queDISTINCT
haga que las filas aparezcan ordenadas. ↩