SQL (Structured Query Language) é uma linguagem de programação utilizada principalmente para interagir com bancos de dados relacionais. É fundamental entender o conceito de Sistema Gerenciador de Banco de Dados (SGBD) antes de mergulhar na aprendizagem de SQL.
Conceito de SGBD
Um Sistema Gerenciador de Banco de Dados (SGBD) é um software que permite criar, organizar, armazenar, recuperar e manipular dados em um banco de dados. Os principais componentes de um SGBD incluem:
- Motor de banco de dados
- Linguagem de consulta
- Interface de usuário
- Sistema operacional
Exemplo prático: MySQL
MySQL é um dos SGBDs mais populares e amplamente utilizado. Ele oferece uma interface de linha de comando e suporta várias linguagens de programação.
MariaDB
O MariaDB é um SGBD multiplataforma lançado em 2009, fork do MySQL. Algumas de suas vantagens incluem:
- Baseado no MySQL
- Licença GNU GPL
- Multiplataforma
PostgreSQL
O PostgreSQL é outro SGBD muito popular e avançado. Algumas de suas principais características incluem:
- Open source, sob a licença BSD e multiplataforma
- Suporta diferentes tipos de dados
- Meios de consulta mais complexos
- Chaves estrangeiras e outros recursos avançados
- Escalável para projetos de maior escala
Oracle Database
O Oracle Database é um dos SGBDs mais utilizados em aplicações corporativas:
- Desenvolvido pela Oracle Corporation
- Multiplataforma
- Licença comercial
- Suporta desde demandas simples até complexas
- Excelente para aplicações corporativas
Microsoft SQL Server
O Microsoft SQL Server é desenvolvido pela Microsoft:
- Disponível para Windows e Linux
- Possui licença proprietária
- Atende desde demandas simples até complexas
- Robustos recursos de segurança
- Meios de criptografia avançados
Criação do container MySQL
É necessário ter o Docker instalado no SO (Windows, Linux). Caso estja no Windows, habilite o recurso WSL2 e na loja Microsoft, pesquise Ubuntu, após a instalação do Ubuntu no WSL2, abre o terminal do Linux (Ubuntu) e segue os procedimentos abaixo dos itens 1 até 4, caso já estiver com Docker, continue no item 5.
- Atualização do sistema
sudo apt update && sudo apt upgrade -y
- Instalação do Docker
sudo apt install docker.io -y
- Inicialização do serviço Docker
sudo systemctl start docker
- Habilitar a inicializaçao do serviço Docker no boot do sistema
sudo systemctl enable docker
- Criar o conteiner MySQL
sudo docker run -d \
--name projeto1_mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=secret \
-e MYSQL_DATABASE=projeto1 \
-v projeto1_data:/var/lib/mysql \
mysql:8
Conectando ao banco de dados
Utilizando um cliente MySQL (DBeaver), conecte no banco de dados com as devidas credenciais (usuário e senha) definido na instalação e host/porta.
Host: 127.0.0.1
Port: 3306
Username: root
Password: secret
Database: projeto1
Criação das tabelas usuários e pedido
Utilizando o banco de dados projeto1, antes de criar as tabelas, precisa selecionar qual banco de dados que serão criadas. Para isso, execute:
USE projeto1;
CREATE TABLE usuarios (
id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(255),
email VARCHAR(255) UNIQUE,
data_nascimento DATE
);
CREATE TABLE pedidos (
id INT AUTO_INCREMENT PRIMARY KEY,
usuario_id INT,
produto VARCHAR(255),
preco DECIMAL(10,2),
quantidade INT,
data_pedido DATE,
FOREIGN KEY (usuario_id) REFERENCES usuarios(id)
);
A tabela pedidos tem as seguintes características:
- O campo id é o identificador principal da tabela, gerado automaticamente pelo MySQL.
- usuario_id é um campo que relaciona os pedidos aos usuários específicos.
- produto armazena o nome do produto comprado.
- preco armazena o preço do produto com duas casas decimais.
- quantidade indica quantos itens foram comprados.
- data_pedido registra a data em que o pedido foi feito.
- Adicionamos uma chave estrangeira (FOREIGN KEY) para estabelecer uma relação entre pedidos e usuarios.
Esta estrutura permite que você mantenha dados sobre os usuários e seus respectivos pedidos, facilitando análises e consultas mais complexas posteriormente.
Fundamentos básicos de SQL
Agora, vamos explorar alguns conceitos básicos de SQL:
SELECT
O comando SELECT é usado para recuperar dados de uma ou mais tabelas.
Exemplo prático:
SELECT * FROM usuarios;
Este comando retorna todos os registros da tabela usuarios.
INSERT
O comando INSERT é utilizado para inserir novos registros em uma tabela.
Exemplo prático:
INSERT INTO usuarios (nome, email, data_nascimento) VALUES ('Bjorn Cyril', 'bjorn.cyril@hotmail.com', '1990-11-07');
INSERT INTO pedidos (id, usuario_id, produto, preco, quantidade, data_pedido) VALUES (1, 1, 'Camiseta Azul', 29.99, 2, '2024-10-20');
UPDATE
O comando UPDATE é usado para modificar dados existentes em uma tabela.
WARNING: Sempre utilize o WHERE no comando UPDATE
Exemplo prático:
UPDATE usuarios SET email = 'bjorn.cyril@gmail.com' WHERE id = 1;
DELETE
O comando DELETE é utilizado para remover registros de uma tabela.
WARNING: Sempre utilize o WHERE no comando DELETE
Exemplo prático:
DELETE FROM usuarios WHERE id = 1;
Consultas Avançadas
Vamos explorar algumas técnicas mais avançadas de SQL:
JOIN
O JOIN é usado para combinar dados de duas ou mais tabelas relacionadas.
Exemplo prático:
SELECT u.nome, p.preco
FROM usuarios u
JOIN pedidos p ON u.id = p.usuario_id;
Este exemplo mostra como combinar dados dos usuários e seus pedidos.
GROUP BY
O GROUP BY agrupa resultados por valores específicos.
Exemplo prático:
SELECT COUNT(*) AS quantidade_pedidos, AVG(preco) AS media_preco
FROM pedidos
GROUP BY usuario_id;
Este comando retorna a quantidade de pedidos e a média de preço por usuário.
Conceitos avançados
Agora vamos mergulhar em alguns conceitos mais avançados de SQL:
Subquery
Uma subquery é uma consulta dentro de outra consulta.
Exemplo prático:
SELECT *
FROM usuarios
WHERE id IN (
SELECT usuario_id
FROM pedidos
WHERE preco > 100
);
Esta consulta seleciona usuários que fizeram pedidos com valor superior a 100.
UNION
O UNION combina os resultados de duas ou mais consultas.
Exemplo prático:
SELECT nome, email
FROM usuarios
UNION
SELECT nome, email
FROM clientes;
Este comando combina os resultados das tabelas usuarios e clientes.
A tabela clientes não foi criada, antes de executar, crie a tabela clientes, com base dos exemplos das tabela pedidos.
Comandos úteis do Docker
Para parar o container
sudo docker stop projeto1_mysql
Para iniciar o container
sudo docker start projeto1_mysql
Para remover o container
sudo docker rm projeto1_mysql
Para remover o volume
sudo docker volume rm projeto1_data
Considerações finais
SQL é uma linguagem poderosa e versátil que forma a base de muitos sistemas de banco de dados modernos. Compreender esses conceitos básicos e avançados é fundamental para qualquer desenvolvedor ou analista de dados.
Pratique regularmente e explore diferentes bancos de dados para melhorar suas habilidades. Lembre-se de que a prática é a chave para dominar SQL efetivamente.
Feito!