Aula 7 sql - select

22
Base de Dados 1

Transcript of Aula 7 sql - select

Page 1: Aula 7   sql - select

Base de Dados 1

Page 2: Aula 7   sql - select

Trabalhando com datas e BETEWEN

Funções de Agregação

Outros Operadores

Exercicios

Agenda

Page 3: Aula 7   sql - select

Para se trabalhar com datas usa-se o # para delimitar as datas.

SELECT *

FROM Registo

WHERE data > #12/13/2013#;

Datas

Page 4: Aula 7   sql - select

O operador between deve ser utilizado quando se esta a fazer uma pesquisa entre dois valores.

SELECT * FROM Pessoa

WHERE idade >= 10 and idade =< 20

SELECT * FROM Pessoa

WHERE idade between 10 and 20

BETWEEN

Page 5: Aula 7   sql - select

Também designadas por funções estatísticas, têm por objectivo obter informação sobre conjuntos de linhas especificados na cláusula WHERE ou sobre grupos de linhas indicados na cláusula GROUP BY.

Funções de Agregação

Função Descrição

COUNT Devolve o número de linhas

MAX Devolve o maior valor da coluna

MIN Devolve o menor valor da coluna

SUM Devolve a soma de todos os valores da coluna

AVG Devolve a média de todos os valores da coluna

Page 6: Aula 7   sql - select

A função de agregação COUNT devolve o número de linhas que resultam num SELECT. Pode ser utilizada de três formas distintas:

COUNT

Forma Descrição

COUNT(*) Devolve o número de linhas que resulta de um SELECT

COUNT(coluna) Devolve o número de ocorrências da coluna diferentes de NULL

COUNT(DISTINCT COLUNA) Devolve o número de ocorrências (sem repetições) na coluna

Page 7: Aula 7   sql - select

Quantas pessoas existem na tabela?

SELECT COUNT(*)

FROM Pessoa

Quantos pessoas com idade = 18 existem?

SELECT COUNT(idade)

FROM Pessoa

WHERE idade = 18

COUNT-Exemplos

Page 8: Aula 7   sql - select

Permitem obter o menor e o maior valor de uma determinada coluna. Problema: Qual é o valor do maior salário pago nesta empresa? SELECT MAX(Salário) as Maior_Salário FROM Pessoa Problema: Qual a idade do empregado mais novo? SELECT MIN(Idade) as Menor_Idade FROM Pessoa Nota: As funções MIN e MAX podem ser aplicadas a colunas que não contenham valores numéricos. No caso de serem aplicadas a campos do tipo String, são devolvidos os menores e maiores valores alfabeticamente.

MIN-MAX

Page 9: Aula 7   sql - select

A função SUM devolve a soma de uma determinada coluna.

A função AVG devolve a média Problema: Selecionar o salário médio das pessoas com mais de 30 anos.

SELECT AVG(salário)

FROM Pessoa WHERE idade > 30

Nota: As funções SUM e AVG apenas podem ser aplicadas a campos numéricos.

SUM-AVG

Page 10: Aula 7   sql - select

Para agrupar informação utilizamos as Clausulas GROUP BY e HAVING

SELECT campo1, campo2,…, campon

FROM tabela1, …, tabela n

[WHERE condição]

[GROUP BY …]

[HAVING …]

[ORDER BY …]

Agrupando Informação

Page 11: Aula 7   sql - select

Está intimamente ligada às funções de agregação, pois é do nosso interesse agrupar informação, obtendo em seguida valores estatísticos sobre os grupos formados.

A cláusula GROUP BY divide o resultado de um SELECT em grupos de resultados que irão ser tratados com as funções de agregação

GROUP BY

Page 12: Aula 7   sql - select

Por vezes surge a dúvida sobre quando utilizar a cláusula WHERE ou a cláusula HAVING para restringir o conjunto de registos a apresentar. Utiliza-se a cláusula WHERE sempre que se pretenda restringir os registos a considerar na seleção. A cláusula HAVING serve para restringir os grupos que foram formados depois de aplicada a restrição na cláusula WHERE. Se se utilizar a cláusula WHERE num SELECT contendo GROUP BY, o conjunto dos registos agrupados é apenas aquele que resulta da restrição imposta pela cláusula WHERE.

WHERE VS HAVING

Page 13: Aula 7   sql - select

Serve para fazer restrições ao nível dos grupos que são processados.

Se pretendermos mostrar os grupos que apresentam uma característica em particular, não utilizamos a cláusula WHERE, pois esta destina-se à restrição de linhas. Utiliza-se a cláusula HAVING, que atua unicamente sobre o resultado dos grupos.

HAVING

Page 14: Aula 7   sql - select

É o conceito de termos queries dentro de queries

Ora, sendo o resultado de qualquer comando SELECT uma tabela, podemos então utilizar os resultados devolvidos nessa tabela e incorporá-los noutro comando SELECT que deles necessite.

SubQueries

Page 15: Aula 7   sql - select

Problema: Qual o nome da pessoa com menor salário?

Resolução: Temos aqui dois problemas para resolver:

P1: Qual o valor do menor salário?

P2: Qual o nome da pessoa a quem esse salário pertence?

SubQuery - Exemplo

Page 16: Aula 7   sql - select

SELECT MIN(salário)AS menorSalário

FROM Pessoa

Supondo que devolve 1000

SELECT nome

FROM pessoa

WHERE salário = 86000

SubQuery - Exemplo

No entanto podemos simplificar a solução apresentada. SELECT nome FROM pessoa WHERE salário = (SELECT MIN(salário) FROM Pessoa)

Page 17: Aula 7   sql - select

SELECT …

FROM …

WHERE [NOT]EXISTS(SubQuery)

O operador EXISTS é um operador unário que verifica se, da execução de uma subquery, resultou alguma linha

Operador Exists

Page 18: Aula 7   sql - select

SELECT nome, idade

FROM pessoa

WHERE códigoLocal <> ALL(SELECT código FROM localidade WHERE ilha = ”Santiago”)

Selecionar o nome e idade de todas as pessoas que não vive na ilha de Santiago.

Operador ALL

Page 19: Aula 7   sql - select

SELECT Nome, Idade

FROM Pessoa WHERE códigoLocal = ANY (SELECT código FROM postal WHERE ilha <> ”Santiago”)

Seleccionar o nome e idade de todas as pessoas que não vive na ilha de Santiago

Operador ANY

Page 20: Aula 7   sql - select

O operador IN serve para se especificar multiplos valores na clausula WHERE

SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...);

Exemplo:

SELECT * FROM Customers WHERE City IN ('Paris','London');

Operador IN

Page 21: Aula 7   sql - select

O operador like é utilizado para procurar um padrão especifico numa coluna utilizando WILDCARDS

SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern;

SELECT * FROM Customers WHERE City LIKE 's%';

Operador Like

Page 22: Aula 7   sql - select

Wildcard Descrição

% ou * Substitui Vários Caracteres

_ ou ? Substitui 1 caracter

WILDCARDS