Sei sulla pagina 1di 16

Comandos DDL Data Definition Language

Criar tabela com create table


Para criar tabelas em um banco de dados, usamos o comando create table. Exemplo: CREATE TABLE empregados ( codigo_empregado int identity primary key, nome varchar(60), data_nascimento datetime, salario decimal(10,2), cidade varchar(60), estado varchar(30) ) Vamos ver o que significa cada termo acima: CREATE TABLE - comando usado para criar uma tabela no banco de dados empregados - nome da tabela codigo_empregado,nome,data_nascimento,salario,cidade e estado - nome dos campos ou colunas da tabela empregados int, varchar, decimal e datetime - define o tipo de dados que cada campo ir receber identity - (apenas SQL Server) indica que o campo ter o seu valor preenchido automaticamente com um nmero sequencial e no reaproveitvel. primary key - indica que o campo ser uma chave do tipo primria varchar(xx) - como visto o varchar indica o tipo de dado que o campo vai receber e o xx a quantidade mxima de caracteres. decimal(10,2) - decimal o tipo, 10 indica que o campo poder receber at 10 posies, sendo 8 inteiro e 2 para as casas decimais. Existem diversos tipos de campos que podemos usar no SQL Server, veja a lista dos principais: Int - Este campo armazenar um valor numrico inteiro Decimal - Aceita valores numricos com casas decimais, neste caso deve ser informado a quantidade de casas decimais desejadas. Exemplo: decimal(10,2), indica que iremos armazenar oito posies numricas e duas casas decimais. Varchar - Aceita valores do tipo texto. necessrio especificar o tamanho desejado. Text - Aceita valores do tipo texto Datetime - Aceita valores do tipo data e hora. O formato de gravao ser dd/mm/aaaa hh:mm:ss Bit - Valor inteiro 0 ou 1

Alterar tabela com alter table


Uma vez criada, uma tabela poder sofrer alteraes em sua estrutura, para realizar essas alteraes usamos o comando ALTER TABLE.

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

Apagar tabela com drop table


Para excluir uma tabela do nosso banco de dados, usamos o comando DROP TABLE como no exemplo a seguir. DROP TABLE empregados Ao excluir uma tabela todos os dados sero excludos, naturalmente.

Comandos DML Data Manipulation Language


Inserir dados com insert into
Para inserir linhas em uma tabela usamos o comando INSERT. Este comando faz parte das instrues DML (Data Manipulation Language) ou Linguagem de manipulao de dados. Exemplo 1: Insert into em SQL Server e Access INSERT INTO empregados(nome, data_nascimento, salario, cidade, estado) VALUES('Jos','05/14/1965',1000,'Braslia','DF') Este mesmo exemplo deve ser tratado de forma diferente para o MySQL, pois o formato de data que ele opera diferente do SQL Server. Veja como fica o mesmo exemplo para o banco MySQL. Exemplo 1:Insert into em MySQL INSERT INTO empregados(nome, data_nascimento, salario, cidade, estado) VALUES('Jos','1965-15-14',1000,'Brasilia','DF') No caso da coluna codigo_empregado ns no podemos usar o insert para tentar inserir um valor nesta coluna, pois a mesma foi criada com o argumento Identity, que faz a gerao automtica dos valores desta coluna. Observe que as colunas do tipo texto (nome, cidade e estado) e a coluna do tipo data (data_nascimento) recebem os valores entre (aspas simples ou apstrofo), porm, na coluna numrica (salrio) o valor foi passado sem o uso de aspas simples. No caso do MySQL a data tem o formado de ano, ms e dia. Exemplo 2: SQL Server e Access INSERT INTO empregados(nome, data_nascimento) VALUES('Joo','12/15/1960') Lembrando que o MySQL trata a data no formato ano-mes-dia, portanto devemos fazer esta alterao. Veja o mesmo exemplo para MySQL. INSERT INTO empregados(nome, data_nascimento) VALUES('Joo','1960-12-15') Observe que no usamos todas as colunas da tabela empregados criada anteriormente, ou seja, voc pode fazer um insert em apenas algumas colunas. Neste caso as demais colunas iro receber valores nulos. Exemplo 3: SQL Server INSERT INTO empregados(nome, data_nascimento, salario) VALUES('Maria','22/06/1954',1420,52) Em MySQL o exemplo fica assim:

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.

Alterar dados com update


Para alterar linhas em uma tabela usamos o comando UPDATE. Este comando faz parte das instrues DML (Data Manipulation Language) ou Linguagem de manipulao de dados. UPDATE empregados set nome='Joo da Silva',cidade='So Paulo' where codigo_empregado=2 No exemplo acima, alteramos o nome para Joo e a cidade para So Paulo, mas importante observar que esta alterao s ir ocorrer onde o cdigo do empregado for igual a 2. A clusula where usada para criar um filtro, ou seja, para determinar quais as linhas sero afetadas. CUIDADO: Se voc no especificar a clusula where as modificaes sero aplicadas em todas as linhas da tabela.

Excluir dados com delete


Para excluir linhas em uma tabela usamos o comando DELETE. Este comando faz parte das instrues DML (Data Manipulation Language) ou Linguagem de manipulao de dados. DELETE FROM empregados where codigo_empregado=1 CUIDADO: Se voc no especificar a clusula where todas as linhas da tabela sero excludas. No exemplo acima, ser excludo a linha em que o cdigo do empregado for igual a 1 A clusula where usada para criar um filtro, ou seja, para determinar quais as linhas sero afetadas. Para excluir todas as linhas de uma tabela use o comando Delete como no exemplo a seguir: DELETE FROM empregados

Comando Select em SQL Server e MySQL


O comando select do SQL usado para efetuar consultas no banco de dados. Veremos como usar este comando nos bancos de dados Mysql e SQL Server. Estes bancos por sua vez apresentam algumas diferenas na maneira de entender o select. Estrutura do comando select: SELECT - Seleciona as colunas da consulta FROM - Seleciona a(s) tabela(s) WHERE - Permite criar condies para filtrar os dados retornados na consulta GROUP BY Agrupa dados na consulta. HAVING Limita o resulta em uma condio estabelecida. ORDER BY Especifica a coluna ou as colunas que sero ordenadas na consulta

Usando o Select na forma bsica


Select * FROM empregados No exemplo acima, usamos as clusulas Select e From. O * (asterisco) indica que todas as colunas da tabela devem ser retornadas. Em muitos casos recomendvel selecionar algumas colunas apenas e no todas como no exemplo acima, isto deve ser considerado pois quando o tamanho do banco aumentar as consultas podero ficar lentas em funo do grande volume de informaes contida nas tabelas.

Selecionando colunas especficas para a consulta


SELECT nome,salario, cidade FROM empregados Para retornar apenas as colunas desejadas, basta indicar os seus nomes na instruo select como no exemplo a seguir, onde selecionamos o nome, salrio e cidade.

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.

Concatenando colunas em uma consulta.


Concatenamos colunas quando queremos unir o resultado de dois campos em um s. Imagine que numa determinada tabela exista o campo nome, sobrenome, rua e numero da casa, neste caso ao fazermos uma consulta seria interessante concatenar o nome com o sobrenome e a rua com o numero da casa. O Mysql trata concatenao de forma diferente do SQL Server e do Access, enquanto que no Mysql usamos a funo concat(), no SQL Server e no Access fazemos pelo sinal de adio. Exemplo de concatenao no Mysql:

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.

Selecionando valores distintos


Para eliminar linhas duplicadas, usamos a palavra-chave DISTINCT na clusula SELECT. SELECT distinct cidade FROM empregados No exemplo acima, usamos a palavra-chave distinct na coluna cidade, mas possvel relacionar mais de uma coluna, por exemplo, cidade e estado. Neste caso a combinao das duas colunas deve ser distinta.

Limitando o n de linhas em uma consulta


Limitar o nmero de linhas usado quando no queremos listar todas as linhas de uma tabela, seja pelo volume de linhas ou por no haver necessidade. O Mysql trata esta questo de forma diferente do SQL Server e do Access. Em SQL Server e Access use o Top para indicar o limite de linhas desejado na consulta. SELECT top 7 * FROM empregados Em Mysql use o Limit para indicar o limite de linhas desejado na consulta. SELECT * FROM empregados limit 0,7 O resultado ser o mesmo, porm a leitura pode ser um pouco diferente, j que o top vai pegar as sete primeiras linhas e o limit vai pegar a partir de 0 at 7.

Usando operadores aritmticos


Para criar expresses aritmticas em uma consulta SQL usamos os operadores abaixo: +(somar) -(subtrair) *(multiplicar) /(dividir)

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)

A condio Like e Not Like


Use a condio LIKE para executar pesquisas curingas. O caracter curinga %(porcentagem) deve ser usado para substituir um caracter ou grupo de caracteres, no importando a sua natureza. Esta condio muito usada na internet para fazer as buscas tradicionais, como no caso dos sites de busca (google, yahoo, MSN, etc). SELECT codigo_empregado, nome, data_nascimento, cidade FROM empregados WHERE nome Like '%MA%' Neste exemplo foi mostrado as linhas cujo nome tinha a sequencia de caracteres MA. Agora veja o mesmo exemplo com o not like. SELECT codigo_empregado, nome, data_nascimento, cidade FROM empregados WHERE nome Not Like '%MA%' Neste caso ser mostrado todas as linhas, exceto as que tiverem MA no nome. OBS: O Access as vezes trata de forma diferentes os caracteres curingas nestas consultas, mas funciona normalmente em Sql Server e MySQL.

Classificando com a clusula Order By


Classifique linhas usando a clusula order by. ASC: Ordem crescente (default) DESC: Ordem decrescente SELECT codigo_empregado, nome, data_nascimento, cidade FROM empregados ORDER BY nome Para classificar em ordem decrescente, basta adicionar DESC. SELECT codigo_empregado, nome, salario, cidade FROM empregados ORDER BY salario desc

Funes de grupo e a clusula Group by


As funes de grupo operam em conjunto de linhas para fornecer um resultado por grupo. A tabela abaixo mostra as funes de grupo e sua aplicao: AVG - Retorna o valor mdio COUNT - Retorna a quantidade de linhas MAX - Retorna o maior valor MIN - Retorna o menor valor SUM - Soma os valores das colunas

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

Join ou Junes SQL


Primeiro vou criar duas tabelas simples no banco de dados: Marcas e Carros. create table carros( marca varchar(100), modelo varchar(100), ano int, cor varchar(100) ) create table marcas( marca varchar(50), nome varchar(50) ) Com as tabelas criadas, vou inserir alguns dados nelas: insert into marcas values('VW','Volkswagem') insert into marcas values('Ford','Ford') insert into marcas values('GM','General Motors') insert into marcas values('Fiat','Fiat') insert into marcas values('Renault','Renault') insert into marcas values('MB','Mercedes Bens') insert into carros values('VW','Fox',2005,'preto'); insert into carros values('VW','Fox',2008,'preto'); insert into carros values('Ford','Ecosport',2009,'verde'); insert into carros values('Ford','KA',2008,'prata'); insert into carros values('Fiat','Punto',2008,'branco'); insert into carros values('Fiat','Uno',2007,'preto'); insert into carros values('Fiat','Stilo',200,'4prata'); insert into carros values('Fiat','Uno',2005,'prata'); insert into carros values('Fiat','Stilo',2008,'verde'); insert into carros values('Fiat','Uno',2009,'branco'); insert into carros values('Peugeot','207',2010,'prata'); insert into carros values('Peugeot','207',2010,'prata'); insert into carros values('Peugeot','207',2007,'azul'); insert into carros values('Chrysler','300 C',2008,'verde'); Vamos analisar como ficaram as duas tabelas: select * from marcas select * from carros Perceba que temos 6 registros na tabela Marcas e 14 registros na tabela Carros. Agora com os dados inseridos, vamos aos exemplos de cross join, inner join, left join, right join e full outer join.

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.

Full Outer Join


A juno full outer join seria o mesmo que left join e right join juntas, ou seja, ela ir mostrar todos as marcas e todos os carros, independente de existir valores correspondente na tabela oposta. Veja um exemplo: select m.nome, c.modelo from marcas as m full outer join carros as c on c.marca = m.marca

Transaes em bancos de dados


Transaes so unidades lgicas que ocorrem em operaes de banco de dados e so responsveis por manter a consistncia, isolamento, coerncia e durabilidade dos dados. Sem as transaes corre-se o risco de termos dados inconsistentes o que tornaria duvidoso ou questionvel qualquer operao de banco e dados. Imagine uma transao bancria. Voc vai a um caixa eletrnico e faz uma transferncia de determinado valor da sua conta para a conta de outra pessoa. Depois de voc informar o valor e os dados da conta que ir receber o crdito, pelo menos duas operaes importantes sero realizadas no banco: 1 Debitar o valor da sua conta 2 Creditar o valor na conta destinatria Mas, e se entre a operao 1 e 2 houver uma falha e o sistema parar justamente no meio? O valor ser debitado e no ser creditado, certo? Para evitar esse problema existe as transaes. Uma transao poder ser implcita ou explicita.

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

Views ou tabelas virtuais no banco de dados


Uma View uma tabela virtual no banco de dados. Em uma view poderemos combinar dados de uma ou mais tabelas, inserir dados ou fazer outras operaes DML. Uma view no armazena os dados em si, ou seja, ela sempre ficar dependente da tabela real. Como criar uma view? Uma view criada com o comando create view, conforme o modelo abaixo: create view fiat as select * from carros where marca='fiat' Criei uma tabela virtual chamada fiat e defini que ela ir acessar a tabela real Carros e filtrar apenas os carros da marca Fiat. O filtro opcional. Para usar a view acima, basta fazer um select comum: select * from fiat Perceba que fizemos um select comum, como se fiat fosse uma tabela do banco de dados, mas ela apenas uma tabela virtual. Voc poder fazer filtros dentro da view, conforme mostrado no modelo abaixo: select * from fiat where combustivel='GNV' Alteraes de dados e estrutura da tabela Se houver alteraes nos dados da tabela, eles sero enxergados normalmente na view. Veja um exemplo abaixo, onde adiciono mais um carro da marca fiat na tabela principal Carros: insert into carros(marca, modelo, combustivel) values('fiat','Mio','GNV') Aps a alterao acima, vamos ver como ficou a view: select * from fiat where combustivel='GNV' Como pode perceber uma tabela virtual sempre retornar os dados atuais da tabela. Porm, se houver alteraes estruturais na tabela principal, elas no sero atualizadas na view. No exemplo abaixo eu adiciono o campo motor na tabela Carros. alter table carros add motor varchar(100) Se dermos um select direto na tabela Carros, veremos que a coluna motor est l, porm, no foi atualizada na view. View para inserir, alterar e excluir dados Podemos usar uma tabela virtual para inserir, alterar e excluir dados sem problemas. Veja os exemplos abaixo: insert into fiat(marca, modelo, cor) values('fiat','Mio','prata') Executamos a view com o filtro modelo:

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:

Vantagens do uso de Views


Possibilita ocultar detalhes e possivelmente a complexidade do banco; Permite disponibilizar ao usurio somente aquilo que ele vai usar Pode ser vista como um filtro de segurana, uma vez que apenas alguns dados do banco ficaram disponveis ao usurio Tem uma performance melhor Pode ser usada como uma estratgia de gerenciamento de permisses, ou seja, pode-se centralizar o acesso externo aos dados atravs de views.

Potrebbero piacerti anche