Você está na página 1de 17

BD II - TADS

BD II - TADS

CREATE TABLE clima (


cidade VARCHAR(80),
temp_max INT, -- temperatura mxima
temp_min INT, -- temperatura mnima
prcp REAL, -- precipitao
data DATE
);

CREATE TABLE cidades (


nome VARCHAR(80)
);
BD II - TADS

INSERT INTO cidades VALUES ('Bage');

INSERT INTO cidades VALUES ('Acegua');

INSERT INTO cidades VALUES ('Hulha Negra');


BD II - TADS

INSERT INTO clima VALUES ('Bage', 36, 20, 0.25, '20160101');

INSERT INTO clima VALUES ('Bage', 35, 18, 0, '20160102');

INSERT INTO clima VALUES ('Bage', 33, 21, 0, '20160103');

INSERT INTO clima VALUES ('Acegua', 32, 13, 0, '20160101');

INSERT INTO clima VALUES ('Acegua', 31, 19, 0, '20160102');

INSERT INTO clima VALUES ('Acegua', 30, 24, 0, '20160103');


BD II - TADS

INSERT INTO clima VALUES ('Hulha Negra', 34, 11, 0, '20160101');

INSERT INTO clima VALUES ('Hulha Negra', 29, 23, 0, '20160102');

INSERT INTO clima VALUES ('Hulha Negra', 34, 22, 16, '20160103');

INSERT INTO clima VALUES ('Candiota', 34, 15, 0, '20160101');

INSERT INTO clima VALUES ('Candiota', 29, 21, 0, '20160102');

INSERT INTO clima VALUES ('Candiota', 33, 24, 34, '20160103');


BD II - TADS

Alguns SELECTs

SELECT 2 + 2;

SELECT version();

SELECT current_date;

SELECT current_time;

SELECT * FROM pg_tables;

SELECT * FROM pg_databases;


BD II - TADS

Fazendo clculos no SELECT e apelidando colunas

SELECT cidade, (temp_max+temp_min)/2 AS


temp_media, data FROM clima;

Dois critrios de seleo

SELECT * FROM clima


WHERE cidade = 'Bage' AND prcp > 0.0;
BD II - TADS

Ordenando o resultado de uma consulta

Aps a consulta ter produzido a tabela de sada esta pode, opcionalmente, ser
ordenada. Se nenhuma ordenao for especificada, as linhas retornam em uma
ordem aleatria. Neste caso, a ordem real depende dos tipos de plano de
varredura e de juno e da ordem no disco, mas no se deve confiar nisto.
Uma ordem de sada especfica somente pode ser garantida se a etapa de
ordenao for especificada explicitamente.
A clusula ORDER BY especifica a ordem de classificao:

SELECT lista_de_seleo
FROM expresso_de_tabela
ORDER BY coluna1 [ASC | DESC] [, coluna2 [ASC | DESC] ...]
BD II - TADS

Ordenando o resultado de uma consulta

SELECT * FROM clima


ORDER BY cidade; - Padro ASC caso omitido

SELECT * FROM clima


ORDER BY cidade DESC;

SELECT * FROM clima


ORDER BY cidade, data;

SELECT * FROM clima


ORDER BY 3,1;
BD II - TADS

Omitindo resultados iguais

SELECT cidade FROM clima;

SELECT DISTINCT cidade FROM clima;


BD II - TADS

Funes de Agregao

O PostgreSQL suporta funes de agregao. Uma funo


de agregao computa um nico resultado para vrias
linhas de entrada. Por exemplo, existem funes de
agregao para retornar o nmero de linhas de entrada
para o qual a expresso no nula ou simplesmente o
total caso seja especificado * (count), somar (sum),
calcular a mdia (avg), o valor mximo (max) e o valor
mnimo (min) para um conjunto de linhas.
BD II - TADS

Funes de Agregao

Menor Valor
SELECT MIN(temp_max) FROM clima;

Maior Valor
SELECT MAX(temp_max) FROM clima;

Mdia
SELECT AVG(temp_max) FROM clima;

Soma
SELECT SUM(temp_max) FROM clima;

Contar
SELECT COUNT(*) FROM clima;
BD II - TADS

Se for desejado saber a cidade (ou cidades) onde houve a maior


temperatura pode-se tentar usar

SELECT cidade FROM clima WHERE temp_min


= MAX(temp_min); ERRADO

no vai funcionar, porque a funo de agregao max no pode ser usada na clusula
WHERE (Esta restrio existe porque a clusula WHERE determina as linhas que vo passar
para o estgio de agregao e, portanto, precisa ser avaliada antes das funes de
agregao serem computadas). Entretanto, como geralmente o caso, a consulta pode ser
reformulada para obter o resultado pretendido, o que ser feito por meio de uma
subconsulta:

SELECT cidade FROM clima


WHERE temp_min = (SELECT max(temp_min) FROM clima);
BD II - TADS

As agregaes tambm so muito teis em combinao com a


clusula GROUP BY. Por exemplo, pode ser obtida a maior
temperatura mnima observada em cada cidade usando

SELECT cidade, max(temp_min)


FROM clima
GROUP BY cidade;

produzindo uma linha de sada para cada cidade. Cada resultado da


agregao computado sobre as linhas da tabela correspondendo a
uma cidade.
BD II - TADS

As linhas agrupadas podem ser filtradas utilizando a clusula HAVING

SELECT cidade, max(temp_min)


FROM clima
GROUP BY cidade
HAVING max(temp_min) < 24;

que mostra os mesmos resultados, mas apenas para as cidades que


possuem todos os valores de temp_min abaixo de 24.
BD II - TADS

Outras funcionalidades

SELECT cidade, temp_min, data


FROM clima
WHERE temp_min BETWEEN 20 AND 29;

SELECT cidade, temp_min, data


FROM clima
WHERE temp_min IN (20, 21, 22, 23, 24, 25);

SELECT cidade, temp_min, data


FROM clima
WHERE temp_min NOT IN (20, 21, 22, 23, 24, 25);
BD II - TADS

EXISTS e NOT EXISTS

O argumento do EXISTS uma declarao SELECT arbitrria, ou uma subconsulta.


A subconsulta processada para determinar se retorna alguma linha. Se retornar
pelo menos uma linha, o resultado de EXISTS "verdade"; se a subconsulta no
retornar nenhuma linha, o resultado de EXISTS "falso".

SELECT * FROM clima


WHERE EXISTS (SELECT nome FROM cidades
WHERE cidade = nome);

Contrrio

SELECT * FROM clima


WHERE NOT EXISTS (SELECT nome FROM
cidades WHERE cidade = nome);

Você também pode gostar