MODELAGEM DE DADOS - INTRODUÇÃO AO SQL: DML Prof. Angelo Augusto Frozza, M.Sc. http://about.me/TilFrozza SQL – STRUCTURED QUERY LANGUAGE DML – Data Manipulation Language Linguagem de Manipulação de Dados Comandos básicos: Insert Update Delete Select SQL – STRUCTURED QUERY LANGUAGE INSERT (Inserir) Sintaxe: INSERT INTO <tabela> [(<campos>)] [VALUES (<valores>)]; Exemplo: insert into empresa (idempresa, nome, fone) values (1,”Matriz”, “4922323234”); SQL – STRUCTURED QUERY LANGUAGE UPDATE (Atualizar) Sintaxe: UPDATE <tabela> SET <campo> = <expressão> [WHERE <condição>]; Exemplos: Aumento de 20% nos produtos do fornecedor 3: update produto set custo=custo*1.2 where idfornec=3; Aumento de 30% nos produtos do fornecedor 1: update Produto set custo=custo*1.3 where idfornec=1; SQL – STRUCTURED QUERY LANGUAGE DELETE (Excluir) Sintaxe: DELETE FROM <tabela> [WHERE <condição>]; Exemplo: delete from fornecedor where idfornecedor=2; SQL – STRUCTURED QUERY LANGUAGE SELECT (Consultar) Seleção de todos os campos (ou colunas) da tabela de Departamentos: SELECT * FROM dept; O exemplo utiliza o coringa "*“ (asterisco) para selecionar as colunas na ordem em que foram criadas; No caso, a instrução FROM indica a necessidade de pesquisar apenas na tabela Dept; A instrução SELECT, como pode-se observar, seleciona um grupo de registros de uma (ou mais) tabela(s). SQL – STRUCTURED QUERY LANGUAGE SELECT (Consultar) Cláusula WHERE - adiciona Restrição de tuplas A cláusula WHERE corresponde ao operador restrição da álgebra relacional; Contém a condição que as tuplas devem obedecer a fim de serem listadas; Ela pode comparar valores em colunas, literais, expressões aritméticas ou funções; A seguir são apresentados operadores lógicos e complementares que são utilizados nas expressões utilizando a cláusula WHERE... SQL – STRUCTURED QUERY LANGUAGE SELECT (Consulta) Cláusula WHERE - Operadores lógicos Operador = > >= < <= Significado igual a maior que maior que ou igual a menor que menor que ou igual a Exemplo: SELECT empnome, empfuncao FROM WHERE depnume > 10; emp SQL – STRUCTURED QUERY LANGUAGE SELECT (Consulta) Cláusula WHERE – Operadores complementares Operador between ... and ... in ( .... ) like is null Significado - entre dois valores ( inclusive ) - lista de valores - com um padrão de caracteres - é um valor nulo SQL – STRUCTURED QUERY LANGUAGE SELECT (Consulta) Cláusula WHERE – Operadores complementares Exemplos: SELECT empnome, empsala FROM emp WHERE empsala BETWEEN 500 AND 1000; SELECT empnome, depnume FROM emp WHERE depnume IN (10,30); SELECT empnome, empfuncao FROM emp WHERE empnome LIKE 'F%'; SELECT empnome, empfuncao FROM emp WHERE emptelcoml IS NULL; O símbolo "%" pode ser usado para construir a pesquisa ("%" = qualquer sequência de nenhum até vários caracteres). SQL – STRUCTURED QUERY LANGUAGE SELECT (Consulta) Cláusula WHERE – Operadores negativos Operador <> not nome_coluna = not nome_coluna > not between not in valores not like is not null Descrição Diferente Diferente da coluna Não maior que Não entre dois valores informados Não existente em uma dada lista de Diferente do padrão de caracteres informado Não é um valor nulo SQL – STRUCTURED QUERY LANGUAGE SELECT (Consulta) Cláusula WHERE – Funções de caracter Lower - força caracteres maiúsculos aparecerem em minúsculos; Upper - força caracteres minúsculos aparecerem em maiúsculos; Concat(x,y) - concatena a string "x" com a string "y“; Substring(x,y,str ) - extrai um substring da string "str“ - começa em "x", e termina em "y“; Cast(x to type) - converte um valor para um tipo específico. SQL – STRUCTURED QUERY LANGUAGE SELECT (Consulta) Cláusula WHERE – Funções agregadas (ou de agrupamento) Função avg(n) Retorno média do valor n, ignorando nulos count(expr) vezes que o valor da expr avalia para algo não nulo max(expr) maior valor da expr min(expr) menor valor da expr sum(n) soma dos valores de n, ignorando nulos SQL – STRUCTURED QUERY LANGUAGE SELECT (Consulta) Cláusula WHERE – Funções de agregação Exemplos: SELECT AVG(empsala) FROM emp; SELECT MIN(empsala) FROM emp; SELECT MAX(empsala) FROM emp; SELECT SUM(empsala) FROM emp; SQL – STRUCTURED QUERY LANGUAGE SELECT (Consulta) Agrupamentos As funções de grupo operam sobre grupos de tuplas (linhas); Retornam resultados baseados em grupos de tuplas em vez de resultados de funções por tupla individual; A claúsula GROUP BY do comando SELECT é utilizada para dividir tuplas em grupos menores; As funções de grupo devolvem uma informação sumarizada para cada grupo. SELECT depnume, AVG(empsala) FROM em GROUP BY depnume; SQL – STRUCTURED QUERY LANGUAGE SELECT (Consulta) Agrupamentos OBSERVAÇÃO: Qualquer coluna ou expressão na lista de seleção, que não for uma função agregada, deve constar da cláusula GROUP BY. Portanto é errado tentar impor uma "restrição" do tipo agregada na cláusula WHERE. SQL – STRUCTURED QUERY LANGUAGE SELECT (Consulta) Cláusula HAVING A cláusula HAVING pode ser utilizada para especificar quais grupos devem ser exibidos, portanto restringindo-os. SQL – STRUCTURED QUERY LANGUAGE SELECT (Consulta) Cláusulas GROUP BY e HAVING Retomando o problema anterior, apresente resposta apenas para departamentos com mais de 10 empregados: SELECT depnume, AVG(empsala) FROM emp GROUP BY depnume HAVING COUNT(*) > 3; OBSERVAÇÃO: A cláusula GROUP BY deve ser colocada antes da HAVING, pois os grupos são formados e as funções de grupo são calculadas antes de se resolver a cláusula HAVING; A cláusula WHERE não pode ser utilizada para restringir grupos que devem ser exibidos. SQL – STRUCTURED QUERY LANGUAGE SELECT (Consulta) Sequência no comando SELECT SELECT coluna(s) FROM tabela(s) WHERE condição(ões) da(s) tupla(s) GROUP BY condição(ões) do(s) grupo(s) de tupla(s) HAVING condição(ões) do(s) grupo(s) de tupla(s) ORDER BY coluna(s); a) b) c) A SQL fará a seguinte avaliação: WHERE - para estabelecer tuplas individuais candidatas (não pode conter funções de grupo); GROUP BY - para fixar grupos; HAVING - para selecionar grupos para exibição. SQL – STRUTURED QUERY LANGUAGE Consultar dados em uma tabela Outras cláusulas interessantes: union intersect except join left join right join full join cross join having distinct SQL – STRUTURED QUERY LANGUAGE Consultar dados em uma tabela Operador UNION (união): Dados dois conjuntos: A (1, 2, 3, 4, 5) e B (1, 4, 9) SELECT * FROM A UNION SELECT * FROM B; O operador UNION retorna os registros selecionados em ambas as consultas, eliminando os registros duplicados: SQL – STRUTURED QUERY LANGUAGE Consultar dados em uma tabela Operador UNION ALL: Dados dois conjuntos: A (1, 2, 3, 4, 5) e B (1, 4, 9) SELECT * FROM A UNION ALL SELECT * FROM B; O operador UNION ALL retorna TODOS os registros selecionados em ambas as consultas, SEM REMOVER os registros duplicados: SQL – STRUTURED QUERY LANGUAGE Consultar dados em uma tabela Operador INTERSECT (intersecção): Dados dois conjuntos: A (1, 2, 3, 4, 5) e B (1, 4, 9) SELECT * FROM A INTERSECT SELECT * FROM B; O operador INTERSECT retorna APENAS os registros comuns em ambas as consultas: SQL – STRUTURED QUERY LANGUAGE Consultar dados em uma tabela Operador EXCEPT (exceto): Dados dois conjuntos: A (1, 2, 3, 4, 5) e B (1, 4, 9) SELECT * FROM A EXCEPT SELECT * FROM B; O operador EXCEPT retorna os registros presentes no primeiro conjunto, MENOS os registros presentes no segundo conjunto: