Escolar Documentos
Profissional Documentos
Cultura Documentos
As alteraes na estrutura da tabela podem ser para: Adicionar um campo Alterar um campo Remover um campo
Adicionar um campo
Vamos adicionar o campo sexo na tabela empregados criada no exemplo acima. ALTER TABLE empregados ADD sexo varchar(10) Observe que usamos a condio ADD que indica que estamos adicionando. possvel ainda adicionar mais de um campo de uma mesma vez, para isto basta usar uma vrgula para separar os itens da lista de campos a serem inseridas. Veja o prximo exemplo onde iremos adicionar os campos CPF e RG na tabela empregados. ALTER TABLE empregados ADD cpf varchar(20),rg varchar(15)
Alterar um campo
Para alterar o campo sexo j existente, usamos a condio MODIFY COLUMN. Exemplo: ALTER TABLE empregados ALTER COLUMN sexo varchar(30) Podemos alterar o tipo e o tamanho, mas no o nome do campo. Veja ainda outro exemplo onde estaremos alterando o tipo de dados do campo cpf. ALTER TABLE empregados ALTER COLUMN cpf int
Remover um campo
Para excluir um campo usamos a condio DROP COLUMN. Exemplo: ALTER TABLE empregados DROP COLUMN sexo ou ainda ALTER TABLE empregados DROP COLUMN cpf,rg
INSERT INTO empregados(nome, data_nascimento, salario) VALUES('Maria','1954-06-22',1420,52) O exemplo acima causou um erro porque houve excesso de valores, ou seja, perceba que o valor 1420,52 tem uma vrgula e isto fez com que o banco de dados entendesse como sendo dois valores. Neste caso a vrgula dever ser substituda por ponto, ao invs de usar 1420,52, use 1420.52.
Renomeando colunas
SELECT nome, data_nascimento As Aniversario, cidade As residencia FROM empregados importante observar que a coluna foi renomeada apenas nesta consulta, mas no houve alterao no nome da coluna no banco de dados.
SELECT concat(nome, ' mora em ', cidade, '/', estado FROM empregados Exemplo de concatenao em SQL Server ou Access SELECT nome + ' mora em ' + cidade + '/' + estado FROM empregados O sinal + (mais) indica concatenao e deve ser usado para concatenar colunas ou uma coluna com um texto. S poder ser concatenado colunas do tipo texto, caso for necessrio concatenar colunas do tipo data ou numrico, necessrio fazer a converso dessas colunas para texto. A funo CONVERT() do SQL Server usada para fazer a converso de valores de uma coluna. Exemplo 1: SELECT nome + ' ganha ' + convert(varchar, salario) FROM empregados Exemplo 2: SELECT nome + ' nasceu em ' + Convert(VarChar, data_nascimento, 103) FROM empregados No primeiro caso, estamos convertendo o valor da coluna salrio para texto, j que esta coluna do tipo Decimal. No segundo exemplo, estamos convertendo o valor de uma coluna do tipo data para texto. Perceba que neste caso usamos o 103 na funo, isto necessrio para informarmos que queremos que a data seja convertida no formato dd/mm/aaaa.
Os operadores acima podem ser usados apenas em colunas do tipo numrico. Voc poder usar operadores aritmticos em qualquer clusula, exceto na clusula FROM. SELECT nome, salario, salario*12 As salario_anual FROM empregados No exemplo acima multiplicamos o valor da coluna salrio por 12 nomeamos a sada de salrio_anual.
Precedncia de operadores
Quando usamos vrios operadores em uma consulta importante observarmos qual ser a precedncia dos operadores. Na tabela empregados temos a coluna salrio. Alm do salrio, cada empregado ir receber no final do ano um bnus de 200. Para descobrir quanto esse empregado ir receber anualmente, temos de multiplicar o salrio por 12 meses e adicionar o bnus de 200. SELECT nome, salario, 12*salrio+200 As salario_anual FROM empregados No exemplo acima cada empregado receberia o bnus uma vez no ano, mas vamos considerar agora que o bnus passou a ser mensal. Neste caso ser necessrio somar o salrio mais o bnus e depois multiplicar por 12. Para resolver esse problema teremos de mudar a precedncia e para isto usamos os parnteses, ou seja, tudo que estiver dentro do parntese executado primeiro. Veja o mesmo exemplo com a mudana de precedncia: SELECT nome, salario, 12*(salario+200) As salario_anual FROM empregados
Operadores de comparao
Os operadores de comparao so usados em condies que comparam uma expresso a outro valor ou expresso. A tabela abaixo mostra os operadores: = Igual a > Maior que >= Maior ou igual a que < Menor que <= Menor ou igual a que <> Diferente de
SELECT codigo_empregado, nome, salario FROM empregados WHERE codigo_empregado=8 No exemplo acima, usamos o igual para criar um filtro na clusula where, este filtro diz que os dados retornados devero ser do cdigo de empregado IGUAL a 8.
Operadores lgicos
O uso de um operador lgico faz com que duas condies tenham de produzir um resultado nico. Uma linha s poder ser retornada se o resultado global da condio for verdadeiro. A tabela abaixo mostra os operadores lgicos disponveis em SQL: AND Retorna TRUE se ambas as condies forem verdadeiras OR Retorna TRUE se uma das condies for verdadeira NOT Retorna TRUE se a condio seguinte for falsa No exemplo abaixo uma linha ser retornada se o empregado for do estado de SP e o seu salrio maior que 2200. SELECT nome, salrio, cidade, estado FROM empregados WHERE estado='SP' and salario > 2200 Para produzir um resultado diferente basta alterar esta consulta, trocando o operador AND por OR. SELECT nome, salrio, cidade, estado FROM empregados WHERE estado='SP' or salario > 2200 Neste caso uma linha ser retornado se o empregado for do estado de SP ou se o seu salrio for maior que 2200.
Filtrando dados
Filtrar dados com between, like e IN em consultas a banco de dados uma prtica comum e suportada pelos principais bancos de dados, como o SQL Server, Access, Mysql, Oracle e outros. Filtros so extremamente teis para dar performance s consultas, aliviando possveis sobrecargas no banco de dados.
A condio Between
Use a condio Between para retornar linhas baseadas em uma faixa de valores. Muito propcio para campos do tipo numrico ou data. Como exemplo poderemos efetuar uma consulta para retornar o salrio dos empregados que ganham entre 1000 e 5000 ou uma consulta por todos os prdios tombados entre o ano 2000 e 2005. Veja um exemplo abaixo: SELECT nome, data_nascimento, cidade, estado FROM empregados WHERE data_nascimento between '01/01/1975' and '12/13/1985' No exemplo as linhas retornadas tem a data de nascimento do empregado entre 01 de janeiro de
1975 e 13 de dezembro de 1985. (observe que a comparao de data deve ser feita no formato americano). Alem da coluna do tipo data possvel tambm usar o between em uma coluna numrica.
A condio IN e Not IN
Use a condio IN para retornar linhas cujos valores atendem a uma determinada lista ou a NOT IN para os valores que no atendem a lista. Entenda por lista valores separados por vrgulas, exemplo: 1,2,3,4 ou 'um','dois','trs'. Esta condio poderia efetuar uma imobiliria encontrar por exemplo, todos os imveis alugados nas cidades de So Paulo, Rio de Janeiro e Belo Horizonte ou todos os prdios comerciais de luxo disponveis nos bairros do Broklin, Morumbi e Vila Olmpia. Veja um exemplo abaixo: SELECT cdigo_empregado, nome, data_nascimento, cidade FROM empregados WHERE codigo_empregado in(3,7,9,11,14) Neste exemplo as linhas retornadas tem o valor da coluna cdigo_empregado igual a 3,7,9,11 e 14. Se trocarmos a condio IN por NOT IN, teremos o resultado inverso. SELECT cdigo_empregado, nome, data_nascimento, cidade FROM empregados WHERE codigo_empregado not in(3,7,9,11,14)
Uma funo de grupo geralmente usada coma a clusula group by, j que esta clusula tem a finalidade de criar grupos de dados. Veja o exemplo abaixo: SELECT cidade, Sum(salario) As Total_salario FROM empregados GROUP BY cidade Para ver o funcionamento das outras funes de grupo, basta substituir a funo sum por outra da tabela mostrada acima.
Clusula Having
Use a clusula having para especificar quais grupos sero exibidos e, desta forma, restringir ainda mais os grupos com base nas informaes agregadas. SELECT cidade, Count(cidade) As Total_cidade FROM empregados GROUP BY cidade HAVING Count(cidade) > 2
Cross Join
A juno cross join ir juntar todos os registros da tabela marcas com todos os registros da tabela carros, formando um produto cartesiano. Veja o exemplo abaixo: select m.nome, c.modelo from marcas as m cross join carros as c
Inner Join
A juno inner join ir juntar os registros da tabela marca que tiver um correspondente na tabela carros. Essa correspondncia feita pelos campos marca que est presente nas duas tabelas. Embora no esteja explcito, mas o campo marca seria a chave primria (na tabela marcas) e chave estrangeira (na tabela carros). Veja o exemplo: select m.nome, c.modelo from marcas as m inner join carros as c on c.marca = m.marca Apenas 10 registros satisfazem o inner join. Podemos dizer que 10 carros esto associados a alguma marca, enquanto que os demais no.
Left Join
O left join ir fazer a juno das duas tabelas dando preferncia aos registros da tabela marcas. Assim, todos os registros da tabela marcas sero mostrados, independente de haver correspondncia na tabela carros. Quando no houver correspondncia na tabela carros, ser mostrado o valor NULL ou nulo. Exemplo: select m.nome, c.modelo from marcas as m left join carros as c on c.marca = m.marca Percebam que as marcas General Motors, Renault e Mercedes Bens no tem nenhum carro cadastrado, mesmo assim elas apareceram no resultado.
Right Join
A juno right join funciona de forma inversa ao left join. Aplica-se o mesmo conceito, porm, de forma invertida. Com o right join ser mostrado todos os carros, mesmo aqueles que no estejam associados a nenhum registro da tabela marcas. Exemplo: select m.nome, c.modelo from marcas as m right join carros as c on c.marca = m.marca 207 e 300 C so modelos que esto cadastrados em carros, mas no esto associados a nenhuma marca.
Transao implcita
A transao implcita inicia quando um dos seguintes comandos so executados: Insert, Update, Delete, Create, Drop, Alter, entre outros.
Transao explcita
A transao explicita iniciada pelo comando Begin transaction e encerrada por um dos seguintes comandos: Commit. Confirma os dados alterados Rollback. Desfaz os dados alterados. Exemplos de transaes Primeiro, criaremos uma tabela com a seguinte estrutura: create table contas( numero varchar(50), debito decimal(10,2), credito decimal(10,2) ) Exemplo de Rollback Aps criar a tabela, a transao ser iniciada e um registro ser inserido: begin transaction insert into contas values('500-x',80,0) Feito isso, vou executar trs instrues em seguida, sendo um deles o comando Rollback para desfazer o insert. select * from contas rollback select * from contas Perceba que o primeiro select mostrou que o registro havia sido feito e o segundo select mostrou
que o mesmo havia sido desfeito. Exemplo de Commit Podemos usar o mesmo exemplo, mas trocando o Rollback pelo Commit. Veja o resultado: begin transaction insert into contas values('600-x',110,0) select * from contas commit select * from contas Exemplos condicionais de Commit e Rollback Os exemplos acimas mostram o uso isolado do Commit e Rollback para conformar ou desfazer uma operao no banco de dados, mas podemos fazer isso baseado em uma condio. Essa condio poder ser a existncia ou no de erros durante a transao. O exemplo abaixo explica melhor isso: select * from contas begin transaction insert into contas values('1000-x',500,0) select * from contas insert into contas values('2000-x',0,500) if @@ERROR <> 0 rollback else commit select * from contas No exmplo acima fao dois inserts, logo aps iniciar uma transao e depois verifico se houve erros. Esta verificao de erros est baseada na varivel global @@ERROR que sempre retornar 0 se no houve erros. Agora, usando a mesma transao acima, vou inserir um erro na segunda instruo insert. (note que o valor est com virgula e isto causar um erro): select * from contas begin transaction insert into contas values('3000-x',850,0) select * from contas insert into contas values('4000-x',0,850,00) if @@ERROR <> 0 rollback else commit select * from contas Ao executar novamente o select, notaremos que a transao foi desfeita: select * from contas
select * from fiat where modelo='Mio' Agora a alterao: update fiat set ano=2011 where modelo='Mio' and cor='prata' Ao executarmos novamente a view, veremos o valor alterado: Agora, a excluso: delete from fiat where modelo='Mio' O resultado abaixo mostra que no h mais o modelo Mio: