Selecionando os registros de suas tabelas.
| Provavelmente este será o comando que mais você
utilizará em suas instruções SQL. Na verdade cerca de
70 a 80 % de suas instruções SQL utilizarão o comando
SELECT. Estaremos trabalhando com o banco de dados Access e a sintaxe que usaremos para nossas instruções SQL será a suportada pelo Access. Lembre-se que para as instruções SQL atuarem é necessário que o arquivo esteja aberto. Iremos utilizar o banco de dados Escola.mdb e as tabelas criadas no artigo - Criando Tabelas . A instrução SELECT retornará um conjunto de registros , recordset, do tipo Dynaset/Table. Basicamente você deverá fornecer duas informações básicas:
Assim uma instrução SELECT para selecionar todos os registros da tabela - tblalunos - poderá ser escrita como:
Para selecionar os campos nome e endereço da tabela tblalunos , faremos:
|
|||||||||||||||||||||||||
| Nomeando e Criando Campos Calculados | |||||||||||||||||||||||||
| Um campo calculado pode resultar de uma operação aritmética sobre campos numéricos ou pode ser resultado de operações de strings sobre campos textos. Para campos numéricos você pode qualquer operador padrão ( +,-,*,/,^) e para strings o operador de concatenação ( & ), além de poder usar as funções do Visual Basic .Ex: UCASE$, MID$ , SQR , | |||||||||||||||||||||||||
|
|||||||||||||||||||||||||
| Vamos extrair através de um comando SELECT o nome do produto, e o valor total em estoque. | |||||||||||||||||||||||||
| Note que não temos a informação valor total , para isto vamos criar um campo calculado com o nome de Valor Total e esse campo será resultante da multiplicação do preço do produto pela quantidade do mesmo em estoque. | |||||||||||||||||||||||||
| SELECT
produtos.nome, [preço]*[quantidade] AS [valor total] FROM estoque INNER JOIN produtos ON estoque.produto = produtos.produto; |
|||||||||||||||||||||||||
| Criamos o campo calculado [preço]*[quantidade] e o nomeamos como valor total. A cláusula AS define o nome desejado. | |||||||||||||||||||||||||
| Outro exemplo seria a criação de um campo nome pela junção dos campos nome e sobrenome de uma tabela clientes: | |||||||||||||||||||||||||
| SELECT nome & ', ' & sobrenome AS nome FROM clientes | |||||||||||||||||||||||||
| Se a cláusula AS não for utilizada será criado automaticamente um nome Expr1001 para o primeiro campo , e assim por diante. | |||||||||||||||||||||||||
| Usando a cláusula WHERE para definir critérios. | |||||||||||||||||||||||||
| Se você precisar usar um
determinado critério para selecionar os dados pode
utilizar a cláusula WHERE. A sintaxe básica é a seguinte:
Para extrair uma relação com o nome dos alunos da 1 série, faremos:
|
|||||||||||||||||||||||||
Note que usamos o número entre aspas,
pois o campo serie é definido como do tipo Texto,
se fosse numérico teríamos que escrever:
Supondo que você desse a opção ao usuário de informar a série em uma caixa de texto(Text1) , você teria que escrever o seguinte:
|
|||||||||||||||||||||||||
| Observe que não usamos o nome da tabela na especificação dos campos pois o campo esta presente na tabela de origem dos dados. | |||||||||||||||||||||||||
| Cuidado quando for trabalhar com datas como critério
de seleção pois a data deve estar entre os caracteres #
( cerquilha) e no formato mm/dd/yyyy. Assim para selecionar os alunos que nasceram no dia 12 de agosto de 1986 - 12/08/1986 - devemos fazer:
Dando a opção ao usuário de informa a data e usando um MaskeditBox(Maskdata) para receber a informacão teremos:
|
|||||||||||||||||||||||||
| Note que tivemos que mudar o formato da data para mm/dd/yyyy | |||||||||||||||||||||||||
Atenção !!! cuidado com o Apóstrofo - Se tiver um
apóstrofo dentro de uma string de pesquisa , para evitar
problemas você deve delimitar a string de pesquisa por
aspas. Assim para pesquisar o nome Macdonald's
você de fazer assim:
|
|||||||||||||||||||||||||
| Ordenando o resultado de sua Consulta - ORDER BY | |||||||||||||||||||||||||
| Se quisermos ordernar o resultado de uma consulta
podemos acrescentar a cláusula ORDER BY
e o nome do campo pelo qual desejamos a ordenação. Por
padrão será retornado os dados na ordem crescente , se
desejar na inverter a ordem use a palavra chave DESC. Assim para ordernarmos os alunos da 1º série por nome e em ordem crescente faríamos assim:
para ordernar em ordem de teríamos:
|
|||||||||||||||||||||||||
| Usando a cláusula LIKE | |||||||||||||||||||||||||
As vezes os dados que você está desejando filtrar
não têm uma ocorrência exata, ou você pretende
realizar uma busca mais irrestrita. Para isso devemos
usar a cláusula LIKE. Supondo que
desejamos filtrar todos os alunos que tenham o nome
começado pelas letrar Jos, Através da
cláusula LIKE podemos inserir as letras desejadas e a
SQL fará uma busca parcial pela string informada: Algo
como:
Isto retornará os possíveis nomes: José , Josué, Josimar, Josias, etc... Note que usamos o asteristico (*) que funciona como um coringa , substituindo os demais caracteres. A seguir listamos abaixo as principais ocorrências :
|
|||||||||||||||||||||||||
| Definindo o relacionamento entre as Tabelas: JOIN | |||||||||||||||||||||||||
| Com frequência você vai ser obrigado a obter dados de diversas tabelas, pois trabalhando com o modelo relacional de banco de dados , durante a normalização os dados serão colocados em tabelas diferentes para evitar a repetição de informações. | |||||||||||||||||||||||||
| Para selecionar campos de várias tabelas , você deve informar basicamente o seguinte: | |||||||||||||||||||||||||
|
|||||||||||||||||||||||||
|
|||||||||||||||||||||||||
|
|||||||||||||||||||||||||
| Quando você têm um vínculo entre duas tabelas poderá usar a palavra chave INNER JOIN na cláusula FROM de uma instrução SELECT para criar um conjunto de registros com campos de ambas as tabelas | |||||||||||||||||||||||||
| Naturalmente quanto maior a quantidade de tabelas das quais você deseja extrair os seus dados mais complexa a instrução se tornará. | |||||||||||||||||||||||||
| Assim, para obter o nome ,curso e a nota de cada aluno do banco de dados Escola.mdb; agora os dados que desejamos encontram-se em três tabelas: Tblalunos ( o nome do aluno ) , TblNotas ( o codigo do curso e a nota) e TblCursos. | |||||||||||||||||||||||||
| SELECT
tblalunos.nome, tblcursos.nomecurso, tblnotas.nota FROM tblcursos INNER JOIN (tblalunos INNER JOIN tblnotas ON tblalunos.codaluno = tblnotas.codaluno) ON tblcursos.codcurso = tblnotas.codcurso ORDER BY tblalunos.nome; |
|||||||||||||||||||||||||
| A diferença entre a utilização da cláusula WHERE e da JOIN para reunir dados de múltiplas tabelas é que a cláusula WHERE produz um recordset somente de leitura. Para criar um recordset atualizável devemos usar JOIN | |||||||||||||||||||||||||
| A sintaxe básica para o JOIN e: | |||||||||||||||||||||||||
tabela 1 [INNER | LEFT | RIGHT ] JOIN tabela 2 ON tabela1.chave1=tabela2.chave2 |
|||||||||||||||||||||||||
| Temos 3 opções de cláusulas usadas com JOIN e, o comportamento na maneira de retornar os registros difere em cada caso: | |||||||||||||||||||||||||
|
Continua...