| 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: 
            Quais campos(colunas) da tabela deseja obter 
			  O nome da Tabela da qual você quer obter os
                dados. Assim uma instrução SELECT para selecionar todos
        os registros da tabela - tblalunos
        - poderá ser escrita como:
		
         
            
                | SELECT * FROM
                tblalunos -O
                asterico ( * ) é o curinga para indicar todos os
                campos da tabela -A cláusula FROM
                indica de onde os dados serão extraídos. | Para selecionar os campos nome
        e endereço da tabela tblalunos ,
        faremos: 
            
                | SELECT nome,
                endereco FROM tblalunos -  
				Os nomes dos campos e das tabelas
                podem ser indicados sem colchêtes [] , quando
                não existir espaços ou pontuação, e são
                separados por vírgulas. Assim para uma tabela de nome Tabela
                Alunos com os campos : Nome Aluno
                e Endereço Aluno seriamos obrigados a
                escrever: SELECT [Nome
                Aluno], [Endereço Aluno] FROM [Tabela Alunos] |  | 
    
        |  | 
    
        | 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 , | 
    
        |  | 
    
        | 
            
                | Vejamos um exemplo onde temos uma tabela
                chamada Produtos com os
                seguintes campos: Produto,Nome , Preço
                e noutra tabela chamada Estoque
                os campos:  Produto, quantidade |  | 
    
        | 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: 
            
                | SELECT <nome
                dos campos> FROM <nome da tabela> WHERE
                <critério> | Para extrair uma relação
        com o nome dos alunos da 1 série,
        faremos: 
            
                | SELECT nome
                FROM tblalunos WHERE serie="1" |  | 
    
        |  | 
    
        | 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: 
            
                | SELECT nome
                FROM tblalunos WHERE serie=1 | 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: 
            
                | sql="SELECT
                nome FROM tblalunos WHERE serie=' " &
                text1.text & " ' " 
				ou para o campo serie
                definido como tipo Numero. sql="SELECT
                nome FROM tblalunos WHERE serie= " &
                text1.text  |  | 
    
        | 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: 
            
                | sql =
                "Select nome FROM tblalunos WHERE
                nascimento= #8/12/1986#" | Dando a opção ao usuário de informa a data e
        usando um MaskeditBox(Maskdata) para receber a
        informacão teremos: 
            
                | sql="Select
                nome FROM tblalunos WHERE nascimento=" &
                "#" & Format(maskdata,
                "mm/dd/yyyy") & "#" |  | 
    
        | 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: 
            
                | sql="SELECT
                nome FROM tblempresas WHERE nome= " &
                " Macdolnad's" |  | 
    
        |  | 
    
        | 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: 
            
                | sql="SELECT
                nome FROM tblalunos WHERE serie=' " &
                text1.text & " ' " ORDER BY nome | para ordernar em ordem de teríamos: 
            
                | sql="SELECT
                nome FROM tblalunos WHERE serie=' " &
                text1.text & " ' " ORDER BY nome
                DESC |  | 
    
        |  | 
    
        | 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: 
            
                | SELECT nome
                FROM tblalunos WHERE nome LIKE "Jos*" | Isto retornará os possíveis nomes: José ,
        Josué, Josimar, Josias, etc... Note que usamos o asterístico (*) que funciona como um
        coringa , substituindo os demais caracteres. A seguir listamos abaixo as principais ocorrências : 
            
                | Tipo de ocorrência | Padrão
                utilizado na Consulta SQL | O retorno da
                Pesquisa |  
                | Múltiplos caracteres | b*b | bb, bBb, bccccB |  
                | Caractere especial | b[*]b | b*b |  
                | Múltiplos caracteres | ab* | abcdefg, abc |  
                | Caractere único | b?b | bbb, b1b,bNb |  
                | Dígito único | b#b | b0b,b1b,b4b |  
                | Intervalo de caracteres | [b-h] | c,d,e,f,g |  
                | Não dígito | [!0-9] | A,a, %, P |  | 
    
        |  | 
    
        | 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: | 
    
        | 
            O nome de cada tabela na qual cada campo é
                selecionadoOs nomes dos campos dos quais você está
                selecionando os dadosO relacionamento entre as tabelas | 
    
        | 
            
                | Assim, supondo que você deseja obter o nome
                e a nota de cada aluno do banco de dados
                Escola.mdb; se você observar
                vai notar que não temos essas informações em
                uma mesma tabela. Os dados que desejamos
                encontram-se em duas tabelas: Tblalunos
                ( o nome do aluno ) , TblNotas
                ( o codigo do curso e a nota) |  
                | A sintaxe para o comando SQL extrair esses
                dados(nome e nota, ordenados pelo nome do
                aluno) é: |  | 
    
        | 
            
                | SELECT
                tblalunos.nome, tblnotas.nota FROM tblalunos INNER JOIN tblnotas ON
                tblalunos.codaluno = tblnotas.codaluno ORDER BY
                tblalunos.nome;
 |  | 
    
        |  | 
    
        | 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  é: | 
    
        | 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: | 
    
        | 
            
                | Tipos de JOIN | Registros da Tabela
                da Esquerda | Registros da Tabela
                da Direita |  
                | INNER | Somente registros com um
                registro correspondente na tabela da direita | Somente registros com um
                registro correspondente na tabela da esquerda |  
                | LEFT | Todos os Registros | Somente registros com um
                registro correspondente na tabela da esquerda |  
                | RIGHT | Somente registros com um
                registro correspondente na tabela da direita | Todos os Registros |  |