Query SQL (Structured Query Language) Forma básica SELECT FROM WHERE obrigatório obrigatório opcional Em FROM coloca-se uma tabela. Em SELECT colocam-se colunas ou expressões envolvendo colunas da tabela em FROM. Em WHERE coloca-se uma condição que envolve colunas da tabela em FROM.
Exemplo: Exercícios Base de Dados - 4. Trabalhador (numero, nome, datanasc, especialidade) Produto (codigop, designacaop, area, numero) Comprador (codigoc, identificacaoc, moradac, telefonec) Matéria-prima (codigomp, designacaomp, quantarmaz) Fornecedor (codigof, identificacaof, moradaf, telefonef) Venda (codigop, codigoc, datav, quantidadev, valorv, datarecebim) Utiliza (codigop, codigomp, datau, quantidadeu) Compra (codigomp, codigof, datac, quantidadec, valorc, datapagam)
Exemplo: Exercícios Base de Dados - 4. Query_a Seleccionar todos os produtos e os valores de todos os seus atributos. SELECT codigop,designacaop,area,numero FROM Produto SELECT * FROM Produto Nota: Os nomes das tabelas e colunas têm que respeitar as maiúsculas e minúsculas.
Exemplo: Exercícios Base de Dados - 4. Query_b Seleccionar os códigos dos produtos vendidos desde 1999-04-01, os códigos dos compradores que os compraram, as datas destas vendas e os respectivos valores. SELECT codigop,codigoc,datav,valorv FROM Venda WHERE datav>={d 1999-04-01 } Nota: O SQL atribui ao dado aaaa-mm-dd (qualquer que seja o seu formato) o valor {D aaaa-mm-dd }.
Estratégia de avaliação de uma Query básica 1. selecciona a tabela em FROM 2. apaga as linhas da tabela que falham a condição em WHERE 3. apaga as colunas da tabela que não aparecem em SELECT.
WHERE Nota: DATEDIFF ( day,{d aaaa-mm-dd }, {D bbbb-nn-ee }) dias decorridos de uma data para a outra calcula o nº de DATEDIFF ( month,{d aaaa-mm-dd }, {D bbbb-nn-ee }) calcula o nº de meses decorridos de uma data para a outra DATEDIFF ( year,{d aaaa-mm-dd }, {D bbbb-nn-ee }) anos decorridos de uma data para a outra calcula o nº de
WHERE Exemplos de operadores usados em WHERE <, <=, =, <>, >=, > IN testa se um valor está num conjunto de valores BETWEEN AND testa se um valor está entre 2 valores incluivé LIKE testa se uma sequência de caracteres tem caracteres específicos IS NULL testa se um valor é null AND, OR, NOT [NOT IN, NOT BETWEEN, NOT LIKE, IS NOT NULL]
Exercícios Base de Dados 4 c) a i)
SELECT Exemplos de operadores colectivos usados em SELECT COUNT (coluna A) COUNT (*) SUM (coluna A) AVG (coluna A) MAX (coluna A) MIN (coluna A) conta o nº de valores na coluna A conta o nº de linhas da tabela de FROM soma os valores da coluna A calcula a média dos valores da coluna A dá o valor máximo da coluna A dá o valor mínimo da coluna A
Exemplo: Exercícios Base de Dados - 4. Query_p Seleccionar a área total de todos os produtos, a área média dos produtos e o número de produtos existentes. SELECT SUM(area) AS areatotal, AVG(area) AS areamédia, FROM Produto COUNT(*) AS numprodutos Nota: Tem de se dar um nome a uma coluna que resulta de um operador colectivo.
Exercícios Base de Dados 4 t)
Query SQL SELECT FROM WHERE GROUP BY HAVING opcional Em GROUP BY colocam-se colunas da tabela em FROM. As linhas da tabela são agrupadas por valor destas colunas. Em HAVING coloca-se uma condição que envolve colunas da tabela em FROM. As linhas agrupadas que satisfazem esta condição são seleccionadas.
Exemplo: Exercícios Base de Dados - 4. Query_q Para cada produto seleccionar o respectivo código, o número de vendas e a quantidade total dessas vendas. SELECT codigop, COUNT(*) AS numvendas, FROM Venda SUM(quantidadeV) AS quantidadetotal GROUP BY codigop Nota: Cada coluna de SELECT tem de estar em GROUP BY excepto as expressões com operadores colectivos.
Exercícios Base de Dados 4 r)
Exemplo: Exercícios Base de Dados - 4. Query_s Para cada produto com vendas não pagas numa quantidade total superior ou igual a 250, seleccionar o respectivo código, o número de vendas por pagar e a quantidade total dessas vendas. SELECT codigop, COUNT(*) AS numvendas, FROM Venda SUM(quantidadeV) AS quantidadetotal WHERE datarecebim IS NULL GROUP BY codigop HAVING SUM(quantidadeV) >=250
Notas: Não aceita HAVING quantidadetotal >=250. HAVING só aceita condições que envolvem operadores colectivos.
Estratégia de avaliação de uma Query com GROUP BY 1. selecciona a tabela em FROM 2. apaga as linhas que falham a condição em WHERE 3. agrupa as linhas por valor das colunas em GROUP BY 4. apaga os grupos de linhas que falham a condição em HAVING 5. mostra os valores das colunas que aparecem em SELECT para cada agrupamento.
Estratégia de avaliação de uma Query com ORDER BY SELECT FROM WHERE ORDER BY ASC 1. selecciona a tabela em FROM 2. apaga as linhas da tabela que falham a condição em WHERE 3. apaga as colunas da tabela que não aparecem em SELECT 4. ordena as linhas por ordem crescente dos valores da coluna em ORDER BY (ou por ordem decrescente DESC).
Query SQL com UNION/INTERSECT SELECT FROM WHERE UNION SELECT FROM WHERE Nota: O nº de colunas e o tipo de valores em cada par de colunas têm de ser os mesmos. INTERSECT é exemplo de outra operação do mesmo tipo.
Exemplo: Exercícios Base de Dados - 4. Query_u Seleccionar os códigos e as identificações de todos os compradores e fornecedores indicando os que são clientes e os que são fornecedores. SELECT codigoc AS codigo, identificacaoc AS nome, Cliente AS Tipo FROM Comprador UNION SELECT codigof, identificacaof, Fornecedor FROM Fornecedor
Sub-Query SQL Uma Sub-Query é uma Query geralmente em WHERE.
Exemplo: Exercícios Base de Dados - 4. Query_k Seleccionar o número, o nome e a especialidade dos trabalhadores que são responsáveis por algum produto. SELECT numero, nome, especialidade FROM Trabalhador WHERE numero IN (SELECT numero FROM Produto)
Exercícios das folhas de apoio 7: 1.