Contenidos
10
1. Introducción: vistas y consultas SQL
2. Consultas básicas
3. Consultas con condiciones
4. Cálculos entre campos
5. Funciones de agregado
6. Consultas multitabla
7. Creación de vistas
2. Consultas básicas
11
SELECT…FROM
Cláusula SELECT campo1, campo2, ..., campoN | *
Sentencia
Cláusula FROM nombretabla;
Por ejemplo: ¿Qué hace esta consulta?
SELECT * Selecciona todos los campos (*)
FROM rios.rio; de la tabla rio
¿A qué pregunta responde?
Recordemos que siempre hay que
indicar el esquema donde se ¿Qué ríos hay en Andalucía y cuáles son sus
encuentra la tabla. Si no, datos básicos?
PostgreSQL busca la tabla en el
esquema public.
2. Consultas básicas
12
SELECT…FROM
Cláusula SELECT campo1, campo2, ..., campoN | *
Sentencia
Cláusula FROM nombretabla;
SELECT
Los campos se separan por
id_rio, comas, pero después del
nombre_rio, último no hay coma
num_embalses
FROM rios.rio; Selecciona de la tabla río los campos id_rio, nombre y
número de embalses
Sería la respuesta a la pregunta:
¿Cuál es el nombre y el número de embalses de cada
río de Andalucía?
2. Consultas básicas
13
2. Consultas básicas
14
Consulta 1:
SELECT *
FROM rios.rio;
2. Consultas básicas
15
2. Consultas básicas
16
Si queremos convertir una consulta en una tabla física, usamos INTO
SELECT campo1, campo2
INTO nombrenuevatabla
FROM nombretabla;
Ejemplo:
SELECT
nombre_rio,
longitud_rio
INTO
rios.rio_longitud
FROM rios.rio;
2. Consultas básicas
17
Si queremos convertir una consulta en una tabla física, usamos INTO
SELECT campo1, campo2
INTO nombrenuevatabla
FROM nombretabla;
Ejemplo:
No es muy frecuente crear así nuevas tablas,
SELECT se puede usar para crear las tablas del
modelo o si son datos que se tienen que
nombre_rio,
exportar a otra aplicación o si la consulta es
longitud_rio tan compleja que tarda mucho en
INTO ejecutarse….
rios.rio_longitud NO ES LO HABITUAL PORQUE LOS
FROM rios.rio; DATOS YA ESTÁN EN LA TABLA DE
ORIGEN, NO HAY NECESIDAD DE
DUPLICARLOS
2. Consultas básicas
18
Se ha creado una nueva tabla
que ocupa espacio, aunque esos
datos también están en la tabla
rio. Además, no se actualizará
en caso de que actualicemos la
tabla de la que procede (riesgo
de inconsistencia)
2. Consultas básicas
19
Borremos esta tabla que acabamos de crear.
¿Recuerdas cómo se hacía?
2. Consultas básicas
20
DROP TABLE rios.rio_longitud;
¡¡No olvides refrescar!!
2. Consultas básicas
21
SELECT DISTINCT muestra los valores diferentes de un atributo que hay
en una tabla.
SELECT DISTINCT campo1
FROM nombretabla;
Por ejemplo, prueba
SELECT id_estacion
FROM rios.medida;
2. Consultas básicas
22
SELECT DISTINCT muestra los valores diferentes de un atributo que hay
en una tabla.
SELECT DISTINCT campo1
FROM nombretabla;
Y ahora prueba:
SELECT DISTINCT id_estacion
FROM rios.medida;
Esta consulta responde a la
pregunta ¿de qué estaciones
tenemos medidas?
2. Consultas básicas
23
Consulta 3:
Escribe una consulta sql que nos devuelva una lista de las fechas para las
que se dispone de alguna medición en alguna de las estaciones
¿A qué campo de qué tabla nos referimos?
TABLA medida, CAMPO fecha
2. Consultas básicas
24
Consulta 3:
SELECT DISTINCT fecha
FROM rios.medida;
2. Consultas básicas
25
Podemos dar un ALIAS a los campos seleccionados usando la opción AS;
así pueden aparecer con un nombre más descriptivo.
SELECT
campo1 AS [alias1] ,
campo2 AS [alias2] ,
...,
campoN AS [aliasN]
FROM nombretabla;
2. Consultas básicas
26
Por ejemplo, Consulta 4: Si los alias tienen espacios, tildes,
etc., debemos poner el nuevo
SELECT nombre entre comillas. Si no, no
id_rio, es necesario
nombre_rio AS "Nombre del río",
id_demarcacion AS "Identificador de la demarcación hidrográfica"
FROM rios.rio;
Esta consulta sería la respuesta a la pregunta ¿cuáles son los ríos
de Andalucía y a qué demarcación pertenecen?
2. Consultas básicas
27
Si queremos que los registros seleccionados en una consulta aparezcan
ordenados según algún campo, usaremos ORDER BY
SELECT campo1, campo2 , ..., campoN | *
FROM nombretabla
ORDER BY campoA ASC | DESC ,…, campoB ASC | DESC;
ASC ES LA OPCIÓN POR DEFECTO
2. Consultas básicas
28
Ejemplo (Consulta5):
SELECT
nombre_rio,
longitud_rio, ¿Qué hace esta consulta?
num_embalses
FROM rios.rio
ORDER BY num_embalses DESC;
2. Consultas básicas
29
Ejemplo (Consulta5):
SELECT
nombre_rio, Selecciona los campos
longitud_rio, nombre_rio, longitud_rio y
num_embalses num_embalses de la tabla rio y
los ordena de mayor a menor por
FROM rios.rio
el número de embalses
ORDER BY num_embalses DESC;
Responde a la pregunta ¿cuáles
son los ríos de Andalucía, cuál
es su longitud y cuántos
embalses tienen, por orden de
mayor a menor número de
embalses?
2. Consultas básicas
30
Consulta 6:
Listado de todos los ríos de Andalucía, ordenados de mayor a menor
longitud, con todos los datos que tengan asociados.
SELECT *
FROM rios.rio
ORDER BY longitud_rio DESC;
2. Consultas básicas
31
Si queremos en el resultado no aparezcan todos los registros, sino sólo
los n primeros, usaremos LIMIT n
SELECT campo1, campo2 , ..., campoN | *
FROM nombretabla
ORDER BY campoA ASC | DESC ,…, campoB ASC | DESC
LIMIT n;
POR EJEMPLO, para responder a la pregunta ¿cuál es el río más largo de
Andalucía y cuál es su longitud?
SELECT
nombre_rio,
longitud_rio
FROM rios.rio
ORDER BY longitud_rio DESC
LIMIT 1;
2. Consultas básicas
36
Consulta 9:
Listado de todas las estaciones de control del Sistema de Gestión
Hidrológica de Andalucía, con todos los datos disponibles, ordenadas
por el identificador del río en que se sitúan y después por su fecha de
alta, de más reciente a más antigua.
2. Consultas básicas
37
Consulta 9: Consulta 9:
SELECT * SELECT *
FROM rios.estacion_control FROM rios.estacion_control
ORDER BY ORDER BY
id_rio, id_rio ASC,
fecha_alta DESC; fecha_alta DESC;
2. Consultas básicas
38
Consulta 9: Consulta 9:
SELECT * SELECT *
FROM rios.estación_control FROM rios.estación_control
El segundo criterio de ordenación solo
ORDER BY se aplica cuando hay ORDER BYel
igualdad en
id_rio, primer criterio id_rio ASC,
fecha_alta DESC; fecha_alta DESC;