PRONATEC - Programador de Sistemas Banco de Dados 1) Incluindo linhas nas tabelas a. Para incluir linhas em tabelas utilize o comando INSERT INTO INSERT INTO tabela [ ( coluna [, coluna,...] ) ] VALUES ( valor [, valor,... ] ) Tabela: nome da tabela que receberá a inclusão. Coluna: Lista de colunas que terão seus valores atribuídos (opcional) Valor: conteúdo que será incluído em cada coluna. Ex.: INSERT INTO tmpautor (CDAUTOR, NMAUTOR) VALUES (1, Renato Araújo ) Obs.: colunas que não tiverem valores atribuídos terão conteúdo nulo. Caso queira explicitar a inclusão de um valor nulo numa determinada coluna use NULL no lugar correspondente ao valor desta coluna. 2) Incluindo várias linhas INSERT INTO tabela [ ( coluna [, coluna,...] ) ] SELECT comando-select Tabela: nome da tabela que receberá a inclusão. Coluna: Lista de colunas que terão seus valores atribuídos (opcional) Comando-select: comando select que será visto na próxima aula. Exs.: INSERT INTO Estado SELECT * FROM Uf INSERT INTO tmpautor (CDAUTOR, NMAUTOR) SELECT CDAUTOR, NMAUTOR from AUTOR 3) Alteração de dados 1
UPDATE tabela SET coluna = valor [, coluna = valor,...] [WHERE condição] Tabela: nome da tabela que receberá a inclusão. Coluna: Lista de colunas que terão seus valores atribuídos (opcional) Valor: novo conteúdo para a coluna. Condição: condição que indicará o limite de atualização das linhas. Ex.: UPDATE CD SET PRECO_VENDA = 15 WHERE CODIGO_CD = 1; UPDATE CD SET PRECO_VENDA = PRECO_VENDA * 1,05 WHERE CODIGO_GRAVADORA = 2; 4) Exclusão de dados DELETE FROM tabela [WHERE condição] Tabela: nome da tabela que receberá a inclusão. Condição: condição que indicará o limite de atualização das linhas. Ex.: DELETE FROM AUTOR WHERE CDAUTOR = 1 5) Cláusulas SELECT e FROM a. Apesar de ser a primeira, ela é a última instrução a ser executada!!! b. Antes de poder determinar o que incluir no conjunto-resultado final, é necessário conhecer todas as colunas que podem ser incluídas nele. c. Para isso, será necessário conhecer um pouco a cláusula FROM d. A cláusula FROM indica a(s) tabelas(s) que participarão do conjunto-resultado da consulta. e. Por exemplo: i. Mostre todas as colunas e todas as linhas da tabela cliente: SELECT * FROM cliente 2
f. Vocês podem selecionar todos os campos indicando-os, ou seja, sem usar * (boa prática) g. Muito relevante na manutenção de BD e de aplicações. SELECT codcliente,nome,cpf,datacadastro,cidade,uf,pais FROM cliente h. Além de selecionar todas as colunas, você pode indicar quais colunas (subconjunto): SELECT codcliente,nome,cpf FROM cliente 6) Cláusula DISTINCT a. Remove possíveis linhas duplicadas no resultado i. Exemplo: Select distinct nomecliente from cliente 7) Cláusula WHERE a. Mecanismo de filtragem de linhas indesejáveis de seu conjunto-resultado. Ex.: Select e.cod_emp, e.nome, e.sobrenome, e.dt_contr, e.cargo From empregado as e Where (e.cargo like analista% or e.cod_emp >= 41) and e.dt_contr > 04-23-2010 Obs.: lembre-se que atributos do tipo datetime guardam data e hora, inclusive com segundos, como 04-23-2010 01:05:00. Quando não for especificado as horas, minutos e segundos, será considerado 00:00:00. Logo a expressão e.dt_contr > 04-23-2010 permite retornar todos registro desta data. Operadores de comparação: like: valores aproximados para alfanuméricos, geralmente utilizado em conjunto com %, que indica qualquer coisa. O coringa _ indica um caracter, [a-f] indica um caracter entre a e f quaisquer, e [^a-f] indica um caracter que não esteja entre a e f quaisquer. >, <, >=, <=, =, <> (diferente) 8) Cláusula ORDER BY Em geral os resultados de consultas não estão em nenhuma ordem específica. 3
A cláusula order by é o mecanismo que ordena seus conjuntos-resultados usando dados de coluna brutos ou expressões baseadas em dados de coluna. Exemplos: Order by cod_vendedor Order by cod_vendedor, nomeproduto Order by cod_vendedor desc Order by cod_vendedor desc, nomeproduto asc Order by 2 Obs.: o default é ordenação ascendente, ou seja, caso não seja especificado asc ou desc, a ordenação será ascendente. 9) Junção a. Ideia similar à Junção da Álgebra Relacional b. Produto Cartesiano P, loja as L ou P cross join loja as L i. Filtro ruim: P, loja as L 4
where P.codloja = L.codloja ii. Filtro correto: JOIN c. Junções internas i. Ex.: (junção interna é o join padrão) P join loja as L on (P.codloja = L.codloja) ii. Explicitando que a junção é interna P inner join loja as L on (P.codloja = L.codloja) d. Junções externas (outer join) i. Right outer join ii. Left outer join iii. Full outer join select nomeloja, codproduto, valor from preco as P left outer join loja as L on (P.codloja = L.codloja) select nomeloja, codproduto, valor from preco as P full outer join loja as L on (P.codloja = L.codloja) 10) Cláusula GROUP BY a. Usada para agrupar dados por valores de colunas b. Ao usar group by será necessário usar cláusulas/funções de filtro de dados, como a função COUNT. i. Função MIN(x): retorna o menor valor de um atributo x. ii. Função MAX(x): retorna o maior valor de um atributo x. iii. Função SUM(x): retorna a soma dos valores do atributo x. 5
iv. Função AVG(x): retorna a média dos valores do atributo x. v. Função COUNT(*): conta o total de linhas que preenchem a qualificação de consulta. vi. Exemplo: select faixaef as Faixa, count(*) as Qtd from eficiencia_energ group by faixaef Faixa Qtd A 5 B 14 C 2 D 18 E 4 c. Também pode ser utilizada a cláusula HAVING i. Permite filtrar dados agrupados da mesma forma que a cláusula WHERE permite filtrar dados brutos ii. Exemplo: select faixaef as Faixa, count(*) as Qtd eficiencia_energ group by faixaef having count(*) > 4 from Faixa Qtd A 5 B 14 D 18 11) Subconsultas (subqueries): são consultas aninhadas (dentro de outras consultas). SELECT colunas 6
FROM tabela WHERE expressão operador (SELECT colunas FROM tabela WHERE...) a. O operador pode ser de comparação (linha- >,<,<=,>=,<>,!=,=) ou de grupo (in, any, all). Os operadores de linha só funcionam se a subconsulta retornar apenas um valor (uma linha e uma coluna). Select nome,preco From cd Where preco > (select avg(preco) from cd) b. Para realizar subconsultas: i. Escreva-as entre parênteses ii. Escreva-as à direita do operador iii. Não coloque a cláusula ORDER BY em uma subquery iv. Utilize operadores de linha apenas em buscas que retornem uma única linha. v. Utilize operadores de grupo apenas em buscas que potencialmente retornem mais de uma linha. c. Uma subconsulta também pode ser usada na cláusula HAVING. Select cd_gravadora,min(preco) From cd Group by cd_gravadora Having min(preco) > (select preco from cd where codigo=6) d. IN: verifica a pertinência em um conjunto Select codigo, nome, preco Where preco in (select min(preco) from cd group by cd_gravadora) e. ANY: permite comparar operadores de comparação de linha com um grupo de linhas. Retorna verdadeiro se a comparação com QUALQUER um dos valores da subconsulta for verdadeira) Select codigo,nome,preco From cd Where preco < ANY (select preco from cd where cd_gravadora = 2) 7
f. ALL: permite comparar operadores de comparação de linha com um grupo de linhas. Retorna verdadeiro se a comparação com TODOS os valores da subconsulta for verdadeira) Select codigo,nome,preco From cd Where preco < ALL (select preco from cd where cd_gravadora = 2) 12) Trabalhando com conjuntos União, intersecção e diferença a. União de duas consultas (lembre-se das regras da álgebra relacional, continuam valendo) i. Expressa pela cláusula UNION e UNION ALL select 1 num, 'abc' string union select 2 num, 'xyz' stri num string 1 abc 2 xyz ii. A diferença entre UNION e UNION ALL é que a primeira remove as duplicatas, a segunda não. iii. O número de linhas do conjunto resultado de um UNION ALL é a soma do número de linhas dos conjuntos que estão sendo combinados. b. Para intersecção e diferença há no padrão ANSII a cláusula INTERSECT, mas só funcionará a partir do SQL Server 2008. Todavia, a intersecção, assim como a diferença (EXCEPT DISTINCT), podem ser realizadas por meio das cláusulas EXISTS ou NOT EXISTS. i. Exemplo de intersecção SELECT DISTINCT cidade FROM autor WHERE EXISTS (SELECT * FROM editora WHERE autor.cidade = editora.cidade) 8
ii. Exemplos de diferença SELECT DISTINCT cidade FROM autor WHERE NOT EXISTS(SELECT * FROM editora WHERE autor.cidade = editora.cidade) 13) View (Visão) a. Consulta armazenada no banco de dados, parece com uma tabela. Pode ser utilizada para fazer consultas como se fosse uma tabela. Ex.: Create view v_empregados as Select e.cod_emp, e.nome, e.sobrenome, YEAR(e.dt_contr) dt_contr From empregados as e Bibliografia ELMASRI, R., NAVATHE, S.B. Sistemas de Banco de Dados. 4ª Ed. São Paulo: Pearson Makron Books, 2005. 9