Ambientes de Desenvolvimento: Configuração para Programação em SQL com SQLite
Créditos para a imagem: Imagem criada pelo autor usando o programa Spectacle.
Pré-Requisitos
Os pré-requisitos para iniciar as atividades de programação em Structured Query Language (SQL) são semelhantes aos descritos para JavaScript, Python e Lua: um editor de texto e um Sistema Gerenciador de Banco de Dados (SGBD), ou um Ambiente Integrado de Desenvolvimento (em inglês, Integrated Development Environment ou IDE).
Para evitar repetir as discussões feitas anteriormente para JavaScript e Python:
- Se você já possui um editor de texto, você pode instalar um SGBD e começar a programar;
- Se você preferir usar um IDE, a opção mais simples é escolher DB Browser for SQLite, que inclui, dentre outros, editor de texto, SGBD e depurador;
- Se você não sabe como instalar programas, o que é
PATH
ou como configurá-lo, consulte a entrada sobre instalação de programas.
Parte do conteúdo desta página será idêntico ao conteúdo de Python. Portanto, caso alguns parágrafos sejam familiares, não será impressão, mas um certo déjà vu. Por sinal, isso também ocorrerá em novas entradas sobre ambientes de desenvolvimento em outras linguagens de programação. Afinal, os procedimentos para configuração são similares.
SQL Como Primeira Linguagem de Programação
Python e Lua lideram a minha lista de recomendações de linguagens de programação para iniciantes, como comentado na introdução sobre ambientes de desenvolvimento; a terceira opção é JavaScript, devido à Internet.Structured Query Language (SQL) não costuma ser a primeira escolha de pessoas que queiram aprender a programar. A linguagem não é apropriada para a escrita de programas ou aplicações (aplicativos), mas pode ser uma alternativa introdutória. Afinal, praticamente todo programa possui dados; programas complexos possuem muitos dados. Portanto, trabalhar com dados estruturados tende a ser uma boa opção.
Em outras palavras, SQL é uma excelente linguagem secundária para programação. Ela também pode ser a linguagem primária de pessoas interessadas em administrar ou modelar bancos de dados (como database administrators ou DBAs).
Sobre SQL
SQL é uma linguagem de programação do paradigma declarativo. Em linguagens declarativas, define-se o que a máquina deve fazer, ao invés de instruir um computador sobre como ele deve fazer uma tarefa. Em outras palavras, normalmente a escolha de como realizar o comando fica a cargo do SGBD ao invés da programadora ou do programador.
Seja como linguagem primária para administradores e designers de banco de dados, seja como linguagem secundária para desenvolvedores de software, SQL é uma linguagem útil em programação. Aplicações complexas de múltiplos domínios utilizam bancos de dados para armazenamento e recuperação de dados necessários múltiplas sessões de uso ou para usuários diferentes.
Bancos de dados merecem discussão em tópicos próprios, algo que foge ao escopo desta página.
Para se obter documentação em SQL, o ideal é consultar os recursos fornecidos pelo SGBD escolhido. Por exemplo:
- Documentação para SQLite;
- Documentação para PostgreSQL;
- Documentação para MariaDB;
- Documentação para MySQL.
Sistemas Gerenciadores de Banco de Dados (SGBDs)
O primeiro passo para começar a programar com banco de dados é escolher um SGBD. O SGDB é o sistema que gerencia o banco de dados, sendo responsável por definir como as operações designadas via SQL serão feitas. Opções tradicionais de SGBDs incluem:
SQLite talvez seja a opção mais simples para iniciantes, por não requerer a configuração de serviços. Bancos de dados criados por SQLite são arquivos individuais, algo que torna o SGDB uma excelente escolha para uso embutido (embedded) em outras linguagens de programação (por exemplo, em linguagem C ou Python). Para servidores ou bancos de dados complexos, as outras opções podem a ser mais adequadas.
Infelizmente, recursos e mesmo a sintaxe usada para programar em SQL pode variar de acordo com SGBD. Contudo, após o aprendizado de um primeiro, é relativamente simples começar a programar em outros. Afinal, os conceitos são os mesmos ou semelhantes.
Considerações Adicionais
O restante do texto assume o uso de SQLite, embora alguns exemplos possivelmente funcionem com outras opções. Para efeitos de comparação com outras linguagens de programação, os exemplos serão os mesmos adotados em linguagens anteriores.
Entretanto, os exemplos são apenas ilustrativos. Deve-se se escolher uma linguagem mais apropriada para a programação de aplicações (ao invés de usar SQL). Bancos de dados e SQL são úteis para armazenamento e recuperação de dados; SQL não é uma boa linguagem para se criar programas.
SGBD e Editor de Texto
Deve-se usar contas de root
ou de administrador
apenas para instalar o SGBD.
Após instalá-lo, use uma conta de usuário comum, sem privilégios mais altos, para usar o SGBD e programar.
Linux
Distribuições Linux comumente permitem a instalação de diferentes SGBDs (como SQLite, PostgreSQL, MariaDB e MySQL).
- Arch Linux:
pacman -S sqlite
- Debian, Ubuntu ou distribuições baseadas nas anteriores:
apt-get install sqlite3
- Fedora:
dnf install sqlite
- Gentoo:
emerge --ask dev-db/sqlite
macOS
Em ambientes macOS, pode-se usar brew
para instalar SQLite.
Windows
Para obter o SQLite, deve-se acessar a página de downloads e escolher uma das opções de Precompiled Binaries for Windows.
Para iniciar atividades sem embutir SQLite em outra linguagem de programação, deve-se escolher o arquivo sqlite-tools-win32-x86-3360000.zip
para obter um executável com o SGBD.
Os números podem variar de acordo com a versão (3.36, quando da escrita desta página).
Após obter o arquivo compactado .zip
, extraia os conteúdos para algum diretório de sua preferência.
Inicie uma sessão do interpretador cmd
e navegue até o diretório com os arquivos extraídos.
Por exemplo, para arquivos no diretório C:\Users\Franco\Desktop\sqlite-tools-win32-x86-3360000
, deve-se usar o comando cd C:\Users\Franco\Desktop\sqlite-tools-win32-x86-3360000
no cmd
.
Em seguida, para iniciar o SGBD, deve-se digitar sqlite3.exe
.
Para criar ou abrir um banco de dados chamado banco_dados.db
, deve-se usar sqlite3 banco_dados.db
.
Caso queira adicionar o interpretador ao PATH
, consulte instalação de programas.
Alternativas para instalar o SGBD em Windows incluem:
- Chocolatey ou Scoop;
- Usar um IDE com o SGBD integrado (por exemplo, DB Browser for SQLite).
Teste de Ambiente
Com o SGBD instalado, pode-se começar a programar em SQL.
Para iniciar o SGBD, use o arquivo executável obtido ou digite sqlite3
seguido por enter
em um interpretador de linha de comando (requer configuração de PATH
para arquivos baixados manualmente).
sqlite3 sqlite.dbSQLite version 3.36.0 2021-06-18 18:36:39
Enter ".help" for usage hints.
sqlite>
O parâmetro sqlite.db
é o nome desejado para o arquivo que armazenará os dados do banco de dados.
Pode-se trocar o nome por outro de sua preferência.
Toda vez que se usar o mesmo nome (e caminho) de arquivo, dados salvos em tabelas do banco de dados serão persistidos (salvos para posterior utilização).
Caso se omita o nome de um arquivo, nenhum dado será salvo em disco após o término do programa do SGBD.
Assim como feito para JavaScript e Python, esta seção apresentará os mesmos exemplos para fins de teste e comparações entre linguagens.
Como em Python, deve-se digitar o código em linguagem SQL após a seqüência sqlite>
.
Por exemplo, para se escrever no console, pode-se usar SELECT
(documentação).
A rigor, SELECT
faz muito mais que escrever no console, mas conhecer sobre a possibilidade de escrita é suficiente para o momento.
Para escrever uma mensagem, escreva algo como SELECT "Olá! Meu nome é Franco";
após sqlite>
e aperte enter
.
O SGBD escreverá Olá! Meu nome é Franco
e aguardará seu próximo comando.
sqlite3 sqlite.dbSQLite version 3.36.0 2021-06-18 18:36:39
Enter ".help" for usage hints.
sqlite> SELECT "Olá! Meu nome é Franco";Olá! Meu nome é Franco
sqlite>
Doravante, toda vez que você ler um bloco de código em SQL e quiser executá-lo manualmente no SGBD, basta seguir os passos anteriores.
Para encerrar o SGBD, digite .quit
(ou .exit
) seguindo de enter
ou aperte Ctrl d
.
No Windows, o atalho pode ser Ctrl z
seguido de enter
(ou pode não funcionar, exigindo o uso de .quit
ou .exit
).
Assim como Python, pode-se usar SQL em modo Read, Eval, Print, Loop (REPL).
SELECT 1 + 1;
SELECT "Olá! Meu nome é Franco";
Como em outras linguagens, convém criar o hábito de usar SELECT
quando quiser escrever no console.
Por exemplo, crie um arquivo chamado script.sql
(você pode escolher o nome que quiser) com o seguinte conteúdo:
SELECT "Meu Primeiro Script em SQL";
SELECT "Olá! Meu nome é Franco.";
SELECT "O SGBD saber fazer contas.";
SELECT "Veja só: " || (1 + 1);
SELECT "Tchau!";
O script introduz o operador de concatenação ||
(documentação).
Para executar seu script, abra um interpretador de linha de comando (shell) no diretório em que ele foi criado e digite sqlite3 sqlite.db -init script.sql ".quit"
.
O SGBD executará o arquivo fornecido como parâmetro (o valor script.sql
após sqlite3 sqlite.db -init
) e mostrará os resultados de chamadas de SELECT
.
sqlite3 sqlite.db -init script.sql ".quit"-- Loading resources from script.sql
Meu Primeiro Script em SQL
Olá! Meu nome é Franco.
O SGBD saber fazer contas.
Veja só: 2
Tchau!
Caso o diretório atual no interpretador de linha de comando (shell) não seja o diretório do arquivo, você pode mudar para o diretório do arquivo ou pode escrever o caminho absoluto do arquivo.
Exemplos de caminho absoluto poderiam ser C:\Users\Franco\Desktop\script.sql
para um arquivo na área de trabalho do Windows em uma conta de usuário chamada Franco
ou ~/Desktop/script.sql
para um arquivo na área de trabalho do Linux.
Para evitar a mensagem -- Loading resources from script.sql
e usar um comando mais compacto, pode-se executar o arquivo usando o operador de redirecionamento <
, para utilizar o arquivo para obtenção de dados para a entrada padrão (stdin
).
Para isso, pode-se executar o comando como sqlite3 sqlite.db < script.sql
:
sqlite3 sqlite.db < script.sqlMeu Primeiro Script em SQL
Olá! Meu nome é Franco.
O SGBD saber fazer contas.
Veja só: 2
Tchau!
Por fim, é conveniente saber que é possível consultar parte da documentação usando o REPL.
Para isso, pode-se usar .help
.
.help.archive ... Manage SQL archives
.auth ON|OFF Show authorizer callbacks
.backup ?DB? FILE Backup DB (default "main") to FILE
.bail on|off Stop after hitting an error. Default OFF
.binary on|off Turn binary output on or off. Default OFF
.cd DIRECTORY Change the working directory to DIRECTORY
(...)
Saber usar REPL e executar um arquivo com código SQL bastam para atividades de aprendizado. De forma geral, elas também são suficientes para a maioria das atividades para uso cotidiano ou profissional da linguagem de programação.
IDEs
As considerações feitas sobre o uso de IDE para Python valem para SQL. A conveniência, sobretudo importante para iniciantes, continua a ser um benefício do uso de IDEs.
Lembre-se de atalhos para editores de texto, como Ctrl n
para criar novos arquivos (Arquivo / Novo
ou File / New
em inglês) e Ctrl o
(Arquivo / Abrir
ou File / Open
em inglês) para abrir arquivos existentes.
DB Browser for SQLite
Embora não seja exatamente um IDE, DB Browser for SQLite (DB4S, antigamento chamado de SQLite Database Browser ou Database Browser for SQLite) é uma opção simples para primeiros contatos com SQL e SQLite. O programa pode criar, carregar, e modificar bancos de dados SQLite.
Além disso, pode-se visualizar e modificar tabelas e valores armazenados no arquivo do banco de dados.
SQLiteStudio
Outra opção para SQLite é SQLiteStudio.
O programa desempenha as mesmas funções de DB Browser for SQLite
, então a escolha é uma questão de preferência.
Beekeeper Studio
Assim como DB Browser for SQLite
e SQLiteStudio
, Beekeeper Studio permite manipular bancos de dados SQLite.
Beekeeper Studio
também permite interagir com outros SGBDs, como PostgreSQL, MariaDB, MySQL, SQL Server e CockroachDB.
Assim, caso necessário, pode-se usar um único programa para trabalhar com diversos SGBDs diferentes.
Outras Opções
Outras opções para uso e manipulação de bancos de dados SQLite incluem:
Primeiros Passos para Começar a Programar em SQL
Os trechos de código a seguir ilustram alguns recursos da linguagem SQL. Neste momento, não é necessário entendê-los totalmente; o propósito é apresentar recursos e a sintaxe da linguagem.
Existem três formas de usar o código. Você pode:
- Digitar (ou copiar e colar) o código diretamente em no interpretador da linguagem;
- Escrever e executar o código no IDE de sua escolha;
- Escrever o código usando um editor de texto e executar o arquivo criado no interpretador.
Os exemplos são os mesmos adotados para JavaScript. Logo, você poderá comparar linguagens, e observar semelhanças e diferenças entre elas.
Conhecendo SQLite por Meio de Experimentação
Escrita de texto:
SELECT "Uma linha."; SELECT "Outra linha."; SELECT "Uma linha. Outra linha.";
A quebra de linha deve fazer parte da cadeia de caracteres, como no exemplo anterior.
Comentários (texto ignorado pelo SGBD; documentação):
SELECT "SGBD processa"; -- SGBD ignora.
/* <- Aqui começa o comentário. Ele pode ter várias linhas. Aqui ele termina -> */
/* Ele também pode começar e terminar na mesma linha. */
-- Contudo, para isso, é mais fácil usar este estilo de comentário.
Também é possível criar um comentário usando um único ponto-e-vírgula (
;
). Comentários com apenas um são alinhados à direita.Cálculos matemáticos:
Soma, subtração, multiplicação e divisão (documentação):
SELECT 1 + 1; SELECT 2 - 2; SELECT 3 * 3; SELECT 4 / 4; -- O que ocorre caso se tente dividir por 0? Faça o teste!
Expressões matemáticas:
SELECT 1 + 2 - 3 + (4 * 5) / 6.0;
Potenciação (documentação):
SELECT pow(5, 2);
Raiz quadrada (documentação: sqrt()):
SELECT sqrt(25);
Operações trigonométricas, como seno (documentação: sin() e pi()):
SELECT sin(pi() / 2.0); -- Seno.
Comparações (
true
ou1
significamverdadeiro
;false
ou0
significamfalso
):Igualdade (documentação):
SELECT 1 = 2; -- Igual. SELECT 1 <> 2; -- Diferente.
SELECT "Franco" == "Franco"; SELECT "Franco" <> "Franco"; SELECT "Franco" <> "Seu Nome"; -- SQL considera que letras minúsculas são diferentes de maiúsculas (e vice-versa). SELECT "F" = "f"; SELECT "F" <> "f"; SELECT "Franco" = "franco"; SELECT "Franco" <> "franco";
Outras comparações (documentação):
SELECT 1 < 2; -- Menor. SELECT 1 > 2; -- Maior. SELECT 1 <= 2; -- Menor ou igual. SELECT 1 >= 2; -- Maior ou igual.
Variáveis e atribuição (documentação):
Variáveis são como caixinhas que armazenam valores colocados dentro delas. SQLite não define variáveis, mas é possível definir constantes usando Common Table Expressions (CTEs; documentação). Após a definição, os valores não podem mudar.
WITH var AS (SELECT 123 AS X) SELECT x FROM var;
WITH v AS (SELECT 123.456 + 987.654 AS resultado) SELECT resultado FROM v;
WITH nomes AS (SELECT "Franco" AS nome1, "Franco Garcia" AS nome2) SELECT nomes.nome1, nomes.nome2 FROM nomes;
WITH nomes AS (SELECT "Franco" AS nome1, "Seu Nome" AS nome2, "Outro Nome" AS nome3) SELECT nomes.nome1, nomes.nome2, nomes.nome3 FROM nomes;
WITH valores_logicos AS (SELECT TRUE AS v1, FALSE AS v2, ((1 + 1) = 2) AS v3) SELECT valores_logicos.v1, valores_logicos.v2, valores_logicos.v3 FROM valores_logicos;
Constantes (documentação):
WITH const AS (SELECT 3.14159 AS PI) SELECT const.PI FROM const;
WITH const AS (SELECT 2.71828 AS E, 0 AS E) -- Erro; o valor de uma constante é inalterável após definido. SELECT const.E FROM const;
Erros:
SELECT Ooops!; -- Texto deve estar entre aspas duplas ou simples. SELEC "Nome incorreto para SELECT"; SELECT 1 / 0; SELECT 0 / 0;
Cadeias de caracteres (strings) para palavras e texto (documentação):
SELECT "Ok, cadeia de caracteres válida"; SELECT 'Ok, outra cadeia de caracteres válida'; SELECT "Ok, também é uma cadeia de caracteres válida";
SELECT "Para 'misturar' aspas, use diferentes das externas."; SELECT "Caso contrário, você precisa escapá-las com duas aspas: "". O uso adicional das aspas é necessário.";
Operações lógicas (documentação):
SELECT TRUE AND TRUE; -- Operação lógica "e" ("and"). SELECT TRUE OR FALSE; -- Operação lógica "ou" ("or"). SELECT NOT TRUE; -- Operação lógica "não" ("not").
Condições (documentação):
WITH v AS (SELECT "Firefox" AS navegador) SELECT IIF(navegador = "Firefox", "Mozilla Firefox.", NULL) FROM v;
WITH v AS (SELECT "Seu Navegador" AS meu_navegador) SELECT IIF(meu_navegador = "Firefox", "Mozilla Firefox.", "Você usa outro navegador.") FROM v;
WITH x AS (SELECT "X" AS eu_uso), y AS (SELECT lower(x.eu_uso) AS eu_uso FROM x) SELECT IIF(y.eu_uso = "firefox", "Você usa um navegador da Mozilla.", IIF((y.eu_uso = "chrome") OR (y.eu_uso = "chromium"), "Você usa um navegador do Google.", IIF(y.eu_uso = "edge", "Você usa um navegador da Microsoft.", IIF(y.eu_uso = "safari", "Você usa um navegador da Apple.", IIF(y.eu_uso = "internet explorer", "Você deveria usar um navegador mais moderno...", "Você usa outro navegador."))))) FROM y;
Normalmente utiliza-se
CASE
(documentação) para a escrita de um código mais limpo.Repetições ou laços (documentação):
SELECT i.value FROM generate_series(0, 4, 1) AS i;
SELECT j.value FROM generate_series(0, 4, 1) AS j;
SELECT 0; SELECT k.value FROM generate_series(1, 4, 1) AS k;
Funções (documentação):
SQLite não permite criar funções em SQL (apenas em caso de uso embedded na linguagem da aplicação). Outros SGBDs, como PostgreSQL, podem permitir a criação de scripts em linguagens procedurais (para o caso do PostgreSQL, a linguagem chama-se PL/pgSQL).
O bloco de código abaixo é um exemplo de função SQL escrita para PostgreSQL. Ele não funcionará em SQLite, servindo apenas como curiosidade.
-- Código para *PostgreSQL*, não para SQLite. CREATE FUNCTION minha_funcao(x INTEGER, y INTEGER) RETURNS INT AS $$ SELECT x + y; $$ LANGUAGE SQL; -- Uma função é um bloco de código que realiza um processamento arbitrário -- conforme definido pela programadora ou pelo programador. -- Após a definição, pode-se executar a função quando se quiser, por meio -- de uma chamada de função. WITH v AS (SELECT minha_funcao(12, -34) AS z) -- Este é um exemplo de uma chamada de função. SELECT v.z, minha_funcao(1, 2) -- Este é outro. FROM v;
Tipos de dados (documentação):
SELECT 1 AS numero_inteiro; SELECT -1 AS outro_numero_inteiro; SELECT 1.23 AS numero_real; SELECT TRUE AS valor_logico; -- ou FALSE; só pode ser TRUE ou FALSE. SELECT "Texto aqui. Quebras de linha usam ou seja, isto estará na terceira linha." AS cadeia_caracteres;
Entrada (documentação: CREATE TABLE; INSERT):
SQL é uma linguagem para armazenamento e recuperação de dados. Assim, a linguagem não fornece recurso para entrada de dados via terminal. Ao invés de improvisar uma solução, o exemplo abaixo cria uma tabela para armazenar valores, insere uma entrada e lê os dados escritos.
CREATE TABLE pessoa( nome TEXT, idade INTEGER ); -- SELECT "Qual é o seu nome? "; -- SELECT "Quantos anos você tem? "; INSERT INTO pessoa(nome, idade) VALUES ("Seu Nome", 123); SELECT nome FROM pessoa WHERE (nome = "Seu Nome"); SELECT idade FROM pessoa WHERE (nome = "Seu Nome"); -- O operador || realiza uma operação chamada concatenação, -- que combina a segunda cadeira após a primeira. SELECT "Olá, " || pessoa.nome || "!", "Você tem " || pessoa.idade || " anos." FROM pessoa;
Parabéns! Você Já Pode Escrever Qualquer Programa em SQL
Embora seja possível, você não deve escrever programas inteiros usando SQL (a exceção são funções ou procedimentos em SGBDs que permitam scripts procedurais). Como uma ferramenta, use SQL para armazenar e recuperar dados. Use outra linguagem em conjunto para SQL para criar sua aplicação.
Contudo, o título da seção está tecnicamente correto.
Não acredita? Você pode encontrar a explicação na introdução à linguagem JavaScript.
Em resumo, aprender a sintaxe de uma linguagem não é suficiente para resolver problemas com ela. O aprendizado de lógica de programação e o desenvolvimento de habilidades de pensamento computacional são muito mais importantes que a sintaxe. De fato, quando se tem dúvidas sobre a sintaxe, basta consultar a documentação. Não é preciso decorá-la.
Após aprender uma primeira linguagem de programação, aprender outras linguagens (que adotem paradigmas semelhantes aos da primeira) é relativamente simples. Para constatar a afirmação, pode-se abrir uma nova janela em seu navegador e deixá-la lado a lado com esta. Em seguida, pode-se comparar os blocos de código escritos em SQLite (nesta janela) e em Python (na segunda janela).
Caso se deseje fazer comparações entre mais linguagens de programação, pode-se escolher:
Próximos Passos
Com o ambiente de desenvolvimento configurado, você pode continuar sua jornada de desenvolvimento de sistemas.
Para evitar repetições, recomendo a leitura da página sobre configurações de ambiente para JavaScript. Mesmo que você não tenha interesse na linguagem, muitas discussões são relevantes para quaisquer linguagens de programação. Além disso, você entenderá uma forma de criar páginas para a Internet e poderá criar conteúdo para seu navegador.
Até GDScript (para Godot Engine), os tópicos descrevem configurações de ambientes de desenvolvimento para algumas linguagens de programação. Após GDScript, o foco torna-se conceitos básicos para o aprendizado de programação.