Artigo Clube Delphi Edição 2 - Linguagem SQL
Artigo da Revista Clube Delphi Edição 2.
Atenção: por essa edição ser muito antiga não há arquivo PDF para download. Os artigos dessa edição estão disponíveis somente através do formato HTML.
Linguagem SQL
A linguagem padrão dos bancos de dados
Os nomes didáticos da informática, são hoje, sem dúvida, uma enchente de siglas e acrônimos de nomes tão técnicos e estranhos quanto suas origens, dificultando até mesmo a nossa capacidade de memorizar. Nomeio de tantos códigos e símbolos, como ADO, MFC,COM,OLE, entre outros, é necessário uma grande força de vontade para extrair o que realmente é útil e deixar o tempo necessário de estudo para cada uma delas. E certamente é o que tento fazer neste nosso novo encontro, onde escolhi uma sigla nem um pouco estranha, mas com uma fundamental importância na nossa aventura de desenvolver aplicações, e principalmente neste caso, aplicações de bancos de dados. Vou começar com uma breve introdução ao conceito:
SQL, acrônimo de STRUCTURED QUERY LANGUAGE, são comandos de manipulação ou modificação de dados e tabelas de bancos de dados (sendo por muitos chamados de DML). OSQL faz parte da ANSI/ISSO, um conjunto de nomes e padrões internacionais, e por conseqüência disto, praticamente todos os bancos de dados e seus front-ends suportam SQL.
O SQL E SUA SINTAXE
Mostrarei a seguir exemplos e definições de clausulas SQL, divididas em dois tópicos:
RECUPERAÇÃO DE DADOS
O comando usado para extração de dados é o SELECT. Sua sintaxe é muito simples. Vejamos por exemplo, uma instrução para recuperar todos os registros de uma suposta tabela chamada leitor:
SELECT *
FROM Leitor
No caso são usados dois comandos: o primeiro, SELECT, especifica quais campos aparecerão no resultado da consulta. No caso, o símbolo * representa todos os campos.
A segunda palavra FROM, específica a tabela onde vamos procurar os registros. A cláusula mostrará, então, o conteúdo da tabela Leitor.
Vejamos outro exemplo:
Neste caso, a consulta irá exibir apenas os campos Código e nome.
SELECT Codigo, Nome
FROM Leitor
Lembre-se: quanto menor a quantidade de campos, mais rápida será a execução da Query.
SELECT Codigo, Nome
FROM Leitor
WHERE codigo = 3
Aqui vemos mais um comando: WHERE. Este talvez seja o principal comando da clausula SELECT, pois é o responsável pela filtragem dos registros.
Neste exemplo, a consulta exibirá apenas o leitor cujo código seja;
Neste exemplo, serão mostrados todos os campos cujo nome seja
Igual q ‘’João Batista’’
SELECT Codigo, Nome
FROM Leitor
WHERE Nome = ‘João Batista’
Aqui mais uma novidade: o operador LIKE, Este operador permite selecionar os registros mais próximos do valor passado.
O operador Like trabalha em conjunto com o caracter de máscara’’%’’. Este caracter indica qual parte do valor será pesquisada. Por exemplo, se tivéssemos uma tabela com os seguintes registros:
Código | Nome
1 Jose da Silva
2 Carlos Jose
Ao executar a clausula Nome LIKE ‘’jose%’’, seriam exibidos os registros:
1 Jose da Silva
Mas poderíamos fazer uma pesquisa parcial tanto no fim como no início, da seguinte forma:
SELECT *
FROM Leitor
WHERE Nome LIKE ‘%Jose%’
Neste caso todos os registros do exemplo seriam exibidos.
Nota: O caracter ‘’%’’ é usado pelo Paradox. O caracter de máscara original usado no SQL é o ‘’*’’.
SELECT *
FROM Leitor
WHERE Cod>=1 AND Cod=<10
Aqui vemos que o SQL suporta operadores relacionais, como>=,<=, >,<, <> e operadores lógicos. Como AND, OR, NOT E XOR
SELECT *
FROM Leitor
WHERE CPF IS NULL
Acima, todos os leitores que não possuem CPF seriam exibidos.
SELECT Nome
FROM Leitor
WHERE UF IN(‘RJ’,’PB’,’MG’)
Aqui seriam exibidos leitores cariocas, paraibanos e mineiros.
SELECT Codigo, Nome
FROM Leitor
WHERE Codigo NOT IN
(SELECT CodLeitor
FROM Emprestimo
WHERE Devolvido=False)
Este exemplo é bastante curioso: ele exibe todos os leitores que não estão com livros emprestados. Vamos analisá-lo:
Primeiro temos um comando SQL pai será o resultado dado ao usuário:
SELECT Codigo, Nome
FROM Leitor
Em seguida, adicione um filtro de conjuntos ao comando:
SELECT Codigo, Nome
FROM Leitor
WHERE Codigo NOT IN
(‘1’, ‘2’, ‘4’)
Neste caso os leitores de código diferente a 1, 2 ou 4 seriam exibidos.Só que em vez de termos valores estáticos como 1, 2 ou 4, podemos ter um outro comando SQL, retornando um conjunto.
Neste tipo de ‘’subseleção’’ você só poderá selecionar um campo na clausula SELECT.
SELECT *
FROM Leitor, Emp
WHERE Leitor.Codigo=Emp.CodLeitor
Acima, mas um caso interessante:aqui trabalhamos com duas tabelas,leitores e empréstimos (Emp) – repare que está explicito na clausula FROM. E na clausula WHERE, juntamos as duas tabelas pelo seu campo relacionado: Leitor. Código =empréstimo. Codleitor. O resultado será um View com todos os empréstimos realizados, e respectivamente, os campos relacionados com a tabela Leitor. Uma variação mais elegante dessa consulta seria:
SELECT Leitor.Nome, Emp.Data
FROM Leitor, Emp
WHERE Leitor.Codigo=Emp.CodLeitor
Repare que é exibido o capo Data da tabela Emp (Empréstimos), juntamente com o campo nome, da tabela de Leitor. Neste caso o nome dos campos procedido do nome tabela, separados por ‘’ .‘’.É possível também criar um ‘’aliás’’ para o nome da tabela como mostra o exemplo abaixo:
SELECT A.Codigo,A.Nome,B.Data
FROM “Leitor”A,‘Emprestimo”B
WHERE A.Codigo = B.CodLeitor
VALUES (1, “Teste”, “A”)
Veja outro caso:
Aqui temos duas novidades: A palavra BETEWEEN, que neste caso representa exatamente seu literal: serão filtrados os códigos entre 1 e 10. E a segunda novidade: a palavra ORDERBY, de significado da consulta será ordenado pelo nome. Ordenações compostas também valem:
SELECT Cod, Nome
FROM Leitor
WHERE Cod BETWEEN 1 AND 10
ORDER BY Nome
E para a ordenação decrescente usa-se a palavra DESC no final da linha:
SELECT * FROM Leitor
ORDER BY Nome DESC
Os comandos SQL podem ser mesclados em diversas formas, formando complexas instruções que otimizarão seu código na hora de desenvolver e farão com que você execute procedimentos mais rapidamente.
OSQL, diferente dos métodos de pesquisa como FindKey ou FinsNearEst, funciona mesmo que não haja índice para o campo que está sendo usado.Mas é claro que, se existirem índices para o campo, a consulta será muito mais rápida.
OSQL também permite fazer alterações em tabelas, através dos comandos INSERT, DELETE e UPDATE.Quando for utilizar algumas destas operações em batch ( várias operações de uma única vez) faça pelo SQL, pois haverá maior performance.
Veja alguns exemplos:
INSERT INTO Leitor
(Codigo, Nome, Status)
VALUES (1, “Teste”, “A”)
Acima, a inserção de um registro em Leitor veja agora o comando UPDATE:
UPDATE Leitor
SET Nome=“Clube Delphi”
WHERE Codigo=1
UPDATE Leitor
SET Vencido=True
WHERE Venc <:Data_Venc
No primeiro vemos apenas uma simples alteração no campo Nome. No segundo caso, uma atualização em batch, ou seja, todos os livros com vencimento menor que data_venc
(representado como uma variável) terão o campo vencido alterado para True .
O comando DELETE é parecido com os demais, abaixo segue uma deleção simples e em batch , como em Update:
DELETE FROM Leitor
WHERE Codigo=1
DELETE FROM Leitor
WHERE Vencido=True
Este tópico não se destina a ser uma referência da linguagem SQL, já que esta é muito vasta. O objetivo é apenas dar uma introdução e mostrar alguns exemplos, para que o estudo e entendimentos desta linguagem sejam adquiridos de forma mais clara e rápida. Comentários sobre esta matéria podem ser enviados para admi@ clubedelphi.com.br.
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo