Baixe o app para aproveitar ainda mais
Prévia do material em texto
8ºAula Introdução ao SQL Objetivos de aprendizagem Ao término desta aula, vocês serão capazes de: • Saber o que é a Linguagem SQL; • Entender os principais comandos dessa linguagem. Olá, Vamos finalizar os nossos estudos com uma introdução à Linguagem SQL. É através dessa linguagem que se faz toda a manipulação de dados com o seu banco de dados. Assim, é de absoluta importância essa matéria. Portanto, leia essa aula e siga os exemplos que serão mostrados a seguir. Se tiver alguma dúvida, use os recursos que estão na sua área do aluno. Bons estudos! Banco de Dados I 58 1 – Linguagem SQL 2 – Comandos DDL 3 – Comandos DCL 1 - Linguagem SQL SQL é uma linguagem criada para consulta e mutação de dados. Sua sigla vem do inglês Structured Query Language – Linguagem Estruturada de Consultas. Inicialmente chamada de SEQUEL, foi projetada e implementada para um banco de dados da IBM, mas sua popularidade foi imensa. Virou padrão ANSI em 1986, e, a partir daí, passou a ser a linguagem de consulta na grande maioria dos bancos de dados relacionais. Seções de estudo Convenções a serem adotadas Nesta aula, abordaremos algumas convenções para explicar comandos SQL. Vejam: a. Escreveremos as palavras reservadas em maiúscula; b. Parâmetros fornecidos pelo usuário, utilizaremos aspas (‘ ‘); c. Para finalizar cada instrução utilizaremos ponto-e-vírgula (“ ; “); d. Os nomes de campos, tabelas, visões e demais objetos devem conter apenas letras, números e alguns caracteres especiais, em particular o traço (“ - “) e sublinhado (“ _ “). Espaços em branco não serão permitidos; e. Para informar que a instrução não é obrigatória colocaremos essa informação em colchetes ( [ ] ); f. As instruções obrigatórios nós iremos colocar entre parênteses ( ); g. Quando houver mais de um parâmetro aplicável a uma determinada situação as opções estarão separadas por ( | ). Como você viu na aula 02, a linguagem SQL tem suas instruções divididas em três tipos: • DDL (comandos que criam, alteram ou removem objetos) - CREATE, ALTER, DROP. • DCL (comandos que ajudam na segurança do banco de dados) - GRANT, REVOKE. • DML (comandos responsáveis pela manipulação dos dados) - SELECT, DELETE, UPDATE, INSERT. Nas próximas seções, vamos abordar os comandos DDL e DML. 2 - Comandos DDL Nesta seção, abordaremos os comandos de criação de tabelas e bancos de dados. 2.1 – Criando o banco de dados Vamos criar o banco de dados. Para isso, usamos o comando CREATE DATABASE, que segue a seguinte sintaxe: Onde db_name é o nome do novo banco de dados a ser armazenado. CHARACTER SET e COLLATE são especificações de codificações de dados, onde se define qual a tabela de arquivos a ser armazenado. O conjunto de caracteres mais usado é uft8mb4. A instrução [IF NOT EXISTS] é utilizada para criar o banco se não existir um banco de dados de mesmo nome na máquina. Isso serve só para evitar que o MySQL retorne um erro de execução caso tente criar um banco de dados de mesmo nome. Para o nosso exemplo, vamos criar um banco de dados chamado VENDAS. A instrução de criação seria esta: CREATE DATABASE VENDAS DEFAULT CHARACTER SET utf8mb4; 2.2 – Deletando o banco de dados Para deletar o banco de dados por completo, usamos a seguinte sintaxe: DROP DATABASE db_name; Onde db_name é o nome do banco a ser removido. Lembrem-se de que essa operação não pode ser revertida uma vez executada, e remove o banco, e todas as tabelas e dados associados. Assim, para o banco de dados VENDAS, temos: DROP DATABASE VENDAS; Os comandos que serão mostrados a seguir necessitam ser vinculados a um banco a ser executado. Vejam o final da última aula para saber como fazer no MySQL Workbench. 2.3 – Criando tabelas Para criar tabelas, usamos a instrução CREATE TABLE, que segue a seguinte sintaxe: Onde nome é o nome da tabela a ser criada, nome1, nome2, ..., nomeN são os nomes das colunas. tipo é o tipo da respectiva coluna (o domínio). Para cada coluna, podemos especificar se não aceita valores nulos (com a cláusula NOT NULL) e se um campo do tipo inteiro vai ter seu valor 59 Os tipos de dados do MySQL • CHAR(num): armazena uma string de tamanho fixo – ou seja, mesmo que tenha um tamanho menor que o tamanho máximo, sempre ocupará o número máximo de caracteres especificado. O parâmetro num especifica a quantidade máxima de caracteres que pode ter essa string. Mas, mesmo que não tenha sido especificado, o tamanho máximo é fixado em 255 caracteres; • VARCHAR(num): armazena uma string de um tamanho variável. O tamanho máximo é especificado também pela cláusula num; • TEXT: Armazena uma string de até 65535 caracteres; • BLOB: Sua função é armazenar objetos largos, como imagens, por exemplo. • INT: Armazena um valor entre -2147483648 a 2147483647. Se for do tipo UNSIGNED INT, seu valor vai de 0 a 4294967295; • FLOAT: Armazena um valor real no banco; • DOUBLE: Armazena um valor real maior no banco; • DATE(): Armazena uma data no padrão AAAA-MM-DD, sendo um valor entre 1000-01-01 (01/01/1000) a 9999-12-31 (31/12/9999); • DATETIME(): Armazena uma data e hora no padrão AAAA-MM-DD HH:MM:SS; • TIME: Armazena uma hora no padrão HH:MM:SS, dentro da escala -838:59:59 a 838:59:59; • TIMESTAMP: Aceita uma data da mesma forma que DATETIME, mas armazena em número de segundos que se passaram desde o dia Unix (meia-noite do dia 01/01/1970). Aceita datas de até 03:14:07 do dia 09/01/2038. incrementado automaticamente (com a cláusula AUTO_ INCREMENT). Para criarmos uma tabela de exemplo Empregado, com os dados: nome, código (sendo a sua chave primária) e endereço, pode ser usada a seguinte sintaxe: 2.4 – Eliminando Tabelas Para eliminar tabelas, usamos simplesmente o comando: DROP TABLE nome; Onde nome é o nome da tabela a ser eliminada. Uma vez executada, a tabela e os dados que foram armazenados serão removidos permanentemente. Para remover a tabela Empregados, fazemos o seguinte: DROP TABLE Empregados; 2.5 – Inserindo Dados Para inserir dados, usamos o comando INSERT. Há duas formas de inserir. A primeira não especifica os campos a serem preenchidos, colocando todos como padrão. Veja este exemplo: INSERT INTO Empregados VALUES (01, ‘Fulano de Tal’, ‘Rua das Acácias, 38’); Nesse exemplo criamos uma nova linha na tabela Empregados, com o código 01, o nome Fulano de Tal e o seu endereço como Rua das Acácias, 38. Nessa forma, devemos inserir todos os valores dos campos para a tabela, na ordem dos campos que foram especificados. Mas, e se quisermos inserir na tabela apenas os campos que nos interessam? Basta especificar antes do parâmetro VALUES quais campos a serem preenchidos e a sua ordem. Veja: INSERT INTO Empregados (codigo, nome) VALUES (02, ‘Sicrano’); Não custa lembrar que, se você se esquecer de especificar valor para um atributo que tenha sido colocado como NOT NULL (obrigatório), será gerado um erro e a inserção é anulada. 2.6 – Atualizando dados Para atualizar dados, podemos usar a instrução UPDATE: Podemos fazer dois tipos de atualizações. O primeiro tipo atualiza todas as tuplas de uma vez, sem o uso da cláusula WHERE. Neste exemplo, colocamos o endereço de todos os funcionários como “Rua Teste 99”. Podemos restringir ao número de linhas afetadas estabelecendo uma condição com a cláusula WHERE. Nesse caso, alteramos o endereço do empregado de código 99. Ou também podemos restringir pelo nome. No outro exemplo, alteramos o endereço do empregado, cujo nome é Felipe. Banco de Dados I 60 Escrevendo parâmetros de seleção Os parâmetros que especificamos em WHERE são denominados de parâmetros de consulta. É nesses parâmetros que definimos qual o conjunto de tuplas que será selecionado para alteração, deleção ou retorno dos dados. Um parâmetro pode ser escrito assim: <coluna> <operador>. Onde <coluna> é o nome da coluna a ser comparada, e o operador identifica qual a operação de seleção a ser feita. Vale lembrar que somentesão selecionadas aquelas linhas que corresponderem à seleção. No exemplo acima, comparamos todas as linhas procurando se tem alguma tupla cujo valor do campo nome era Felipe. O quadro abaixo mostra outros parâmetros: <operador> Descrição = value Igual a Ex: codigo = 10 < value Menor que Ex: codigo < 10 > value Maior que Ex: codigo > 10 <= value Menor ou igual a Ex: codigo <= 10 >= value Maior ou igual a Ex: codigo >= 10 <> value Diferente de Ex: codigo <> 10 BETWEEN value AND value Procura se um valor está dentro da faixa de valores especificada n Ex: codigo BETWEEN 1 AND 20 LIKE value Busca de caracteres, procurando se alguma tupla corresponde a um padrão de caracteres. Podem ser usados caracteres curinga, como % e _ Ex: nome LIKE “F%” (procura todos os nomes que começam com F) IN (value,value,....value) Verifica se um campo possui um dos elementos da lista Ex: codigo IN (2,3,5,6) IS NULL Verifica se o valor em questão é nulo Ex: codigo IS NULL IS NOT NULL Verifica se o valor em questão não é nulo Ex: codigo IS NOT NULL Vamos a alguns exemplos: WHERE UF = ‘MS’ WHERE CODCID = 2 WHERE CODCLI BETWEEN 10 AND 20 WHERE CEP IS NOT NULL WHERE UF NOT IN (MS, MT, GO, DF) WHERE ((CODCLI >= 10) AND (CODCLI <= 50)) Além disso, podemos ligar dois parâmetros para formar um só, usando os seguintes parâmetros: • AND: Seleciona as tuplas que satsfazem as duas condições ao mesmo tempo. Ex: nome = ‘Felipe’ AND codigo = ‘20’ (seleciona todas as tuplas com nome Felipe e com código 20) • OR: Seleciona as tuplas que satisfazem uma das duas condições. Ex: nome = ‘Felipe’ OR codigo = ‘20’ (seleciona todas as tuplas com nome Felipe ou que tenha o código 20); • NOT: Seleciona as tuplas que não satisfazem a condição especificada. Ex: NOT (codigo = 20) (seleciona todas as tuplas que não tiverem o código igual a 20) 2.7 – Removendo dados Para remover dados, podemos usar a instrução DELETE: DELETE FROM nome [WHERE <condição>] Assim, se queremos remover o Empregado de código 99, usamos a seguinte instrução: DELETE FROM Empregados WHERE codigo = 99; Se quisermos limpar a tabela, removendo todas as tuplas, devemos executar o seguinte comando, sem especificar condição alguma: DELETE FROM Empregados; A seguir, vamos entrar nas consultas de busca no banco de dados. 3 - Comandos DCL O único comando que se enquadra nessa categoria é o comando SELECT. É essa operação que te permite extrair informação real das informações cadastradas em sua tabela. De acordo com as ideias de Machado (2004), quando suas tabelas atingem centenas, milhares de registros, é impossível discernir linhas, encontrar informações importantes, ou agregar dados em um grupo usando o browsing pelas tabelas. É também praticamente impossível unir duas ou mais tabelas manualmente, se você precisar relacionar dados armazenados através destas tabelas. Você pode usar o Select para fazer tarefas como: • criar uma lista de valores únicos em uma coluna; • criar uma lista de combinações de valores únicos em duas ou mais colunas; • limitar as linhas retornadas por uma operação; • encontrar linhas retornadas por uma operação; • encontrar linhas que satisfaçam uma seleção com múltiplos critérios; • agrupar os resultados de seu pedido em diferentes maneiras; • combinar informações de duas ou mais colunas em uma única coluna; • agregação de valores e seleção entre agregações; • junções entre tabelas para extrair informações de cada tabela; • junções entre tabelas para agregar informações entre tabelas. 61 A sua sintaxe é esta: Onde: • ALL: retorna todas as linhas no resultado da instrução, inclusive as linhas duplicadas; • DISTINCT: elimina linhas duplicadas do resultado da instrução; • FROM: especifica uma ou mais tabelas que originam as colunas selecionadas; Banco de Dados de Exemplo Para os próximos exemplos, usaremos um hipotético banco de dados de exemplo. O modelo ER e Relacional se encontram expressos abaixo: Figura 1 – Modelo ER do banco de dados de exemplo Fonte: MACHADO; ABREU, 2009 Figura 2 – Modelo relacional do banco de dados de exemplo. As chaves amarelas indicam chaves primárias, as chaves vermelhas indicam chaves primárias estrangeiras. Os losangos vermelhos indicam chaves estrangeiras. Fonte: Acervo Pessoal. Os arquivos para criação e preenchimento do banco de dados estarão disponíveis na sua plataforma. • WHERE: determina, por meio de uma expressão lógica, quais linhas da tabela de origem dever ser exibidas no resultado da instrução; • GROUP BY: agrupa, em um única linhas, as linhas da tabela resultante que apresentarem o mesmo valor na coluna especificada. • HAVING: da mesma forma que a cláusula WHERE permite a filtragem das linhas a serem exibidas, a cláusula HAVING filtra os grupos definidos em GROUP BY, somente estes deverão ser exibidos. • ORDER BY: permite ordenar os dados apresentados na tabela resultante do SELECT. Essa ordenação pode ser ascendente (ASC – padrão) ou descendente (DESC). Banco de Dados I 62 Após a inserção dos dados na tabela (verifique os arquivos da sua plataforma), podemos começar a executar os comandos SELECT. Vamos dar alguns exemplos, e a cada exemplo, mostramos uma tabela com os resultados da consulta referida no item anterior no banco de dados de teste (a que for indicada no início do item): • SELECT * FROM CLIENTE; – Nesse caso, o comando retornará todas as colunas da tabela. Nesse caso o SQL entende o “*” como atalho. No exemplo, o resultado da consulta SQL seria a tabela clientes com todos os dados, como na figura Tabela Cliente. Ao executar esse comando no banco de dados de teste, você deve ver resultados similares a este: CODCLI NOME ENDERECO BAIRRO CEP TELEFONE CPF IE CODCID 1 Nicolash Pereira Rodrigues Rua José Germano, 1456 Centro 13971-150 NULL 13971-150 NULL 1 2 Cauã Oliveira Azevedo Rua Luís Squilace, 175 Jd. Novo 05326-010 NULL 855.498.901-51 NULL 3 3 Martim Melo Araujo Rua de Mizar, 429 Centro 32550-220 NULL 421.837.827-49 NULL 2 4 Matheus Pinto Almeida Travessa Getúlio Vargas, 1426 Jd. Colibri 54250-382 NULL NULL NULL 4 5 Estevan Pereira Cardoso Travessa Maria da Penha Costa, 692 Centro 29707-190 NULL 231.416.173-41 NULL 5 6 Rebeca Sousa Fernandes Avenida da Saudade, 1899 Centro 09030-030 NULL NULL NULL 3 7 Thaís Melo Rodrigues Rua N, 1379 Centro 35900-626 NULL 884.501.839-36 NULL 11 8 Matheus Martins Ribeiro Rua Ubaldo Damiano, 1006 Centro 17204-281 NULL NULL NULL 1 9 Leonardo Barros Melo Rua Treze de Maio, 808 Centro 65900-220 NULL 735.643.235-89 NULL 2 10 Emilly Rocha Ribeiro Passagem Santa Luzia, 221 Centro 66117-060 NULL 613.666.706-12 NULL 1 11 Luan Goncalves Melo Rua Chapada Velha, 944 Centro 05728-070 NULL 656.106.888-25 NULL 3 12 Júlia Gomes Araujo Rua Alamanda, 751 Centro 06728-320 NULL 184.206.138-00 NULL 3 13 Camila Rodrigues Barbosa Rua dos Cumarus, 1977 Centro 38703-678 NULL 973.600.869-06 NULL 2 14 Melissa Araujo Almeida Rua 104A, 1820 Centro 74083-310 NULL 677.324.633-40 NULL 1 15 Laura Barros Rodrigues Rua Doutor Muraí, 697 Centro 03159-080 NULL 670.936.770-37 NULL 3 63 • SELECT CODCLI, NOME FROM CLIENTE; – Nesse caso, estamos limitando a exibição dos dados da tabela, somente serão mostrados os campos especificados, no caso, o código do cliente e seu nome. CODCLI NOME 1 Nicolash Pereira Rodrigues 2 Cauã Oliveira Azevedo 3 Martim Melo Araujo 4 Matheus Pinto Almeida 5 Estevan Pereira Cardoso 6 Rebeca Sousa Fernandes 7 Thaís Melo Rodrigues 8 Matheus Martins Ribeiro 9 Leonardo Barros Melo 10 Emilly Rocha Ribeiro 11 Luan Goncalves Melo 12 Júlia Gomes Araujo 13 Camila Rodrigues Barbosa 14 Melissa Araujo Almeida 15 Laura Barros Rodrigues • SELECT DISTINCT BAIRRO FROM CLIENTE; – temos no SQL a cláusula DISTINCT, que na hora do retorno do resultado ele exclui os valores duplicados. Nesse caso, mostra apenas os bairros que foram cadastrados. Remova a palavra DISTINCT e verá a listade todos os bairros cadastrados, mesmo que sejam repetidos. BAIRRO Centro Jd. Novo Jd. Colibri • SELECT CODCLI, NOME, BAIRRO, TELEFONE FROM CLIENTE ORDER BY NOME; – seleciona os campos especificados e ordena pelo nome em ordem alfabética crescente (Se quisermos a ordem alfabética inversa, escrevemos assim: SELECT CODCLI, NOME, BAIRRO, TELEFONE FROM CLIENTE ORDER BY NOME DESC;). CODCLI NOME BAIRRO TELEFONE 13 Camila Rodrigues Barbosa Centro NULL 2 Cauã Oliveira Azevedo Jd. Novo NULL 10 Emilly Rocha Ribeiro Centro NULL 5 Estevan Pereira Cardoso Centro NULL 12 Júlia Gomes Araujo Centro NULL 15 Laura Barros Rodrigues Centro NULL 9 Leonardo Barros Melo Centro NULL 11 Luan Goncalves Melo Centro NULL 3 Martim Melo Araujo Centro NULL 8 Matheus Martins Ribeiro Centro NULL 4 Matheus Pinto Almeida Jd. Colibri NULL 14 Melissa Araujo Almeida Centro NULL 1 Nicolash Pereira Rodrigues Centro NULL 6 Rebeca Sousa Fernandes Centro NULL 7 Thaís Melo Rodrigues Centro NULL • SELECT CODCLI, NOME, BAIRRO, TELEFONE FROM CLIENTE WHERE TELEFONE IS NULL; - Estamos agora utilizando o WHERE para limitar as linhas que serão retornadas. Neste caso todos os telefones com valores nulos serão exibidos. CODCLI NOME BAIRRO TELEFONE 1 Nicolash Pereira Rodrigues Centro NULL 2 Cauã Oliveira Azevedo Jd. Novo NULL 3 Martim Melo Araujo Centro NULL 4 Matheus Pinto Almeida Jd. Colibri NULL 5 Estevan Pereira Cardoso Centro NULL 6 Rebeca Sousa Fernandes Centro NULL 7 Thaís Melo Rodrigues Centro NULL 8 Matheus Martins Ribeiro Centro NULL 9 Leonardo Barros Melo Centro NULL 10 Emilly Rocha Ribeiro Centro NULL 11 Luan Goncalves Melo Centro NULL 12 Júlia Gomes Araujo Centro NULL 13 Camila Rodrigues Barbosa Centro NULL 14 Melissa Araujo Almeida Centro NULL 15 Laura Barros Rodrigues Centro NULL • SELECT * FROM CIDADE WHERE UF IN (‘SP’, ‘DF’, ‘MT’) ORDER BY NOMECID, CODCID; - Nesse exemplo, ele irá listar todos os campos (colunas) da tabela CIDADE, e mostrar somente as linhas cujas siglas de estado estão presentes na lista (IN), Neste caso, SP, DF ou MT. Note que também ele ira ordenar o resultado primeiramente por nome, se existir nomes iguais ele irá ordenar pela sua chave. Para fazer o contrário, ou seja, listar as cidades não pertencentes a esses estados, basta colocar: WHERE UF NOT IN (‘SP’, ‘DF’, ‘MT’). CODCID NOMECID UF 8 BRASÍLIA DF 4 CUIABA MT 11 SÃO JOSÉ DO RIO PRETO SP 3 SÃO PAULO SP 10 TUPÃ SP • SELECT CODCLI, NOME, CPF, IE FROM CLIENTE WHERE CODCLI BETWEEN 10 Banco de Dados I 64 AND 13 ORDER BY CODCLI, NOME; - Retornamos os campos entre a faixa de valores especificados em BETWEEN. CODCLI NOME CPF IE 10 Emilly Rocha Ribeiro 613.666.706-12 NULL 11 Luan Goncalves Melo 656.106.888-25 NULL 12 Júlia Gomes Araujo 184.206.138-00 NULL 13 Camila Rodrigues Barbosa 973.600.869-06 NULL • SELECT CODCLI, NOME, ENDERECO, BAIRRO, CODCID, CEP, TELEFONE, CPF FROM CLIENTE WHERE NOME LIKE ‘Matheus%’ ORDER BY NOME; – Seleciona todas as tuplas que começam com Matheus. O símbolo % indica a busca por um ou mais caracteres. CODCLI NOME ENDEREÇO BAIRRO CODCID CEP FONE CPF 8 Matheus Martins Ribeiro Rua Ubaldo Damiano, 1006 Centro 1 17204- 281 NULL NULL 4 Matheus Pinto Almeida Travessa Getúlio Vargas, 1426 Jd. Colibri 4 54250- 382 NULL NULL • SELECT CODCLI, NOME, CODCID FROM CLIENTE WHERE CODCID = 1 ORDER BY NOME; – Essa consulta retorna somente os códigos das cidades que possuem os valores iguais a 1 e ordenados por nome. CODCLI NOME CODCID 10 Emilly Rocha Ribeiro 1 8 Matheus Martins Ribeiro 1 14 Melissa Araujo Almeida 1 1 Nicolash Pereira Rodrigues 1 E, com isso, finalizamos a nossa aula introdutória sobre SQL e a nossa matéria de Banco de Dados I. Esperamos que a sua jornada tenha sido proveitosa e que os conteúdos ensinados sejam muito úteis em sua carreira profissional. Aguardamos você nas ferramentas de ensino para eventuais dúvidas. Até mais! Retomando a aula Chegamos ao final da nossa última aula. Vamos recordar? 1 – Linguagem SQL SQL é uma linguagem criada para consulta e mutação de dados. Sua sigla vem do inglês Structured Query Language – Linguagem Estruturada de Consultas. Inicialmente chamada de SEQUEL, foi projetada e implementada para um banco de dados da IBM, mas sua popularidade foi imensa. Virou padrão ANSI em 1986, e a partir daí, passou a ser a linguagem de consulta na grande maioria dos bancos de dados relacionais. 2 – Comandos DDL Nesta seção, você viu os comandos que definem um banco de dados, com operações como criação e remoção de banco de dados, criação, alteração e remoção de itens de uma tabela. 3 – Comandos DCL Por fim, na última seção, você teve uma visão geral sobre o comando SELECT, usado para extrair dados de um banco de dados, através de condições expressas na consulta. CARVALHO, I. C. L.; KANISKI, A. L. A sociedade do conhecimento e o acesso à informação: para que e para quem? Revista Ciência da Informação, Brasília, v. 29, n. 3, p. 33-39, set./dez. 2000. CASTELLS, M. A sociedade em rede: a era informação − economia, sociedade e cultura. São Paulo: Paz e Terra, 2007. DAVENPORT, T. H. Ecologia da informação. São Paulo: Futura, 2001. HEUSER, Carlos Alberto. Projeto de Banco de dados. Porto Alegre: Bookman, 2009. ELMASRI, R.; NAVATHE, S. B. Sistema de Banco de Dados. Tradução de Marília Guimarães Pinheiro et al. São Paulo: Pearson Education, 2005. O’BRIEN, J. A. Sistemas de informação e as decisões gerenciais na era da Internet. São Paulo: Saraiva, 2004. TURBAN, E.; WETHERBE, J. C. MCLEAN, E. Tecnologia da informação para gestão: transformando os negócios na economia digital. 3. ed. São Paulo: Bookman, 2004. Vale a pena ler Vale a pena MYSQL 5.7 Reference Manual. Oracle, s.d. Disponível em: <https://dev.mysql.com/doc/refman/5.7/en/>. Acesso em 18 mar. 2018. W3 SCHOOLS. SQL Data Types for MySQL, SQL Server, and MS Access. s.d. Disponível em: <https://www. w3schools.com/sql/sql_datatypes.asp>. Acesso em 18 mar. 2018. Vale a pena acessar
Compartilhar