Dados de amostragem no banco de dados do Access usando consultas SQL. Tutorial ilustrado de SQL para iniciantes Consulta em linguagem sql no access

06.04.2023

Cada um de nós encontra e usa regularmente vários bancos de dados. Quando selecionamos um endereço de e-mail, estamos trabalhando com um banco de dados. Os bancos de dados usam serviços de pesquisa, bancos para armazenar dados de clientes e assim por diante.

Mas, apesar do uso constante de bancos de dados, mesmo para muitos desenvolvedores de sistemas de software existem muitos "pontos brancos" devido a diferentes interpretações dos mesmos termos. Daremos uma breve definição dos termos básicos do banco de dados antes de examinar a linguagem SQL. Então.

Base de dados - um arquivo ou conjunto de arquivos para armazenar estruturas de dados ordenadas e seus relacionamentos. Muitas vezes, um banco de dados é chamado de sistema de gerenciamento - é apenas um repositório de informações em um determinado formato e pode funcionar com vários DBMS.

Mesa - Imaginemos uma pasta que guarda documentos agrupados segundo um determinado atributo, por exemplo, uma lista de encomendas do último mês. Esta é a tabela no computador. Uma tabela separada tem seu próprio nome exclusivo.

Tipo de dados - o tipo de informação que pode ser armazenada em uma determinada coluna ou linha. Pode ser números ou texto de um determinado formato.

coluna e linha- todos nós já trabalhamos com planilhas que também possuem linhas e colunas. Qualquer banco de dados relacional funciona com tabelas da mesma maneira. Às vezes, as linhas são chamadas de registros.

chave primária- cada linha da tabela pode ter uma ou mais colunas para identificá-la exclusivamente. Sem uma chave primária, é muito difícil atualizar, modificar e excluir as linhas desejadas.

O que é SQL?

SQL(Inglês - linguagem de consulta estruturada) foi desenvolvido apenas para trabalhar com bancos de dados e atualmente é o padrão para todos os DBMS populares. A sintaxe da linguagem consiste em um pequeno número de operadores e é fácil de aprender. Mas, apesar da simplicidade externa, permite criação de sql consultas para operações complexas com um banco de dados de qualquer tamanho.

Desde 1992 existe um padrão geralmente aceito chamado ANSI SQL. Ele define a sintaxe básica e as funções dos operadores e é suportado por todos os líderes de mercado de DBMS, como o ORACLE. É impossível cobrir todas as possibilidades da linguagem em um pequeno artigo, então consideraremos brevemente apenas consultas SQL básicas. Os exemplos mostram claramente a simplicidade e as possibilidades da linguagem:

  • criação de bancos de dados e tabelas;
  • amostragem de dados;
  • adicionar registros;
  • modificação e exclusão de informações.

Tipos de Dados SQL

Todas as colunas em uma tabela de banco de dados armazenam o mesmo tipo de dados. Os tipos de dados em SQL são os mesmos de outras linguagens de programação.

Criando tabelas e bancos de dados

Existem duas maneiras de criar novos bancos de dados, tabelas e outras consultas no SQL:

  • através do console do DBMS
  • Usando as ferramentas de administração interativas incluídas no servidor de banco de dados.

Um novo banco de dados é criado pelo operador CRIAR BANCO DE DADOS<наименование базы данных>; . Como você pode ver, a sintaxe é simples e concisa.

Criamos tabelas dentro do banco de dados usando a instrução CREATE TABLE com os seguintes parâmetros:

  • Nome da tabela
  • nomes de colunas e tipos de dados

Como exemplo, vamos criar uma tabela Commodity com as seguintes colunas:

Criamos uma tabela:

CREATE TABLE Mercadoria

(commodity_id CHAR(15) NÃO NULO,

vendor_id CHAR(15) NÃO NULO,

nome_commodity CHAR(254) NULL,

preço_commodity DECIMAL(8,2) NULO,

commodity_desc VARCHAR(1000) NULL);

A tabela tem cinco colunas. Depois do nome vem o tipo de dados, as colunas são separadas por vírgulas. O valor de uma coluna pode ser vazio (NULL) ou deve ser preenchido (NOT NULL), e isso é determinado quando a tabela é criada.

Selecionando dados de uma tabela

O operador de seleção de dados é a consulta SQL mais usada. Para obter informações, você precisa especificar o que queremos selecionar de tal tabela. Primeiro um exemplo simples:

SELECT nome_commodity FROM Commodity

Após a instrução SELECT, especificamos o nome da coluna para obter informações e FROM define a tabela.

O resultado da execução da consulta serão todas as linhas da tabela com valores Commodity_name na ordem em que foram inseridos no banco de dados, ou seja, sem nenhuma triagem. Uma cláusula ORDER BY adicional é usada para ordenar o resultado.

Para consultar vários campos, liste-os separados por vírgulas, como no exemplo a seguir:

SELECT commodity_id, commodity_name, commodity_price FROM Commodity

É possível obter o valor de todas as colunas de uma linha como resultado da consulta. Para isso, o sinal "*" é usado:

SELECIONE * DE Commodity

  • Além disso, o SELECT suporta:
  • Classificando dados (instrução ORDER BY)
  • Selecione de acordo com as condições (ONDE)
  • Termo de agrupamento (GROUP BY)

Adicionando uma linha

Para adicionar uma linha a uma tabela, são usadas consultas SQL com a instrução INSERT. A adição pode ser feita de três maneiras:

  • adicione uma nova linha inteira;
  • parte de uma string;
  • resultados da consulta.

Para adicionar uma linha completa, você deve especificar o nome da tabela e os valores das colunas (campos) da nova linha. Aqui está um exemplo:

INSERT INTO Commodity VALUES("106", "50", "Coca-Cola", "1,68", "Sem Álcool,)

O exemplo adiciona um novo produto à tabela. Os valores são especificados após VALUES para cada coluna. Se não houver valor correspondente para a coluna, NULL deverá ser especificado. As colunas são preenchidas com valores na ordem especificada quando a tabela foi criada.

Se você adicionar apenas parte de uma linha, deverá especificar explicitamente os nomes das colunas, como no exemplo:

INSERT INTO Commodity (commodity_id, vendor_id, commodity_name)

VALORES("106", '50", "Coca-Cola",)

Inserimos apenas os identificadores do produto, do fornecedor e seu nome, deixando os demais campos em branco.

Adicionando resultados de consulta

INSERT é usado principalmente para adicionar linhas, mas também pode ser usado para adicionar os resultados de uma instrução SELECT.

Alterar dados

Para alterar informações nos campos de uma tabela de banco de dados, você deve usar a instrução UPDATE. O operador pode ser usado de duas maneiras:

  • Todas as linhas da tabela são atualizadas.
  • Apenas para uma determinada linha.

UPDATE consiste em três elementos principais:

  • a tabela na qual é necessário fazer alterações;
  • nomes de campo e seus novos valores;
  • condições para selecionar as linhas a serem alteradas.

Considere um exemplo. Digamos que o preço de um produto com ID=106 mudou, então esta linha precisa ser atualizada. Escrevemos o seguinte operador:

UPDATE Commodity SET commodity_price = "3.2" WHERE commodity_id = "106"

Especificamos o nome da tabela, no nosso caso Commodity, onde será realizada a atualização, depois de SET - o novo valor da coluna e encontramos o registro desejado especificando o valor do ID desejado em WHERE.

Para alterar várias colunas, especifique vários pares de valores de coluna separados por vírgulas após a instrução SET. Vejamos um exemplo em que o nome e o preço do produto são atualizados:

UPDATE Commodity SET commodity_name='Fanta', commodity_price = "3.2" WHERE commodity_id = "106"

Para excluir informações em uma coluna, você pode defini-la como NULL se a estrutura da tabela permitir. Deve ser lembrado que NULL é exatamente "nenhum" valor, e não zero na forma de texto ou número. Remover descrição do produto:

UPDATE Commodity SET commodity_desc = NULL WHERE commodity_id = "106"

Removendo linhas

As consultas SQL para excluir linhas em uma tabela são executadas com a instrução DELETE. Existem dois casos de uso:

  • certas linhas na tabela são excluídas;
  • todas as linhas da tabela são excluídas.

Um exemplo de exclusão de uma linha de uma tabela:

DELETE FROM Commodity WHERE commodity_id = "106"

Após DELETE FROM, especificamos o nome da tabela na qual as linhas serão excluídas. A cláusula WHERE contém uma condição pela qual as linhas serão selecionadas para exclusão. No exemplo, estamos excluindo a linha de produto com ID=106. Especificar ONDE é muito importante. omitir esta instrução excluirá todas as linhas da tabela. Isso também se aplica à alteração do valor dos campos.

A instrução DELETE não especifica nomes de coluna ou metacaracteres. Ele remove completamente as linhas, mas não pode remover uma única coluna.

Usando SQL no Microsoft Access

Geralmente usado de forma interativa para criar tabelas, bancos de dados, gerenciar, modificar, analisar dados no banco de dados e implementar consultas SQL Access por meio de um designer de consulta interativo conveniente (Query Designer), usando o qual você pode criar e executar imediatamente instruções SQL de qualquer complexidade.

O modo de acesso ao servidor também é suportado, no qual o Access DBMS pode ser usado como um gerador de consultas SQL para qualquer fonte de dados ODBC. Esse recurso permite que os aplicativos do Access interajam com qualquer formato.

Extensões SQL

Como as consultas SQL não possuem todos os recursos das linguagens de programação processuais, como loops, ramificações etc., os fornecedores de DBMS desenvolvem sua própria versão do SQL com recursos avançados. Em primeiro lugar, este é o suporte para procedimentos armazenados e operadores padrão de linguagens procedurais.

Os dialetos mais comuns da língua:

  • Banco de Dados Oracle - PL/SQL
  • Interbase, Firebird - PSQL
  • Microsoft SQL Server - Transact-SQL
  • PostgreSQL - PL/pgSQL.

SQL para a web

O MySQL DBMS é distribuído sob a GNU General Public License. Existe uma licença comercial com a capacidade de desenvolver módulos personalizados. Como parte integrante, está incluído nas montagens mais populares de servidores de Internet, como XAMPP, WAMP e LAMP, e é o DBMS mais popular para o desenvolvimento de aplicativos na Internet.

Foi desenvolvido pela Sun Microsystems e atualmente é mantido pela Oracle Corporation. Suporta bancos de dados de até 64 terabytes, padrão de sintaxe SQL:2003, replicação de bancos de dados e serviços em nuvem.

Uma consulta SQL é uma consulta criada usando instruções SQL. SQL (Structured Query Language) é usado para criar consultas e para atualizar e gerenciar bancos de dados relacionais, como bancos de dados do Microsoft Access.

Quando um usuário cria uma consulta no modo de exibição Design da Consulta, o Microsoft Access cria automaticamente uma instrução SQL equivalente. Há uma série de consultas que só podem ser feitas no modo SQL. Programadores experientes geralmente acham mais fácil escrever imediatamente uma expressão em SQL do que formar uma consulta.

Tipo de solicitação no construtor:

Com cálculos complexos, você precisa fazer várias solicitações sequencialmente para obter o resultado. É claro que essas ações devem ser executadas automaticamente sem intervenção do usuário.

Para isso, são utilizadas macros, que consistem em vários comandos executados sequencialmente.

Cálculos em consultas, possibilidade de criar e editar fórmulas.

Para campos das tabelas especificadas no esquema de consulta, você pode especificar quaisquer cálculos.

Para realizar cálculos, você precisa adicionar campos calculados adicionais à consulta, cujos valores são calculados com base nos valores de outros campos de consulta.

Consultas finais, agrupamento, funções finais.

A consulta final é criada usando o modo - consulta resumida.

Três tabelas podem ser usadas, incluindo uma tabela de links.

Nesse caso, você pode chamar o menu de contexto de qualquer lugar na consulta (botão direito do mouse) e selecionar o recurso "operações de grupo".

O formulário de solicitação mostrará nova linha Agrupamento.

Funções totais: no campo para o qual queremos calcular os totais, selecione a função "Soma" da lista para somar todos os valores dos campos selecionados. A função Count contará o número de valores de campo. edição de informações microsoft

Uma consulta é uma chamada ao DBMS para executar qualquer operação de dados: selecionar uma parte dos dados do volume total, adicionar campos calculados, alterar dados em massa, etc.

Em uma solicitação, você pode:

  • - selecionar informações de várias tabelas relacionadas;
  • - usar condições de seleção complexas;
  • - o próprio usuário pode inserir os valores dos parâmetros, adicionar campos calculados;
  • - Realizar cálculos finais.

Tipos de solicitação:

  • - amostra;
  • - criação de uma tabela;
  • - atualização (alteração de dados);
  • - adicionar registros;
  • - exclusão de entradas.

As consultas são usadas como fontes de registro para formulários e relatórios. Na maioria das vezes, tanto em formulários quanto em relatórios, antes de emitir, você precisa selecionar parte dos dados de acordo com algumas condições e classificar os dados. Isso é feito com pedidos. A solicitação pode ser armazenada separadamente ou vinculada a um formulário ou relatório.

Existem vários tipos de consultas no Microsoft Access.

Acesso DBMS

O Microsoft Access é um tipo relacional de DBMS que equilibra razoavelmente todas as ferramentas e recursos típicos dos sistemas modernos de gerenciamento de banco de dados. Um banco de dados relacional torna mais fácil encontrar, analisar, manter e proteger os dados porque são armazenados em um só lugar. Acesso na tradução do inglês significa "acesso". O MS Access é um dos DBMS mais poderosos, flexíveis e fáceis de usar. Você pode criar a maioria dos aplicativos nele sem escrever uma única linha do programa, mas se precisar criar algo muito complexo, nesse caso, o MS Access fornece uma linguagem de programação poderosa - Visual Basic Application.

A popularidade do Microsoft Access DBMS se deve aos seguintes motivos:

A acessibilidade no estudo e a compreensibilidade permitem que o Access seja um dos os melhores sistemas criação rápida de aplicativos de gerenciamento de banco de dados;

Capacidade de usar a tecnologia OLE;

Integração com o pacote Microsoft Office;

Suporte total para tecnologias Web;

A tecnologia visual permite que você veja constantemente os resultados de suas ações e os corrija;

A presença de um grande conjunto de "mestres" para o desenvolvimento de objetos.

Os principais tipos de objetos com os quais o programa trabalha são: tabela, consulta, formulário, relatório, página, macro, módulo.

Uma tabela é um objeto usado para armazenar dados. Cada tabela inclui informações sobre um objeto certo tipo. A tabela contém campos (colunas) que armazenam vários tipos de dados e registros (linhas). Para cada tabela deve ser definida uma chave primária (um campo que tem para cada registro valor único ou vários campos, cujo valor cumulativo é único para cada registro), que é um identificador único para cada registro da tabela.

Para aumentar a velocidade de acesso aos dados, campos individuais de uma tabela (ou sua combinação) podem ser índices declarados. Um índice é uma ferramenta que agiliza a busca e classificação em uma tabela por meio do uso de valores-chave, o que possibilita garantir a exclusividade das linhas da tabela. A chave primária da tabela é indexada automaticamente. Não é permitido criar índices para campos com alguns tipos de dados.

Uma consulta é um objeto que permite ao usuário obter os dados desejados de uma ou mais tabelas. Você também pode usar consultas para criar novas tabelas usando dados de uma ou mais tabelas já existentes. O tipo mais comum de consulta é uma consulta de seleção. Uma consulta de seleção seleciona dados de uma ou mais tabelas com base em condições especificadas e, em seguida, exibe-os na ordem desejada.

Um formulário é um objeto principalmente para inserir dados, exibi-los na tela ou controlar a operação de um aplicativo.

Relatório - um objeto projetado para criar um documento que pode ser posteriormente impresso ou incluído em um documento de outro aplicativo.

base de programação de desenvolvimento visual

Página - Usado para acessar dados no banco de dados do Access atual.

Uma macro é um objeto que é uma descrição estruturada de uma ou mais ações que o Access deve executar em resposta a um evento específico.

Um módulo é um objeto que contém programas do Microsoft Visual Basic que permitem dividir um processo em etapas menores e detectar os erros que não foram encontrados usando macros.

O DBMS é iniciado por Iniciar - Programas - Microsoft Access. Execute o comando Arquivo - Novo.

A interface para trabalhar com objetos de banco de dados é unificada. Para cada um deles, existem modos de operação padrão: Criar (criar a estrutura dos objetos); Construtor (alterando a estrutura dos objetos); Open (View, Run - projetado para trabalhar com objetos de banco de dados).

linguagem de consulta SQL

SQL (Structured Query Language - linguagem de consulta estruturada) desde 1986. é a linguagem de banco de dados relacional padrão. Em particular, é usado em aplicativos Access e Excel.

SQL é uma linguagem lógica de informação projetada para descrever dados armazenados, extrair dados armazenados e modificar dados. Inicialmente, o SQL era a principal forma de o usuário trabalhar com o banco de dados e era um pequeno conjunto de comandos (operadores) que permitia criar tabelas, adicionar novos registros a tabelas, extrair registros de tabelas, deletar registros e alterar estruturas de tabelas. Devido à crescente complexidade, a linguagem SQL tornou-se uma linguagem de programação mais aplicada e os usuários puderam usar construtores de consultas visuais.

A linguagem SQL é um conjunto de operadores:

operadores de definição de dados (Data Definition Language, DDL);

operadores de manipulação de dados (Data Manipulation Language, DML);

operadores de definição de acesso a dados (Data Control Language, DCL);

Declarações de Linguagem de Controle de Transação (TCL).

As consultas no MS Access são armazenadas e implementadas usando a linguagem SQL. Embora a maioria das consultas possa ser criada usando ferramentas gráficas (consultas modelo), elas são armazenadas como instruções SQL. Em alguns casos (por exemplo, em subconsultas), apenas SQL pode ser usado.

SQL é uma linguagem não procedural. Ele simplesmente declara o que precisa ser feito, e a execução fica a cargo do SGBD (sistema de gerenciamento de banco de dados).

SQL usa lógica de três valores. Juntamente com os booleanos tradicionais TRUE e FALSE, NULL (UNKNOWN ou NO DATA) é usado.

As operações são executadas em conjuntos de dados inteiros, não em elementos individuais, como em outras linguagens de programação.

Uma consulta SQL consiste em instruções. Cada instrução pode conter várias cláusulas.

Com o tempo, o processo pode exigir a migração de um banco de dados de servidor de arquivos do Microsoft Office Access (Access) para um formato DBMS cliente-servidor. Normalmente, o ODBC é usado para essa finalidade. No entanto, para transferir para o Microsoft SQL Server (MS SQL), o Access e o MS SQL DBMS possuem ferramentas especializadas convenientes.

Existem três maneiras de transferir um banco de dados do Access para o MS SQL. Considere todos eles no exemplo de um banco de dados simples que consiste em duas tabelas e uma consulta.

Transferindo um banco de dados usandoAccess ("Assistente para converter para o formatoSQLservidor")

Para iniciar a transferência, você precisa clicar no botão "SQL Server" na área "Movimentação de dados" da guia "Trabalhar com bancos de dados".

Na janela que se abre, você precisa escolher para onde os dados serão transferidos.

Existem duas opções:

  1. Exportar para um banco de dados MS SQL existente;
  2. Crie um novo banco de dados (padrão).

Definimos o nome do servidor para o qual transferiremos o banco de dados, o nome do banco de dados que está sendo criado e especificamos o nome de usuário e a senha para conexão.

O botão ">" é usado para selecionar uma mesa, e o botão ">>" é usado para selecionar todas as mesas. Para recusar a transferência, os botões "<» и «<<» соответственно.

Depois de selecionar as mesas, você pode definir opções adicionais para sua transferência. Em particular, as versões modernas do Access podem exportar não apenas as próprias tabelas de dados, mas também as relações entre elas. Isso reduz muito o tempo necessário para migrações de banco de dados, pois eles não precisam ser recriados após a migração.

  • Crie um novo aplicativo cliente-servidor com uma interface de usuário do Access;
  • Incluir tabelas migradas no banco de dados de origem como externas (padrão);
  • Não faça nada com o banco de dados de origem.

Quando todas as informações necessárias forem coletadas, você poderá retornar a uma das etapas anteriores para verificação ou iniciar o processo de transferência clicando no botão "Concluir".

O progresso do processo de transferência é exibido claramente em uma janela especial.

Após a conclusão da migração, você pode abrir o SQL Server Management Studio e ver o resultado.

Este método é o mais simples e conveniente, mas, infelizmente, permite transferir apenas tabelas e seus elementos acompanhantes (índices, relacionamentos, etc.).

importação de banco de dadosmeios de acessoMicrosoftSQLservidor

O MS SQL pode importar dados de uma ampla variedade de fontes. Mas a importação direta do Access só é possível para bancos de dados do formato antigo (.mdb).

Instruções detalhadas para importar tais bancos de dados podem ser encontradas.

Importar bancos de dados de novos formatos (2007 e acima) é muito mais difícil.

Existem duas maneiras de resolver este problema:

  • Primeiro exporte o banco de dados do Access para o formato antigo.
    Nesse caso, você pode facilmente usar as instruções fornecidas no link acima;
  • Usando ODBC.
    Criação de uma fonte de dados para um banco de dados Access com posterior conexão através do MS SQL Server.

Infelizmente, a abordagem ODBC é bastante complicada nas versões de 64 bits do Windows.

O motivo é que as versões de 64 bits do MS SQL são fornecidas com as versões de 32 bits do SQL Server Management Studio. Essa circunstância significa que os bancos de dados do Access para os quais as fontes de dados foram criadas com base em drivers de 64 bits não podem ser importados usando este programa.

Existem novamente duas saídas (ou seja, apenas métodos usando uma interface gráfica):

  • Use versões de 32 bits do Windows, MS SQL, Office;
  • Use apenas acesso de 32 bits e configure a fonte de dados usando um gerenciador ODBC de 32 bits (geralmente C:\Windows\SysWOW64\odbcad32.exe);
  • Use software alternativo para trabalhar com MS SQL.

No entanto, mesmo que você ainda consiga estabelecer o processo de importação, os benefícios disso podem ser muito menores do que o tempo e o esforço gastos.

Ao importar, apenas as próprias tabelas e seus conteúdos são transferidos e nada mais (compare com os recursos do método anterior).

Deve-se notar também que com a importação direta do Access, o problema de exportação de consultas é parcialmente resolvido (não há acesso às consultas por ODBC). Mas, por padrão, as consultas são importadas para o banco de dados MS SQL na forma de tabelas regulares.

Felizmente, é possível ajustar os parâmetros de importação e você pode substituir manualmente a consulta SQL para criar uma tabela por uma consulta para criar uma exibição.

Para fazer isso, na janela da captura de tela acima para a consulta do Access selecionada, clique no botão "Alterar".

Na janela que se abre, clique no botão "Alterar SQL ..."

Uma janela de edição de consulta SQL será aberta, na qual, de fato, você precisa substituir a consulta gerada automaticamente

com o seu próprio.

Como resultado, a consulta do Access será transferida para o banco de dados MS SQL corretamente, como uma visão, não uma tabela.

Claro, essas configurações são um trabalho manual meticuloso, que também requer certos conhecimentos e habilidades, mas ainda assim, como dizem, "melhor do que nada".

Portanto, este método de transferência de bancos de dados Access para MS SQL é mais adequado para especialistas qualificados em ambos os DBMS.

Veja a seguir um exemplo de importação de um banco de dados do Access usando ODBC em uma versão de 32 bits do Windows. Em uma versão de 64 bits do Windows, ao usar uma versão de 32 bits do Access, a importação é semelhante, mas a fonte de dados é criada no gerenciador ODBC de 32 bits.

Criamos uma fonte de dados.

Na janela que se abre, digite seu nome.

Em seguida, clique no botão "Selecionar" e indique a qual banco de dados do Access você deseja se conectar.

Quando o nome da fonte e o arquivo do banco de dados são especificados, resta clicar no botão “Ok” e a fonte de dados para o banco de dados do Access desejado está pronta.

Agora você pode prosseguir diretamente para importar o banco de dados para o MS SQL.

Para fazer isso, no menu de contexto do banco de dados para o qual você deseja importar, selecione os itens "Tarefas" -\u003e "Importar dados".

O "Assistente de importação e exportação de dados" será aberto

Na lista suspensa "Data Source", você deve selecionar ".Net Framework Data Provider for Odbc" (se não for selecionado por padrão) e na linha Dsn da tabela especificar o nome da fonte de dados criada acima para o Access base de dados. A string de conexão ("Connection String") será gerada automaticamente.

Em seguida, você precisa especificar qual banco de dados, qual instância da importação do MS SQL. Para fazer isso, depois de clicar no botão "Avançar", selecione na lista suspensa "Destino" "Microsoft SQL Server Native Client" (conforme mostrado na captura de tela abaixo) ou "Microsoft OLE DB Provider for SQL Server", especifique o nome de usuário e a senha do banco de dados desejados para conexões.

Em seguida, você precisa selecionar as tabelas a serem importadas. Conforme observado acima, ao usar o ODBC, a importação de consultas do Access não está disponível. Portanto, ao contrário da captura de tela anterior com uma lista de objetos a serem importados, esta lista conterá apenas tabelas.

Com a ajuda de caixas de seleção, você pode selecionar todas as tabelas de uma vez (o que é feito neste exemplo) e algumas delas individualmente.

Em seguida, uma janela será mostrada com as configurações finais para o processo de importação. Vamos deixar todos os valores padrão.

Após clicar no botão "Concluir", o processo de importação será concluído. Se tudo for feito corretamente e a importação for bem-sucedida, a janela com informações sobre a importação não conterá erros (veja a captura de tela abaixo).

Para concluir o assistente, basta clicar no botão "Fechar".

O resultado pode ser visto pelo SQL Server Management Studio.

Transferindo o banco de dados do lado por meioODBC

Este método é universal para exportar dados do Access para qualquer outro DBMS. Basta que suporte o trabalho com ODBC.

Um exemplo dessa exportação já foi discutido anteriormente no artigo ""

ParaEMSQL dado forma de migrar banco de dados deO acesso não é necessário, já que apenas as tabelas com dados são exportadas e as consultas são exportadas apenas como tabelas regulares.

No entanto, esta portabilidade ainda está disponível (a versão 2014 não foi exceção). Então, vamos dar uma olhada nisso também.

Primeiro, vamos criar uma fonte de dados para trabalhar com MS SQL (que seja um DSN personalizado).

Especifique o driver para a origem.

Depois disso, o processo de criação e configuração será iniciado.

Defina o nome da fonte de dados e especifique o nome da instância do MS SQL à qual você deseja se conectar.

Depois disso, especificamos o banco de dados para o qual planejamos transferir a tabela ou consulta. Transferir usandoODBC só pode ser executado em um banco de dados já existente. Portanto, se os dados precisarem ser transferidos para um novo banco de dados, ele deverá ser criado primeiro.

Após clicar no botão "Concluir", será exibida uma janela com informações resumidas sobre a fonte de dados que está sendo criada.

Para que a fonte de dados seja finalmente criada, basta clicar no botão “OK”. Porém, é melhor primeiro verificar seu desempenho clicando no botão "Verificar fonte de dados".

Se tudo for feito corretamente, uma mensagem sobre a verificação bem-sucedida será exibida.

Agora que existe uma fonte de dados, podemos prosseguir diretamente para o processo de migração, como exemplo, exportaremos uma única consulta "Contacts Query" do banco de dados.

Para fazer isso, selecione-o com o mouse e clique no botão "Avançado" na área "Exportar" da guia "Dados externos". No menu suspenso, selecione "Banco de dados ODBC".

Neste caso, o valor original é deixado.

Após clicar no botão "Ok", você deve selecionar a fonte de dados criada.

Em seguida, digite o nome de usuário e a senha para se conectar ao servidor.

Após pressionar o botão "Ok", a exportação será executada.

No entanto, conforme mencionado acima, o resultado da exportação no caso de uma consulta não é correto.

Em vez da visualização "Solicitação de contatos", foi criada uma tabela com o mesmo nome no banco de dados MS SQL.

Além disso, mesmo que você exporte apenas tabelas, há várias etapas extras a serem executadas após a exportação (recriação de links, etc.). Portanto, o método descrito de transferência de bancos de dados do Access para o MS SQL praticamente não é mais usado.

Descrição do projeto educativo "Loja"

Esquema de link de tabela

Descrição das tabelas

m_category - categorias de produtos

m_income - recebimento de mercadorias

m_outcome - consumo de mercadorias

m_product - diretório, descrição do produto

m_supplier - diretório; informação do fornecedor

m_unit - diretório; unidades

Para testar na prática os exemplos dados neste tutorial, você precisa ter os seguintes softwares disponíveis:

Microsoft Access 2003 ou posterior.

Consulta SQL no MS Access. Começar

Para ver o conteúdo de uma tabela, clique duas vezes no nome da tabela no painel esquerdo:

Para alternar para o modo de edição do campo da tabela, selecione o modo Design no painel superior:

Para exibir o resultado de uma consulta SQL, clique duas vezes no nome da consulta no painel esquerdo:

Para alternar para o modo de edição de consulta SQL, selecione o modo SQL no painel superior:

Consulta SQL. Exemplos no MS Access. SELECIONE: 1-10

Em uma consulta SQL, a instrução SELECT é usada para selecionar nas tabelas do banco de dados.

Consulta SQL Q001. Um exemplo de consulta SQL para obter apenas os campos obrigatórios na sequência desejada:

SELECT dt, product_id, quantidade


DE m_renda;

Consulta SQL Q002. Neste exemplo de consulta SQL, o caractere asterisco (*) é utilizado para exibir todas as colunas da tabela m_product, ou seja, para obter todos os campos da relação m_product:

SELECIONE *
DE m_produto;

SolicitarSQLQ003. A instrução DISTINCT é usada para eliminar registros duplicados e obter muitos registros exclusivos:

SELECT DISTINCT product_id


DE m_renda;

Consulta SQL Q004. A instrução ORDER BY é utilizada para classificar (ordenar) registros pelos valores de um determinado campo. O nome do campo segue a cláusula ORDER BY:

SELECIONE *
DE m_receita


ORDEM POR preço;

Consulta SQL Q005. A instrução ASC é usada além da instrução ORDER BY e é usada para definir uma classificação ascendente. A instrução DESC é usada além da instrução ORDER BY e é usada para definir uma classificação decrescente. No caso em que nem ASC nem DESC são especificados, a presença de ASC (padrão) é assumida:

SELECIONE *
DE m_receita


ORDER BY dt DESC , preço;

Consulta SQL Q006. Para selecionar os registros necessários da tabela, são utilizadas várias expressões lógicas que expressam a condição de seleção. A expressão booleana vem depois da cláusula WHERE. Um exemplo de como obter da tabela m_income todos os registros para os quais o valor do valor é maior que 200:

SELECIONE *
DE m_receita


ONDE quantidade>200;

Consulta SQL Q007. Para expressar condições complexas, são usadas as operações lógicas AND (conjunção), OR (disjunção) e NOT (negação lógica). Um exemplo de como obter da tabela m_outcome todos os registros cujo valor de valor é 20 e o valor de preço é maior ou igual a 10:

preço


DE m_resultado
ONDE quantidade=20 E preço>=10;

Consulta SQL Q008. Para unir dados de duas ou mais tabelas, use as instruções INNER JOIN, LEFT JOIN, RIGHT JOIN. O exemplo a seguir recupera os campos dt, product_id, amount, price da tabela m_income e o campo title da tabela m_product. O registro da tabela m_income é conectado ao registro da tabela m_product quando o valor de m_income.product_id é igual ao valor de m_product.id:



ON m_income.product_id=m_product.id;

Consulta SQL Q009. Há duas coisas que você precisa prestar atenção nesta consulta SQL: 1) o texto da pesquisa está entre aspas simples ("); 2) a data está no formato #Month/Day/Year#, que é correto para MS Acesse. Em outros sistemas, o formato da data pode ser diferente. Exemplo de exibição de informações sobre o recebimento de leite em 12 de junho de 2011. Observe o formato da data #6/12/2011#:

SELECT dt, product_id, título, quantidade, preço


FROM m_income INNER JOIN m_product

WHERE title="Leite" And dt=#6/12/2011#; !}

Consulta SQL Q010. A instrução BETWEEN é utilizada para testar se um intervalo de valores pertence a ela. Um exemplo de consulta SQL exibindo informações sobre mercadorias recebidas entre 1º e 30 de junho de 2011:

SELECIONE *
FROM m_income INNER JOIN m_product


ON m_income.product_id=m_product.id
ONDE dt ENTRE #01/06/2011# E 30/06/2011#;

Consulta SQL. Exemplos no MS Access. SELECIONE: 11-20

Uma consulta SQL pode ser aninhada dentro de outra. Uma subconsulta nada mais é do que uma consulta dentro de uma consulta. Normalmente, uma subconsulta é usada em uma cláusula WHERE. Mas existem outras maneiras de usar subconsultas.

Pedido Q011. Exibe informações sobre os produtos da tabela m_product, cujos códigos também estão na tabela m_income:

SELECIONE *
DE m_produto


WHERE id IN (SELECT product_id FROM m_income);

Pedido Q012. Uma lista de produtos da tabela m_product é exibida, cujos códigos não estão na tabela m_outcome:

SELECIONE *
DE m_produto


WHERE id NOT IN (SELECT product_id FROM m_outcome);

Pedido Q013. Esta consulta SQL retorna uma lista exclusiva de códigos e nomes de produtos que possuem códigos na tabela m_income, mas não na tabela m_outcome:

SELECT DISTINCT product_id, título


FROM m_income INNER JOIN m_product
ON m_income.product_id=m_product.id
WHERE product_id NOT IN (SELECT product_id FROM m_outcome);

Pedido Q014. Uma lista exclusiva de categorias é exibida na tabela m_category, cujos nomes começam com a letra M:

SELECIONE o título DISTINTO


DE m_produto
WHERE título LIKE "M*";

Pedido Q015. Um exemplo de execução de operações aritméticas em campos de uma consulta e renomeação de campos em uma consulta (alias). Este exemplo calcula despesa = quantidade*preço e lucro para cada registro de consumo de item, assumindo que o lucro é de 7% das vendas:


quantidade*preço/100*7 AS lucro
DE m_resultado;

Pedido Q016. Ao analisar e simplificar as operações aritméticas, você pode aumentar a velocidade de execução da consulta:

SELECT dt, product_id, quantidade, preço, quantidade*preço AS result_sum,


result_sum*0,07 AS lucro
DE m_resultado;

Pedido Q017. Usando a instrução INNER JOIN, você pode combinar dados de várias tabelas. No exemplo a seguir, dependendo do valor de ctgry_id, cada entrada na tabela m_income corresponde ao nome da categoria da tabela m_category à qual o produto pertence:

SELECT c.title, b.title, dt, quantidade, preço, quantidade*preço AS income_sum


FROM (m_income AS a INNER JOIN m_product AS b ON a.product_id=b.id)
INNER JOIN m_category AS c ON b.ctgry_id=c.id
ORDEM POR c.título, b.título;

Pedido Q018. Funções como SUM - soma, COUNT - quantidade, AVG - média aritmética, MAX - valor máximo, MIN - valor mínimo são chamadas de funções agregadas. Eles pegam vários valores e retornam um único valor quando processados. Um exemplo de cálculo da soma do produto dos campos valor e preço usando função agregada SOMA:

SELECT SUM(valor*preço) AS Total_Sum


DE m_renda;

Pedido Q019. Um exemplo de uso de várias funções de agregação:

SELECT Sum(valor) AS Valor_Soma, AVG(valor) AS Valor_AVG,


MAX(valor) AS Valor_Máx, Min(valor) AS Valor_Min,
Count(*) AS Total_Number
DE m_renda;

Pedido Q020. Neste exemplo, é calculada a soma de todos os itens com código 1 recebidos em junho de 2011:

SELECT Sum(valor*preço) AS receita_soma


DE m_receita
WHERE product_id=1 AND dt BETWEEN #6/1/2011# AND #6/30/2011#;.

Pedido Q021. A consulta SQL a seguir calcula por quanto as mercadorias com código 4 ou 6 foram vendidas:

SELECT Sum(valor*preço) como resultado_soma


DE m_resultado
WHERE product_id=4 OU product_id=6;

Pedido Q022.É calculado para qual quantidade foi vendida em 12 de junho de 2011 de mercadorias com o código 4 ou 6:

SELECT Sum(valor*preço) AS resultado_soma


DE m_resultado
ONDE (product_id=4 OU product_id=6) AND dt=#6/12/2011#;

Pedido Q023. A tarefa é esta. Calcule o valor total pelo qual os produtos da categoria "Produtos de panificação" foram creditados.

Para resolver este problema, você precisa operar em três tabelas: m_income, m_product e m_category, porque:


- a quantidade e o preço dos bens creditados são armazenados na tabela m_income;
- o código da categoria de cada produto é armazenado na tabela m_product;
- o nome do título da categoria é armazenado na tabela m_category.

Para resolver este problema, usamos o seguinte algoritmo:


- determinação do código da categoria "Panificados" da tabela m_category por meio de uma subconsulta;
- junção das tabelas m_income e m_product para determinar a categoria de cada produto creditado;
- cálculo do valor do recebimento (= quantidade * preço) de mercadorias cujo código de categoria é igual ao código definido pela subconsulta acima.
SELECIONE
FROM m_product AS a INNER JOIN m_income AS b ON a.id=b.product_id
WHERE ctgry_id = (SELECT id FROM m_category WHERE title="Assados"); !}

Pedido Q024. O problema de cálculo da quantidade total de mercadorias creditadas da categoria "Panificados" será resolvido pelo seguinte algoritmo:
- cada registro da tabela m_income, dependendo do valor de seu product_id, da tabela m_category, corresponde ao nome da categoria;
- selecionar registros cuja categoria seja igual a "Produtos de panificação";
- calcular o valor da receita = quantidade * preço.

FROM (m_product AS a INNER JOIN m_income AS b ON a.id=b.product_id)

WHERE c.title="Assados"; !}

Pedido Q025. Este exemplo calcula quantos itens foram consumidos:

SELECT COUNT(product_id) AS product_cnt


FROM (SELECT DISTINCT product_id FROM m_outcome) AS t;

Pedido Q026. A cláusula GROUP BY é usada para agrupar registros. Normalmente, os registros são agrupados pelo valor de um ou mais campos e uma operação de agregação é aplicada a cada grupo. Por exemplo, a consulta a seguir gera um relatório sobre a venda de mercadorias. Ou seja, é gerada uma tabela que conterá os nomes das mercadorias e o valor pelo qual são vendidas:

SELECT título, SUM(valor*preço) AS resultado_soma


FROM m_produto AS a INNER JOIN m_resultado AS b
ON a.id=b.product_id
GRUPO POR título;

Pedido Q027. Relatório de vendas por categoria. Ou seja, é gerada uma tabela que conterá os nomes das categorias de produtos, o valor total pelo qual as mercadorias dessas categorias são vendidas e o valor médio das vendas. A função ROUND é usada para arredondar o valor médio para o centésimo mais próximo (a segunda casa decimal após o separador decimal):

SELECT c.title, SUM(valor*preço) AS result_sum,


ROUND(AVG(valor*preço),2) AS result_sum_avg
FROM (m_product AS a INNER JOIN m_outcome AS b ON a.id=b.product_id)
INNER JOIN m_category AS c ON a.ctgry_id=c.id
GROUP BY c.title;

Pedido Q028. Para cada produto, o número total e médio de seus recebimentos é calculado e exibe informações sobre as mercadorias, cujo número total de recebimentos é de pelo menos 500:

SELECT id_do_produto, SUM(valor) AS montante_soma,


Rodada(Média(valor),2) AS valor_médio
DE m_receita
GROUP BY product_id
HAVING Soma(valor)>=500;

Pedido Q029. Esta consulta calcula para cada item a soma e a média de seus recebimentos realizados no segundo trimestre de 2011. Se o valor total de recebimento de mercadorias não for inferior a 1000, as informações sobre este produto serão exibidas:

SELECT título, SUM(valor*preço) AS receita_soma


FROM m_income a INNER JOIN m_product b ON a.product_id=b.id
ONDE dt ENTRE #01/04/2011# E #30/06/2011#
GRUPO POR título
HAVING SUM(valor*preço)>=1000;

Pedido Q030. Em alguns casos é necessário casar cada registro de alguma tabela com cada registro de outra tabela; o que é chamado de produto cartesiano. A tabela resultante dessa junção é chamada de tabela Descartes. Por exemplo, se alguma tabela A tiver 100 entradas e a tabela B tiver 15 entradas, a tabela cartesiana consistirá em 100*15=150 entradas. A consulta a seguir junta cada entrada na tabela m_income com cada entrada na tabela m_outcome:
DE m_receita, m_resultado;

Pedido Q031. Um exemplo de agrupamento de registros por dois campos. A consulta SQL a seguir calcula para cada fornecedor a quantidade e a quantidade de mercadorias recebidas dele:


SUM(valor*preço) AS receita_soma

Pedido Q032. Um exemplo de agrupamento de registros por dois campos. A seguinte consulta calcula, para cada fornecedor, a quantidade e a quantidade de seus produtos vendidos por nós:

SELECT id_fornecedor, id_produto, SUM(valor) AS montante_soma,




GROUP BY id_do_fornecedor, id_do_produto;

Pedido Q033. Neste exemplo, as duas consultas acima (q031 e q032) são utilizadas como subconsultas. Os resultados dessas consultas são mesclados em um relatório usando o método LEFT JOIN. A consulta a seguir exibe um relatório sobre o número e a quantidade de produtos recebidos e vendidos para cada fornecedor. Deve-se atentar para o fato de que se algum produto já chegou, mas ainda não foi vendido, então a célula result_sum deste registro estará vazia. que esta consulta é apenas um exemplo de uso em relação consultas complexas como uma subconsulta. O desempenho desta consulta SQL com uma grande quantidade de dados é questionável:

SELECIONE *
DE



SUM(valor*preço) AS receita_soma

ON a.product_id=b.id GROUP BY vendor_id, product_id) AS a
ASSOCIAÇÃO À ESQUERDA
(SELECT vendor_id, product_id, SUM(valor) AS amount_sum,
SUM(valor*preço) AS resultado_soma
FROM m_resultado AS a INNER JOIN m_produto AS b
ON a.product_id=b.id GROUP BY vendor_id, product_id) AS b
ON (a.product_id=b.product_id) E (a.supplier_id=b.supplier_id);

Pedido Q034. Neste exemplo, as duas consultas acima (q031 e q032) são utilizadas como subconsultas. Os resultados dessas consultas são combinados em um relatório usando o método RIGTH JOIN. A consulta a seguir imprime um relatório sobre o valor dos pagamentos de cada cliente para os sistemas de pagamento que eles usaram e o valor dos investimentos feitos. A consulta a seguir exibe um relatório sobre o número e a quantidade de produtos recebidos e vendidos para cada fornecedor. Observe que, se um produto já foi vendido, mas ainda não foi recebido, a célula income_sum dessa entrada estará vazia. A presença dessas células vazias é um indicador de erro na contabilização das vendas, pois antes da venda é necessário primeiro que chegue o produto correspondente:

SELECIONE *
DE


(SELECT vendor_id, product_id, SUM(valor) AS amount_sum,
SUM(valor*preço) AS receita_soma
FROM m_income AS a INNER JOIN m_product AS b ON a.product_id=b.id
GROUP BY vendor_id, product_id) COMO um
JUNTAR À DIREITA
(SELECT vendor_id, product_id, SUM(valor) AS amount_sum,
SUM(valor*preço) AS resultado_soma
FROM m_outcome AS a INNER JOIN m_product AS b ON a.product_id=b.id
GROUP BY vendor_id, product_id) AS b
ON (a.supplier_id=b.supplier_id) E (a.product_id=b.product_id);

Pedido Q035.É exibido um relatório com o valor das receitas e despesas por produto. Para fazer isso, uma lista de produtos é criada de acordo com as tabelas m_income e m_outcome, a seguir, para cada produto dessa lista, é calculada a soma de seus recebimentos de acordo com a tabela m_income e a soma de suas despesas de acordo com a tabela m_outcome:

SELECT product_id, SUM(in_amount) AS income_amount,


SUM(out_amount) AS result_amount
DE
(SELECT product_id, quantidade AS in_amount, 0 AS out_amount
DE m_receita
UNIÃO TODOS
SELECT product_id, 0 AS in_amount, quantidade AS out_amount
FROM m_outcome) AS t
GROUP BY product_id;

Pedido Q036. A função EXISTS retorna TRUE se o conjunto passado a ela contiver elementos. A função EXISTS retorna FALSE se o conjunto passado a ela estiver vazio, ou seja, não possui elementos. A consulta a seguir retorna os códigos de produtos contidos na tabela m_income e na tabela m_outcome:

SELECT DISTINCT product_id


FROM m_income AS a
WHERE EXISTS(SELECT product_id FROM m_outcome AS b

Pedido Q037. São exibidos códigos de produto que estão contidos na tabela m_income e na tabela m_outcome:

SELECT DISTINCT product_id


FROM m_income AS a
WHERE product_id IN (SELECT product_id FROM m_outcome)

Pedido Q038. São exibidos códigos de produto que estão contidos na tabela m_income, mas não estão contidos na tabela m_outcome:

SELECT DISTINCT product_id


FROM m_income AS a
WHERE NOT EXISTS(SELECT product_id FROM m_outcome AS b
ONDE b.product_id=a.product_id);

Pedido Q039. Uma lista de produtos com o maior valor de vendas é exibida. O algoritmo é este. Para cada produto, é calculada a soma de suas vendas. Em seguida, determina-se o máximo dessas somas. A seguir, para cada produto, é calculada novamente a soma de suas vendas, sendo exibido o código e a soma das vendas das mercadorias, cuja soma das vendas é igual ao máximo:

SELECT product_id, SUM(valor*preço) AS valor_soma


DE m_resultado
GROUP BY product_id
HAVING SUM(valor*preço) = (SELECT MAX(s_amount)
FROM (SELECT SUM(valor*preço) AS s_amount FROM m_outcome GROUP BY product_id));

Pedido Q040. A palavra reservada IIF (instrução condicional) é usada para avaliar expressão booleana e realizar uma ou outra ação dependendo do resultado (VERDADEIRO ou FALSO). No exemplo a seguir, a entrega de um item é considerada "pequena" se a quantidade for menor que 500. Caso contrário, ou seja, a quantidade recebida for maior ou igual a 500, a entrega é considerada "grande":

SELECT dt, product_id, quantidade,


IIF(valor DE m_receita;

Consulta SQL Q041. Caso a instrução IIF seja utilizada mais de uma vez, é mais conveniente substituí-la pela instrução SWITCH. O operador SWITCH (operador de múltipla escolha) é usado para avaliar uma expressão lógica e executar uma ação dependendo do resultado. No exemplo a seguir, o lote entregue é considerado "pequeno" se a quantidade de mercadorias no lote for menor que 500. Caso contrário, ou seja, se a quantidade de mercadorias for maior ou igual a 500, o lote é considerado "grande ":

SELECT dt, product_id, quantidade,


SWITCH(quantidade =500,"grande") marca AS
DE m_renda;

Pedido Q042. Na próxima consulta, se a quantidade de mercadorias no lote de entrada for menor que 300, o lote será considerado "pequeno". Caso contrário, ou seja, se o valor da condição SELECT dt, product_id, amount,
IIF(valor IIF(valor DE m_receita;

Consulta SQL Q043. Na próxima consulta, se a quantidade de mercadorias no lote de entrada for menor que 300, o lote será considerado "pequeno". Caso contrário, ou seja, se o valor da condição SELECT dt, product_id, amount,
SWITCH(valor valor valor>=1000,"grande") marca AS
DE m_renda;

Consulta SQL Q044. Na consulta a seguir, as vendas são divididas em três grupos: pequeno (até 150), médio (de 150 a 300), grande (300 e mais). A seguir, para cada grupo, calcula-se o valor total:

SELECT Categoria, SUM(outcome_sum) AS Ctgry_Total


FROM (SELECIONE valor*preço AS resultado_soma,
IIf(valor*preço IIf(valor*preço DE m_resultado) AS t
GRUPO POR Categoria;

Consulta SQL Q045. A função DateAdd é usada para adicionar dias, meses ou anos a uma determinada data e obter uma nova data. Próximo pedido:
1) adicione 30 dias à data do campo dt e exiba Nova data no campo dt_plus_30d;
2) adicione 1 mês à data do campo dt e exiba a nova data no campo dt_plus_1m:

SELECT dt, dateadd("d",30,dt) AS dt_plus_30d, dateadd("m",1,dt) AS dt_plus_1m


DE m_renda;

Consulta SQL Q046. A função DateDiff foi projetada para calcular a diferença entre duas datas em unidades diferentes (dias, meses ou anos). A consulta a seguir calcula a diferença entre a data no campo dt e a data atual em dias, meses e anos:

SELECT dt, DateDiff("d",dt,Data()) AS last_day,


DateDiff("m",dt,Date()) AS últimos_meses,
DateDiff("aaaa",dt,Data()) AS last_years
DE m_renda;

Consulta SQL Q047. O número de dias a partir da data de recebimento das mercadorias (tabela m_income) até data atual usando a função DateDiff e a data de validade é comparada (tabela m_product):


DateDiff("d",dt,Date()) AS last_days
FROM m_income AS a INNER JOIN m_product AS b
ON a.product_id=b.id;

Consulta SQL Q048. O número de dias a partir da data de recebimento da mercadoria até a data atual é calculado e, em seguida, é verificado se esse número excede a data de vencimento:

SELECT a.id, product_id, dt, lifedays,


DateDiff("d",dt,Date()) AS last_days, IIf(last_days>lifedays,"Yes","No") AS date_expire
FROM m_income a INNER JOIN m_product b
ON a.product_id=b.id;

Consulta SQL Q049. O número de meses a partir da data de recebimento das mercadorias até a data atual é calculado. A coluna month_last1 calcula o número absoluto de meses, a coluna month_last2 calcula o número de meses completos:

SELECT dt, DateDiff("m",dt,Data()) AS mês_último1,


DateDiff("m",dt,Date())-iif(dia(dt)>dia(data()),1,0) AS mês_último2
DE m_renda;

Consulta SQL Q050.É exibido um relatório trimestral sobre a quantidade e quantidade de mercadorias recebidas em 2011:

SELECT kvartal, SUM(outcome_sum) AS Total


FROM (SELECT montante*preço AS resultado_soma, mês(dt) AS m,
SWITCH(m =10,4) AS kvartal
FROM m_income WHERE ano(dt)=2011) AS t
bloco GROUP BY;

Pedido Q051. A consulta a seguir ajuda a saber se os usuários conseguiram inserir no sistema informações sobre o consumo de mercadorias por um valor maior que o valor do recebimento das mercadorias:

SELECT product_id, SUM(in_sum) AS income_sum, SUM(out_sum) AS result_sum


FROM (SELECT product_id, quantidade*preço como entrada_soma, 0 como saída_soma
de m_income
UNIÃO TODOS
SELECT product_id, 0 como in_sum, quantidade*preço como out_sum
de m_outcome) AS t
GROUP BY product_id
TENDO SOMA(em_soma)
Pedido Q052. A numeração das linhas retornadas pela consulta é implementada de diferentes formas. Por exemplo, você pode renumerar as linhas de um relatório elaborado no MS Access usando o próprio MS Access. Você também pode renumerar usando linguagens de programação, por exemplo, VBA ou PHP. No entanto, às vezes isso precisa ser feito na própria consulta SQL. Assim, a consulta a seguir numerará as linhas da tabela m_income de acordo com a ordem crescente dos valores do campo ID:

SELECT COUNT(*) como N, b.id, b.product_id, b.amount, b.price


FROM m_income a INNER JOIN m_income b ON a.id GROUP BY b.id, b.product_id, b.amount, b.price;

Pedido Q053. Os cinco primeiros entre os produtos pela quantidade de vendas são exibidos. A saída dos primeiros cinco registros é realizada usando a instrução TOP:

SELECT TOP 5, product_id, sum(valor*preço) AS summa


DE m_resultado
GROUP BY product_id
ORDER BY soma(valor*preço) DESC;

Pedido Q054. Os cinco primeiros entre os produtos pelo valor das vendas são exibidos e as linhas são numeradas como resultado:

SELECT COUNT(*) AS N, b.product_id, b.summa


DE


FROM m_outcome GROUP BY product_id) COMO um
JUNÇÃO INTERNA
(SELECT product_id, sum(valor*preço) AS summa,
summa*10000000+product_id AS id
FROM m_outcome GROUP BY product_id) AS b
ON a.id>=b.id
GROUP BY b.product_id, b.summa
TENDO CONTAGEM(*)ORDEM POR CONTAGEM(*);

Pedido Q055. A consulta SQL a seguir mostra o uso das funções matemáticas COS, SIN, TAN, SQRT, ^ e ABS no MS Access SQL:

SELECT (selecionar contagem(*) de m_income) como N, 3,1415926 como pi, k,


2*pi*(k-1)/N como x, COS(x) como COS_, SIN(x) como SIN_, TAN(x) como TAN_,
SQR(x) como SQRT_, x^3 como "x^3", ABS(x) como ABS_
FROM (SELECT COUNT(*) AS k
FROM m_income AS a INNER JOIN m_income AS b ON a.idGROUP BY b.id) t;

Consulta SQL. Exemplos no MS Access. ATUALIZAÇÃO: 1-10

Pedido U001. A seguinte consulta de alteração SQL aumenta os preços dos itens com o código 3 na tabela m_income em 10%:

UPDATE m_income SET preço = preço*1.1


WHERE product_id=3;

Pedido U002. A seguinte consulta de atualização SQL aumenta a quantidade de todos os produtos na tabela m_income em 22 unidades cujos nomes começam com a palavra "Manteiga":

UPDATE m_income SET valor = valor+22


WHERE product_id IN (SELECT id FROM m_product WHERE title LIKE "Oil*");

Pedido U003. A seguinte consulta de alteração SQL na tabela m_outcome reduz os preços de todos os bens produzidos pela OOO Sladkoe em 2 por cento:

UPDATE m_outcome SET preço = preço*0,98


WHERE product_id IN
(SELECT a.id FROM m_product a INNER JOIN m_supplier b
ON a.supplier_id=b.id WHERE b.title="OOO"Сладкое"");. !}