Download - Aula 7 sql - select
![Page 1: Aula 7 sql - select](https://reader034.vdocuments.net/reader034/viewer/2022042505/558e79b61a28ab472c8b45ab/html5/thumbnails/1.jpg)
Base de Dados 1
![Page 2: Aula 7 sql - select](https://reader034.vdocuments.net/reader034/viewer/2022042505/558e79b61a28ab472c8b45ab/html5/thumbnails/2.jpg)
Trabalhando com datas e BETEWEN
Funções de Agregação
Outros Operadores
Exercicios
Agenda
![Page 3: Aula 7 sql - select](https://reader034.vdocuments.net/reader034/viewer/2022042505/558e79b61a28ab472c8b45ab/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042505/558e79b61a28ab472c8b45ab/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042505/558e79b61a28ab472c8b45ab/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042505/558e79b61a28ab472c8b45ab/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042505/558e79b61a28ab472c8b45ab/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042505/558e79b61a28ab472c8b45ab/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042505/558e79b61a28ab472c8b45ab/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042505/558e79b61a28ab472c8b45ab/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042505/558e79b61a28ab472c8b45ab/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042505/558e79b61a28ab472c8b45ab/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042505/558e79b61a28ab472c8b45ab/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042505/558e79b61a28ab472c8b45ab/html5/thumbnails/14.jpg)
É 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](https://reader034.vdocuments.net/reader034/viewer/2022042505/558e79b61a28ab472c8b45ab/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042505/558e79b61a28ab472c8b45ab/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042505/558e79b61a28ab472c8b45ab/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042505/558e79b61a28ab472c8b45ab/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042505/558e79b61a28ab472c8b45ab/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042505/558e79b61a28ab472c8b45ab/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042505/558e79b61a28ab472c8b45ab/html5/thumbnails/21.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042505/558e79b61a28ab472c8b45ab/html5/thumbnails/22.jpg)
Wildcard Descrição
% ou * Substitui Vários Caracteres
_ ou ? Substitui 1 caracter
WILDCARDS