Como escrever consultas de acesso microsoft sql a partir do zero

Microsoft Access é sem dúvida a ferramenta mais poderosa em toda a suíte Microsoft Office, ainda que mistifica (e às vezes assusta) usuários avançados Office. Com uma curva de aprendizagem mais íngreme do Word ou Excel, como é qualquer um suposto envolver sua cabeça em torno do uso desta ferramenta? Esta semana, Bruce Epper vai olhar para algumas das questões estimulado por esta pergunta de um dos nossos leitores.

Um leitor pergunta:

Estou tendo dificuldade para escrever uma consulta no Microsoft Access.

Eu tenho um banco de dados com duas tabelas de produtos contendo uma coluna comum com um código de produto numérico e um nome do produto associado.

Eu quero saber quais produtos da Tabela A pode ser encontrada na Tabela B. Eu quero adicionar uma coluna Resultados nomeados que contém o nome do produto na Tabela A, se existir, e o nome do produto a partir da Tabela B, quando não existe na Tabela A.

Você tem algum conselho?

Responder de Bruce:

Microsoft Access é um Sistema de Gerenciamento de Banco de Dados (DBMS) projetado para uso em ambas as máquinas Windows e Mac. Ele utiliza motor de banco de dados Jet da Microsoft para o processamento e armazenamento de dados. Ele também fornece uma interface gráfica para usuários que praticamente elimina a necessidade de compreender Structured Query Language (SQL).

SQL é a linguagem de comando usado para adicionar, excluir, atualizar e as informações armazenadas no banco de dados voltar, bem como modificar componentes de banco de dados essenciais, tais como adicionar, excluir ou modificar tabelas ou índices.

Ponto de partida

Se você não tiver alguma familiaridade com o Access ou outro RDBMS, gostaria de sugerir que você comece com esses recursos antes de prosseguir:

Ter uma compreensão básica dos conceitos fornecidos nestes artigos fará o seguinte um pouco mais fácil de digerir.

Relações de banco de dados e normalização

Imagine que você está executando uma empresa que vende 50 tipos diferentes de widgets em todo o mundo. Você tem uma base de clientes de 1.250 e, em um mês médio vender 10.000 widgets esses clientes. Você está usando uma única planilha para acompanhar todas essas vendas - efetivamente uma tabela de banco de dados único. E a cada ano acrescenta milhares de linhas para sua planilha.

liso-1-mesa-plana tabela 2;

As imagens acima são parte da planilha rastreamento de pedidos que você está usando. Agora dizer que ambos os clientes compram os widgets de você várias vezes por ano, então você tem muito mais linhas para os dois.

Se Joan Smith se casa com Ted Baines e leva seu sobrenome, cada única linha que contém o nome dela agora precisa ser mudado. O problema é agravado se acontecer de você ter dois clientes diferentes com o nome ‘Joan Smith`. Ele acaba de se tornar muito mais difícil para manter seus dados de vendas consistente devido a um evento bastante comum.

Usando um banco de dados e normalizar os dados, podemos separar itens em várias tabelas, tais como inventário, clientes e encomendas.

normalização

Basta olhar para a parte cliente do nosso exemplo, iria remover as colunas de nome do cliente e endereço do cliente e colocá-los em uma nova tabela. Na imagem acima, eu também ter quebrado as coisas melhor para acesso mais granular aos dados. A nova tabela também contém uma coluna para uma chave primária (ClientID) - um número que será usado para acessar cada linha nesta tabela.

Na tabela original onde nós removemos esses dados, poderíamos acrescentar uma coluna para uma chave estrangeira (ClientID), que é o que liga para a linha adequada contendo as informações para este cliente particular.

Agora, quando Joan Smith muda seu nome para Joan Baines, a mudança só precisa ser feito uma vez na tabela do Cliente. Cada outra referência de tabelas associadas vai puxar o nome do cliente adequada e um relatório que está olhando para o que Joan comprou para os últimos 5 anos irão receber todas as ordens menores tanto sua donzela e nomes casados ​​sem ter que mudar o modo como o relatório é gerado .

Como um benefício adicional, o que também reduz a quantidade global de armazenamento consumido.

Junte Tipos

SQL define cinco tipos diferentes de junta: interior, exterior esquerda, externa direita, externa completa, e Cruz. A palavra-chave OUTER é opcional na instrução SQL.

Microsoft Access permite o uso de INNER (padrão), LEFT OUTER, RIGHT OUTER e CROSS. FULL OUTER não é suportado como tal, mas usando LEFT OUTER, UNION ALL, e RIGHT OUTER, ele pode ser falsificado com o custo de mais ciclos de CPU e operações E / S.

A saída de um CROSS JOIN contém cada linha da tabela à esquerda emparelhado com cada linha da tabela direita. A única vez que eu já vi um CROSS JOIN usada é durante o teste de carga de servidores de banco de dados.

Video: Conexão SQL com Excel

Vamos dar uma olhada em como o básico junta-se o trabalho, então vamos modificá-los para atender às nossas necessidades.

Vamos começar com a criação de duas tabelas, PRODA e ProdB, com as seguintes propriedades de design.

Acesso-table-defs

A numeração automática é um número inteiro longo incrementando automaticamente atribuído a entradas como eles são adicionados à mesa. A opção de texto não foi modificado, por isso vai aceitar uma cadeia de texto de até 255 caracteres.

Agora, preenchê-los com alguns dados.

access-tabelas

Para mostrar as diferenças na forma como os 3 tipos de junção trabalhar, eu ter excluído entradas 1, 5 e 8 de PRODA.

Em seguida, crie uma nova consulta, indo para Crio gt; design de consulta. Selecione ambas as tabelas na caixa de diálogo Mostrar tabela e clique em Adicionar, então Fechar.

nova consulta

Clique em ProductID na tabela PRODA, arraste-o para ProductID na tabela ProdB e solte o botão do mouse para criar o relacionamento entre as tabelas.

design_view

Clique com o botão direito do mouse sobre a linha entre as tabelas que representam a relação entre os itens e seleccione Aderir Propriedades.



join_properties

Por padrão, se juntar tipo 1 (INNER) está selecionado. Opção 2 é uma junção externa esquerda e 3 é uma junção externa direita.

Vamos olhar para a junção INNER primeiro, então clique em OK para fechar o diálogo.

No designer de consulta, selecione os campos que queremos ver a partir das listas drop-down.

design vista em dois

Quando executar a consulta (o ponto de exclamação vermelho na fita), ele irá mostrar o campo NomeDoProduto de ambas as tabelas com o valor da tabela PRODA na primeira coluna e ProdB no segundo.

junção interna

Observe os resultados mostram apenas valores onde ProductID é igual em ambas as tabelas. Mesmo que haja uma entrada para ProductID = 1 na tabela ProdB, não aparecem nos resultados desde ProductID = 1 não existe na tabela PRODA. O mesmo se aplica para ProductID = 11. Existe na tabela PRODA mas não na tabela ProdB.

design de fita

Utilizando o botão Ver na fita e mudar para o modo de exibição SQL, você pode ver a consulta SQL gerado pelo designer usou para obter esses resultados.

SELECIONAR PRODA.Nome do Produto, ProdB.Nome do Produto A PARTIR DE PRODA INTERIOR JUNTE-SE ProdB EM PRODA.ID do produto = ProdB.ID do produto-

Voltando à vista de estrutura, alterar o tipo de juntar-se a 2 (LEFT OUTER). Executar a consulta para ver os resultados.

left_outer_join

Como você pode ver, cada entrada na tabela PRODA é representado nos resultados enquanto apenas os de ProdB que têm uma entrada de ProductID correspondente na tabela ProdB aparecer nos resultados.

O espaço em branco na coluna ProdB.ProductName é um valor especial (NULL) uma vez que não é um valor correspondente na tabela ProdB. Isso vai provar importante mais tarde.

SELECIONAR PRODA.Nome do Produto, ProdB.Nome do Produto A PARTIR DE PRODA ESQUERDA JUNTE-SE ProdB EM PRODA.ID do produto = ProdB.ID do produto-

Tente a mesma coisa com o terceiro tipo de junção (RIGHT OUTER).

right_outer_join

Os resultados mostram tudo da tabela ProdB enquanto ele está mostrando em branco (conhecido como NULL) valores onde a mesa de PRODA não tem um valor correspondente. Até agora, isso nos traz mais próximos dos resultados desejados em questão do nosso leitor.

SELECIONAR PRODA.Nome do Produto, ProdB.Nome do Produto A PARTIR DE PRODA CERTO JUNTE-SE ProdB EM PRODA.ID do produto = ProdB.ID do produto-

Usando funções em uma consulta

Os resultados de uma função também podem ser devolvidos como parte de uma consulta. Queremos uma nova coluna chamada ‘Resultados para aparecer no nosso conjunto de resultados. Seu valor será o conteúdo da coluna ProductName da tabela PRODA se PRODA tem um valor (não é NULL), caso contrário, deve ser tomada a partir da tabela ProdB.

Video: Access Com VBA (Cadastro, Consulta, Relatório)

A função imediata se (IIF) pode ser utilizado para gerar este resultado. A função usa três parâmetros. A primeira é uma condição que deve ser avaliada como um valor Verdadeiro ou Falso. O segundo parâmetro é o valor a ser retornado se a condição for verdadeira, eo terceiro parâmetro é o valor a ser retornado se a condição for falsa.

A construção de função completa para a nossa situação se parece com isso:

IIF(PRODA.ID do produto É Nulo, ProdB.Nome do Produto,PRODA.Nome do Produto)

Observe que o parâmetro condição não verificar a igualdade. Um valor nulo em um banco de dados não tem um valor que pode ser comparado a qualquer outro valor, incluindo outro nulo. Em outras palavras, Null não é igual a nulo. Sempre. Para superar isso, em vez verificar o valor usando a palavra-chave ‘é.

Nós também poderia ter usado ‘não é nulo` e mudou a ordem dos parâmetros Verdadeiro e Falso para obter o mesmo resultado.

Ao colocar isso em criador de consultas, você deve digitar toda a função no campo: a entrada. Para obtê-lo para criar a coluna ‘resultados, você precisa usar um pseudônimo. Para fazer isso, prefaciar a função com ‘Resultados:` como visto na imagem seguinte.

-exterior-alias-direito resultados-design

O código SQL equivalente a fazer isso seria:

SELECIONAR PRODA.Nome do Produto, ProdB.Nome do Produto, IIF(PRODA.ID do produto É Nulo,ProdB.Nome do Produto,PRODA.Nome do Produto) COMO Resultados A PARTIR DE PRODA CERTO JUNTE-SE ProdB EM PRODA.ID do produto = ProdB.ID do produto-

Agora, quando executar esta consulta, que irá produzir esses resultados.

Video: 11_Vídeo Aula: Classe JAVA(Inserir, excluir, atualizar e consultar Banco de Dados)

right_outer_with_aliased_results

Aqui vemos para cada entrada onde a tabela PRODA tem um valor, esse valor é refletida na coluna Resultados. Se não houver uma entrada na tabela de PRODA, a entrada de ProdB aparece nos resultados, que é exatamente o que o nosso leitor perguntou.

Para obter mais recursos para a aprendizagem Microsoft Access, consulte a Joel Lee Como Aprender Microsoft Access: 5 Recursos online grátis.Como Aprender Microsoft Access: 5 Recursos online grátisComo Aprender Microsoft Access: 5 Recursos online grátisVocê tem de gerir uma grande quantidade de dados? Você deve olhar para o Microsoft Access. Nossos recursos de estudo livres podem ajudar você a começar e aprender as habilidades para projetos mais complexos.consulte Mais informação


Artigos relacionados