Modelagem de Bancos de Dados sem Segredos — Parte 06 (Final)
A quinta parte pode ser lida no seguinte link:
A Linguagem SQL
Definição
SQL — onde a pronuncia é “ess-kiú-éll” ou “sequel” que é como a maioria das pessoas pronunciam — “Structured Query Language” (linguagem estruturada de pesquisa), é composta por um grupo de facilidades para definição, manipulação e controle de dados em um banco de dados relacional.
História
Em 1970, E.F.Codd, nessa ocasião membro do Laboratório de pesquisa da IBM em San Jose, Califórnia, publicou um trabalho, agora clássico: “A Relational Model of Data for Large Shared Data Banks” — um modelo relacional de dados para grandes bancos de dados compartilhados — (Communications of the ACM, Vol.13, №6, junho de 1970), em que se estabeleceu um grupo de princípios abstratos sobre gerência de banco de dados: o assim chamado modelo relacional.
Todo o campo da tecnologia de banco de dados relacional tem suas origens nesse trabalho. As ideias de Codd incentivaram experiências e pesquisas em universidades, laboratórios de pesquisa industrial e estabelecimentos semelhantes, que resultaram em diversos produtos relacionais agora disponíveis no mercado.
Um aspecto em particular da referida pesquisa era o projeto de implementação de protótipo de uma série de linguagens relacionais. Uma linguagem relacional é uma linguagem que efetua, em alguma forma sintática ou concreta, alguma ou todas as características do modelo relacional abstrato. Diversas dessas linguagens foram criadas no início e no meio dos anos 70.
Uma dessas linguagens em particular foi a chamada SEQUEL (“Structured English Query Language” — Linguagem de Pesquisa em Inglês Estruturado), definida por D.D. Chamberlin e outros (1974) no laboratório de Pesquisas da IBM em San Jose, Califórnia, e inicialmente implementada em um protótipo da IBM chamado SEQUEL-SRM (1974–75).
Em parte como resultado da experiência com o SEQUEL-XRM, foi definida em 1976–77 uma versão revisada do SEQUEL, chamada SEQUEL/2. (O nome foi posteriormente alterado para SQL por razões legais). Começou o trabalho em outro protótipo mais ambicioso da IBM, chamado System R. O System R., uma implementação de um grande subconjunto da linguagem SQL, tornou-se operacional em 1977 e foi posteriormente instalado em uma série de estabelecimentos usuários, tanto internos à IBM quanto clientes selecionados dessa empresa.
Em grande parte, graças ao sucesso do System R, tornou-se aparente ao final dos anos 70 que a IBM provavelmente desenvolveria um ou mais produtos baseados na tecnologia do System R — especificamente, produtos que implementassem a linguagem SQL. Como resultado, outros vendedores também começaram a construir seus próprios produtos baseados no SQL. De fato, pelo menos um desses produtos, a saber, o ORACLE, da Relational Software Inc. (que passou a se chamar Oracle Corporation), foi introduzido no mercado antes dos próprios produtos da IBM. Depois, em 1981, a IBM anunciou um produto SQL, chamado SQL/DS para o ambiente DOS/VSE. A seguir a IBM anunciou uma outra versão do SQL/DS para o ambiente VM/CMS (1982), e outra para MVS chamada DB2, altamente compatível com o SQL/DS (1983). Até hoje a IBM comercializa o seu banco de dados relacional DB2.
Nos anos seguintes, diversos outros vendedores também anunciaram produtos baseados no SQL. Esses produtos incluíam tanto produtos inteiramente novos como o DG/SQL (Data General Corporation, 1984) e SYBASE (Sybase Inc., 1986), quanto interfaces do SQL para produtos estabelecidos como o INGRES (Relational Technology INc., 1981, 1985) e o IDM (Britton-Lee Inc., 1982). Há atualmente muitos produtos no mercado que dão suporte a algum dialeto do SQL, rodando em máquinas que cobrem toda a faixa desde microcomputadores até de grande porte. O SQL se tornou o padrão no mundo do banco de dados relacional.
Padrão ANSI e Funcionalidade
O SQL também se tornou o padrão oficial. Em 1982, o American National Standards Institute (ANSI) encarregou seu Comitê de Banco de Dados (chamado X3H2) de desenvolver uma proposta para uma linguagem relacional padrão.
Alguns bancos de dados implementam comandos que não são compatíveis com padrão ANSI tornando seu uso um pouco diferente dos outros SGBDs.
A função da linguagem SQL é dar suporte à definição, manipulação e controle dos dados em um banco de dados relacional. Um banco de dados relacional é simplesmente um banco de dados que é percebido pelo usuário como um grupo de tabelas — onde tabela é uma coleção de linhas e colunas.
Linguagem de Múltiplo Uso
A linguagem SQL assume um papel muito importante nos SGBDs, podendo ter muitos enfoques:
- Linguagem Interativa de Consulta: através de comandos SQL, os usuários podem montar consultas poderosas sem a necessidade da criação de um programa, podendo utilizar Forms ou ferramentas de montagem de relatórios;
- Linguagem de Programação para Acesso a BDs: comandos SQL embutidos em programas de aplicação que acessam dados armazenados;
- Linguagem de Administração de BDs: o responsável pela administração do banco de dados (DBA) pode utilizar comandos SQL para realizar suas tarefas;
- Linguagem Cliente/Servidor: os programas (cliente) dos computadores pessoais usam comandos SQL para se comunicarem através de uma rede local, compartilhando os dados armazenados em um único local (servidor). A arquitetura cliente/servidor minimiza o tráfego de dados pela rede.
- Linguagem de Banco de Dados Distribuído: a SQL auxilia na distribuição dos dados através de vários nós conectados ao sistema de computação. Auxilia também na comunicação de dados com outros sistemas;
- Caminho de Acesso a Outros Bancos de Dados em Diferentes Máquinas: a SQL auxilia na conversão entre diferentes produtos de banco de dados colocados em diferentes máquinas (de micro a mainframe).
Vantagens
Dentre as vantagens da linguagem SQL, podemos citar:
- Independência de Fabricante: a SQL é oferecida em praticamente todos os SGBDs.
- Múltiplas Visões de Dados: a SQL permite ao criador do banco de dados levar diferentes visões dos dados a diferentes usuários.
- Consulta Interativa: a SQL provê um acesso rápido aos dados, fornecendo respostas ao usuário a questões complexas, em minutos ou segundos.
- Redução dos Custos com Treinamento: baseado no item anterior, as aplicações podem se movimentar de um ambiente para o outro sem que seja necessária uma reciclagem da equipe de desenvolvimento.
- Inglês Estruturado de Alto Nível: a SQL é formada por um conjunto bem simples de sentenças em inglês, oferecendo um rápido e fácil entendimento.
- Portabilidade Entre Dispositivos: a SQL pode ser utilizada desde dispositivos móveis, como celulares, passando por computadores pessoais, até computadores de grande porte.
As Partes da Linguagem SQL
A linguagem SQL pode ser dividida nas seguintes partes:
- Data Definition Language (DDL) (Linguagem de Definição de Dados). A SQL DDL fornece comandos para definição e modificação de esquemas de relação, remoção de relações e criação de índices. Os principais comandos que fazem parte da DDL são: CREATE, ALTER, DROP.
- Data Manipulation Language (DML) (Linguagem de Manipulação de Dados). A SQL DML inclui uma linguagem de consulta baseada na álgebra relacional e no cálculo relacional. Compreende também comandos para inserir, remover e modificar informações em um banco de dados. Os comandos básicos da DML são: SELECT, INSERT, UPDATE, DELETE.
- Data Control Language (Linguagem de Controle de Dados). É o conjunto de comandos que fazem o cadastramento de usuários e determina seu nível de privilégio para os objetos do banco de dados. Os principais comandos são: GRANT, REVOKE.
- Transactions control (Controle de Transações). A SQL inclui comandos para especificação do início e fim das transações. Diversas implementações permitem o trancamento explícito de dados para o controle de concorrência. Principais comandos: COMMIT, ROLLBACK, SAVEPOINT.
Conjuntos e Álgebra Relacional
Em bancos de dados relacionais as informações são guardadas em tabelas. Para recuperar uma informação necessária ao usuário, às vezes é preciso buscá-la em várias tabelas diferentes, estabelecendo-se relacionamentos entre elas. Esta é a origem do nome deste paradigma de banco de dados (relacional).
Tabelas são, na verdade, conjuntos. Por exemplo, quando em um sistema existe uma tabela de vendas, esta tabela corresponde ao conjunto de todas as vendas feitas por uma empresa. A tabela de vendedores corresponde ao conjunto de vendedores que trabalham em uma empresa. Cada linha ou registro da tabela corresponde a um elemento do conjunto.
Consultas e alterações na base de dados correspondem a operações realizadas sobre conjuntos. Estas operações são definidas pela álgebra relacional.
Consultas em banco de dados não passam de problemas de álgebra relacional. Assim como acontece com a álgebra “tradicional”, os operadores possuem algumas propriedades. Sabemos que 2 x 3 = 3 x 2. Isto significa que, quando precisamos contar uma expressão de álgebra relacional para chegar a um determinado resultado, podemos fazê-lo de mais de uma forma, pois várias expressões levam ao mesmo resultado. Em outras palavras, quando o banco de dados precisa montar uma expressão algébrica para encontrar um resultado, ele deve escolher uma entre várias. Apesar de apresentarem o mesmo resultado, as expressões são diferentes e a diferença fará com que o banco de dados adote um diferente caminho para resolver cada uma. Escolher o caminho mais curto é uma das grandes atribuições do banco de dados. Esta é a missão do otimizador, um subsistema do banco de dados responsável por determinar o plano de execução para uma consulta.
Você que está desenvolvendo seu sistema e consultando o banco de dados não se preocupa com isso. O otimizador está lá e fará o seu trabalho. Sua preocupação será modelar o banco de dados da melhor forma possível, seguindo as regras de normalização vistas anteriormente neste livro.
Comandos Básicos
A linguagem SQL possui uma série de comandos para manipulação do Banco de Dados. Desde comandos simples até os mais complexos. Um detalhe importante é que a linguagem SQL é declarativa. Isto quer dizer que nós simulamos uma pergunta ao banco de dados para que ele nos “responda” através de campos formando registros. Esse detalhe torna o aprendizado da SQL muito fácil para quem está iniciando na linguagem.
Existem vários serviços online que permitem o teste de bancos de dados e de comandos SQL. Você pode usar o seguinte: https://sqliteonline.com/. Esse serviço permite que você selecione dentre os bancos SQLite, MariaDB, PostgreSQL, MS-SQL e Oracle. É muito fácil de utilizar.
O site já vem com uma tabela pronta chamada DEMO com três campos: id, name e hint. É possível que o site esteja diferente no momento em que você esteja lendo esse livro. Para evitar problemas com testes, vamos criar nossa própria tabela e realizar testes em cima dela.
Vamos usar o modelo do grupo pessoa que criamos anteriormente. Acesse o MySQL Workbench e clique com o botão direito em cima da tabela PESSOA. Selecione a opção “Copy SQL to Clipboard”. Isso fará com que o comando para a criação da tabela PESSOA seja copiado para a área de transferência do computador.
Após isso, acesse o site https://sqliteonline.com/, clique com o botão direito na área de texto e selecione a opção “Colar”.
O resultado pode ser visto na figura a seguir.
Agora clique no botão Run (botão azul) e veja o que acontece. Você verá alguns erros na tela. Isso ocorre porque estamos tentando criar uma tabela com alguns termos específicos para o MySQL, mas o banco de dados que está selecionado é o SQLite.
Para resolver esse problema, no site https://sqliteonline.com/ selecione o banco de dados MariaDB (que é derivado do MySQL) e cole novamente a instrução para a criação da tabela. Após isso clique no botão Run.
O resultado será o que você pode ver na figura a seguir.
Veja que agora temos duas tabelas no banco de dados MariaDB: PESSOA e demo.
Instrução SELECT
Instrui o programa principal do banco de dados para retornar a informação como um conjunto de registros.
Sintaxe
Select <Campos> <as Alias> from <Tabelas> [where <condições>] [<campo> like %] [order by <campo> ASC DESC] [GROUP BY <campo>]
Select é o comando de pesquisa;
<Campos> são os campos a serem incluídos na pesquisa, separados por vírgula (,). Caso você queira selecionar todos os campos de todas as tabelas, simplesmente coloque um asterisco (*) no lugar;
<as Alias> Os nomes que serão usados como títulos de colunas em vez dos nomes originais das colunas na tabela.
<Tabelas> são os nomes das tabelas que entrarão na pesquisa, também separados por vírgula (,).
<Condições> São as condições para consulta no banco de dados.
<like %> Quando queremos fazer uma busca por qualquer lugar do(s) campo(s). O caractere % funciona como um curinga, assim como o * funciona como um curinga no Windows.
Where, order by e group by são opcionais. Utilize a cláusula where se você quiser fazer restrições na pesquisa (por exemplo, caso queira somente os clientes do Ceará). A cláusula order by será utilizada caso você queira que a tabela seja ordenada por algum campo (por cliente, por exemplo). Quando se utiliza a cláusula Order By podemos implementar ainda o ASC (ordem ascendente) e o DESC (ordem descendente). A cláusula Group By serve para agrupar o resultado de uma consulta através de um campo ou um conjunto de campos.
Vejamos alguns exemplos na prática.
Retorna todos os campos de PESSOA e todos os registros
select * from PESSOA
Note que não retornou nada na tela. Isso ocorre porque ainda não temos dados na nossa tabela PESSOA.
Vamos inserir alguns registros com os comandos abaixo. Posteriormente vamos compreender para que serve o comando INSERT. No momento, apenas repita os comandos abaixo e clique no botão Run para que esses registros sejam inseridos no banco de dados.
insert into PESSOA (ID, NOME, TIPO, EMAIL, SITE, CLIENTE, FORNECEDOR, COLABORADOR, TRANSPORTADORA) values(‘1’,’TESTE PESSOA FISICA’,’F’,’pf@gmail.com’,NULL,’S’,’S’,’S’,’S’);
insert into PESSOA (ID, NOME, TIPO, EMAIL, SITE, CLIENTE, FORNECEDOR, COLABORADOR, TRANSPORTADORA) values(‘2’,’TESTE PESSOA JURIDICA’,’J’,’pj@gmail.com’,NULL,’S’,’S’,’S’,’S’);
insert into PESSOA (ID, NOME, TIPO, EMAIL, SITE, CLIENTE, FORNECEDOR, COLABORADOR, TRANSPORTADORA) values(‘3’,’eije’,’F’,NULL,NULL,’S’,’S’,’S’,’S’);
insert into PESSOA (ID, NOME, TIPO, EMAIL, SITE, CLIENTE, FORNECEDOR, COLABORADOR, TRANSPORTADORA) values(‘4’,’karen’,’F’,NULL,NULL,’N’,’N’,’S’,’N’);
insert into PESSOA (ID, NOME, TIPO, EMAIL, SITE, CLIENTE, FORNECEDOR, COLABORADOR, TRANSPORTADORA) values(‘5’,’joao’,’F’,NULL,NULL,’N’,’N’,’S’,’N’);
insert into PESSOA (ID, NOME, TIPO, EMAIL, SITE, CLIENTE, FORNECEDOR, COLABORADOR, TRANSPORTADORA) values(‘6’,’kevin’,’F’,’kevin@gmail.com’,NULL,’N’,’N’,’S’,’N’);
Com os comandos acima inseriremos 6 registros na tabela pessoa. Hora de testar novamente a seleção. Lembra como fazemos para retornar todos os campos de PESSOA e todos os registros?
select * from PESSOA
Veja o resultado na figura a seguir.
O comando a seguir retorna apenas o ID e o NOME:
select ID, NOME from PESSOA
O comando a seguir retorna apenas o ID e o NOME usando o Alias
select ID as CODIGO, NOME as NOME_DO_CLIENTE from PESSOA
Veja que os campos foram retornados como CODIGO e NOME_DO_CLIENTE porque utilizamos o Alias (apelido). No banco de dados os nomes dos campos permanecem os mesmos (ID e NOME). Nós não alteramos os nomes dos campos, apenas “trocamos” os nomes por apelidos especificamente nessa consulta. Você pode fazer isso quantas vezes desejar, inclusive para exibir dados para usuários finais com nomes de colunas mais fáceis de ler.
Vamos agora criar uma consulta com filtro. Observe:
select * from PESSOA where nome like ‘k%’
Dois registros foram retornados, pois temos duas pessoas cujo nome começam com a letra “k”. Sabe como diríamos o comando acima em português? Assim: “selecione todos os campos da tabela PESSOA onde o campo nome começa com a letra ‘k’”.
E se nós quiséssemos todos os registros que terminam com a letra “a”, como seria a consulta?
select * from PESSOA where nome like ‘%a’
Também podemos selecionar todas as pessoas que possuem “j” no nome:
select * from PESSOA where nome like ‘%j%’
Vamos selecionar agora todas as pessoas que são CLIENTE. Observe:
select * from PESSOA where cliente = ‘S’
Você vai usar o “like” na sua consulta apenas quando quiser utilizar o curinga “%”. Caso queira um filtro exato, utilize o sinal de igual “=” no lugar do like.
Agora vamos retornar todos os registros ordenados pelo nome. Insira um comando por vez. O primeiro comando vai ordenar por padrão em ordem ascendente, mas nós podemos informar isso explicitamente conforme você pode ver no segundo comando. O terceiro comando vai ordenar em ordem descendente. Observação: não coloque as três linhas ao mesmo tempo para execução. Utilize uma por vez para ver o resultado.
select * from PESSOA order by nome
select * from PESSOA order by nome asc
select * from PESSOA order by nome desc
Vamos agora trabalhar com mais de uma tabela. Para isso você deverá criar outra tabela no banco de dados remoto. Siga os mesmos passos que fizemos para a criação da tabela PESSOA, só que agora realize os passos para a tabela PESSOA_ENDERECO. Temos agora três tabelas no banco de dados:
- PESSOA
- PESSOA_ENDERECO
- DEMO
Vamos inserir alguns dados nessa nova tabela para podermos brincar um pouco selecionando os registros das duas tabelas. Execute os seguintes comandos para inserir dados na tabela PESSOA_ENDERECO (mais a frente você aprenderá sobre o comando INSERT INTO):
insert into PESSOA_ENDERECO (ID, ID_PESSOA, LOGRADOURO, NUMERO, BAIRRO, CIDADE) values(‘1’,’1',’LOGRADOURO PESSOA FISICA’,’2',’BAIRRO 1',’CIDADE 1');
insert into PESSOA_ENDERECO (ID, ID_PESSOA, LOGRADOURO, NUMERO, BAIRRO, CIDADE) values(‘2’,’2',’LOGRADOURO PESSOA JURIDICA’,’3',’BAIRRO 2',’CIDADE 2');
insert into PESSOA_ENDERECO (ID, ID_PESSOA, LOGRADOURO, NUMERO, BAIRRO, CIDADE) values(‘3’,’2',’teste’,NULL,NULL,NULL);
Vamos agora consultar o nome da pessoa para cada endereço que se encontra no banco de dados.
select PESSOA.nome, PESSOA_ENDERECO.logradouro, PESSOA_ENDERECO.bairro, PESSOA_ENDERECO.cidade from PESSOA, PESSOA_ENDERECO where PESSOA_ENDERECO.ID_PESSOA = PESSOA.ID
Observe bem o comando anterior. Você está selecionando o nome da tabela pessoa e os demais campos da tabela endereço. Mas como é que o banco sabe que o endereço pertence a pessoa? Lembre dos relacionamentos. No caso da tabela PESSOA_ENDERECO existe um campo chamado ID_PESSOA que armazena o ID da pessoa relacionada àquele endereço. O segredo está no trecho: where PESSOA_ENDERECO.ID_PESSOA = PESSOA.ID. É nesse trecho que informamos que o banco deve trazer as pessoas vinculadas aos seus endereços.
Você viu anteriormente como é possível colocar apelidos (Alias) nos campos da tabela. Pois saiba que também é possível colocar um apelido na tabela. Eu vou usar a mesma consulta anterior para mostrar como fazer isso. Observe:
select p.nome, e.logradouro, e.bairro, e.cidade from PESSOA p, PESSOA_ENDERECO e where e.ID_PESSOA = p.ID
Ao executar o comando acima você verá que vai funcionar da mesma forma e vai retornar o mesmo resultado. O que fizemos foi informar que PESSOA agora é chamada de “p” e que PESSOA_ENDERECO agora é chamada de “e”. O comando fica bem menor, mais limpo. É uma prática comum e corriqueira entre profissionais que trabalham com bancos de dados.
Parâmetros Adicionais
1. Sum (<Campo>), para somar o valor total desse campo de todos os registros na tabela;
Normalmente utilizamos esse comando em campos de valor onde faça sentido uma soma. Como não temos esse campo na tabela PESSOA, façamos um teste no campo ID. Nós temos seis registros e o ID está numerado de 1 a 6. Logo, se somarmos os IDs (1+2+3+4+5+6) teremos como resultado o número 21. Faça o teste com o seguinte comando:
select sum(ID) from PESSOA
2. Avg (<Campo>), para extrair a média aritmética desse campo de todos os registros na tabela;
Vamos fazer o mesmo teste usando o campo ID:
select avg(ID) from PESSOA
O resultado será 3,5. Por que? Porque (1+2+3+4+5+6) / 6 = 3,5.
3. Min / Max (<Campo>), que exibe qual é o menor (ou maior) valor desse campo em todos os registros, respectivamente.
O campo ID será usado novamente para testes aqui. Com o Min o resultado será “1” e com o Max o resultado será “6”.
select min(ID) from PESSOA
select max(ID) from PESSOA
4. Count — Retorna o número de registros baseado numa determinada consulta.
Aqui teremos a quantidade de registros. No caso da tabela PESSOA o resultado será 6 e na tabela PESSOA_ENDERECO o resultado será 3.
select count(*) from PESSOA
5. Between — Significa literalmente Entre. Muito usado para fazer consultas requerendo o resultado entre duas datas.
Nós não temos datas nas tabelas que estamos usando aqui. Mas podemos usar o between para consultar quais os registros que estão entre os IDs 2 e 5. Veja:
select * from PESSOA where ID between 2 and 5
Serão exibidos todos os registros cujos ID são: 2, 3, 4 e 5.
Instrução INSERT INTO
Até o momento vimos como extrair informações do banco de dados usando a linguagem SQL. Vimos também como inserir dados, mas não tivemos a explicação de como isso funciona. É o veremos a seguir.
Sintaxe
Insert Into TABELA (CAMPO1, CAMPO2) Values (VALOR1,VALOR2).
Observe que podemos citar em quais campos queremos inserir os dados e logo depois informamos quais dados que vamos inserir.
insert into PESSOA (nome) values (‘CARLOS PEREIRA’)
A instrução acima vai inserir o nome Carlos Pereira no campo Nome da tabela PESSOA.
No caso da tabela PESSOA o campo ID é autoincremento, portanto não é necessário inserir dados nele. Se você selecionar novamente todos os registros da tabela PESSOA, verá que agora temos um registro com ID igual a 7 e nome igual a ‘Carlos Pereira’.
Vamos a outro comando:
insert into PESSOA (nome, email) values (‘MARIA DE SOUSA’, ‘maria@gmail.com’)
No exemplo anterior inserimos dados em dois campos. Veja que os campos não precisam estar na ordem. O BD se encarrega de colocar os dados nos campos certos. Não é necessário também citar todos os campos, aqueles que não forem citados na instrução ficarão com seus valores nulos, ou seja, recebem o valor NULL.
Temos agora 8 registros na nossa tabela PESSOA. Selecione novamente todos os registros da tabela PESSOA para conferir.
Instrução UPDATE
Cria uma consulta atualização que altera os valores dos campos em uma tabela especificada com base em critérios específicos.
Sintaxe
UPDATE tabela SET valor_novo WHERE critério;
Por exemplo, digamos que eu queira aumentar o preço de meus produtos em 10%. Eu poderia fazer um laço para implementar isso em qualquer linguagem. Em Delphi ficaria assim:
Table1.Open;
Table1.First;
While not Table1.Eof do Begin
Table1.Edit;
Table1Valor.Value := Table1Valor.Value * 1.1;
Table1.Post;
Table1.Next;
End;
Observe bem. Quantas linha para fazer algo tão simples. E como ficaria em SQL?
Update Produto set valor = valor * 1.1
Imagine que eu quisesse apenas alterar os preços dos produtos de Marca = ATICA.
Para fazer isso de forma procedural, teria que inserir uma instrução de seleção. Veja como ficaria.
Table1.Open;
Table1.First;
While not Table1.Eof do Begin
if Table1Marca.Value = 'ATICA' then begin
Table1.Edit;
Table1Valor.Value := Table1Valor.Value * 1.1;
Table1.Post;
end;
Table1.Next;
End;
E em SQL ficaria assim:
Update Produto set valor = valor * 1.1 where Marca=“ATICA”
Faça alguns updates na tabela PESSOA. Por exemplo, atualize o campo CONTADOR para “S” caso CLIENTE seja “N”.
Instrução DELETE
Cria uma consulta exclusão que remove registros de uma ou mais tabelas listadas na cláusula FROM que satisfaz a cláusula WHERE. Não é possível remover campos específicos, apenas registros.
Sintaxe
DELETE FROM tabela WHERE critério
Tenha cuidado ao executar esse comando, pois ele não tem volta. A não ser que você esteja controlando as transações e aplique um RollBack (cancele a transação).
delete from PESSOA where tipo=’J’
Se você tentar executar o comando acima, receberá um erro informando que não é possível excluir o registro. Isso ocorre porque existem endereços vinculados a essa pessoa. É a Integridade Referencial do banco de dados funcionando! Tente o comando abaixo.
delete from PESSOA where tipo is null
Serão excluídos os dois registros que inserimos por último. Como nós não informamos o TIPO de pessoa (‘F’ ou ‘J’) no momento em que inserimos os registros, eles ficaram com o valor nulo e agora foram excluídos com o comando acima. Ao selecionar novamente os registros da tabela PESSOA, você verá que temos novamente apenas 6 registros.
Parte 6 — Considerações Finais
O que vimos aqui sobre SQL é apenas o básico, mas é o suficiente para a proposta dessa série de artigos que tem por objetivo mostrar como modelar o banco de dados. Normalmente os bancos de dados fornecem toda uma documentação mostrando como a linguagem SQL é utilizada naquele banco. Utilize esse recurso quando começar a trabalhar com um banco de dados específico.
E qual banco de dados você deve escolher? Não existe uma resposta certa para essa pergunta. Eu gosto muito do banco de dados MySQL e o utilizo ativamente para desenvolver sistemas de pequeno, médio e grande porte. Sugiro que comece com o MySQL, caso ainda não tenha selecionado um banco de dados para desenvolver suas aplicações. Para sistemas embarcados (aplicações para celulares, por exemplo) que precisam armazenar dados localmente no dispositivo, sugiro que utilize o banco de dados SQLite.
Com o tempo você pode conhecer outros SGBDs como Oracle, SQL Server, Firebird, PostgreSQL, DB2, etc. Cada um deles tem suas vantagens e desvantagens, incluindo aí o MySQL. Normalmente você conhecerá esses bancos pelo fato de a empresa na qual você vai trabalhar já ter adotado um banco de dados e você terá que trabalhar com ele.
Terminamos nossa jornada por aqui. O que você pode fazer agora? Pense em modelar um banco de dados de sua realidade. Pode ser para a empresa de um amigo ou parente, para a sua própria empresa, para aquele sistema que você tanto quer desenvolver, etc. A prática neste caso (como em muitos outros) é que fará você atingir a perfeição.
Referências Bibliográficas
Elsmari, R., Navathe, Shamkant B. “Fundamentals of Database Systems”. Third Edition, Addison-Wesley, 2011
Garcia-Molina, H., Ullman, Jeffrey D., Widom, Jennifer. “Implementação de Sistemas de Bancos de Dados”. Editora Campus, 2001
Machado & Abreu, “Projeto de Banco de Dados — Uma Visão Prática”. Editora Érica, 1996
O’Neil, Patrick., O’Neil, Elizabeth. “Database: Principles, Programming and Performance”. Second Edition, Morgan Kaufmann, 2000
Silberschatz, A., Korth, H., Sudarshan, S. “Sistemas de Banco de Dados”, 3ª Edição, Makron Books, 1999
T2Ti ERP — Aprenda a Desenvolver um ERP
O T2Ti ERP 2.0 é feito em C#, Delphi, Java (RIA e Web) e Lazarus. São cinco projetos diferentes. Que tal aprender a desenvolver esse ERP totalmente grátis? Parece bom?
Acompanhe o canal da T2Ti no Youtube. A T2Ti está postando todos os vídeos do T2Ti ERP 2.0 no Youtube. São quase 300 módulos!
Os vídeos estão organizados em Playlists. Então se inscreva no canal e ative o sininho para receber atualizações sobre as postagens.