SQL: Introdução ao SQL

Imagine entrar em uma grande biblioteca e querer emprestar um livro específico. Você precisa se comunicar com a bibliotecária — dizer o título do livro, autor ou número de classificação, e ela pode ajudá-lo a encontrá-lo. SQL (Structured Query Language) é a linguagem universal entre você e o "bibliotecário" do banco de dados. Não importa quantos milhões de registros estejam armazenados no banco de dados, desde que você conheça SQL, pode consultar, adicionar, modificar ou deletar as informações necessárias com precisão.

1. Conceitos Fundamentais

(1) O que é SQL?

SQL é uma linguagem padrão projetada especificamente para se comunicar com bancos de dados relacionais. Nasceu na década de 1970, proposta por pesquisadores da IBM, e desde então tornou-se a linguagem de consulta de bancos de dados mais utilizada no mundo.

(2) Por que Aprender SQL?

(3) Conceitos Fundamentais de Bancos de Dados Relacionais

Bancos de dados relacionais organizam dados usando tabelas, assim como planilhas do Excel — intuitivo e direto:

Conceito Descrição Analogia
Tabela Uma coleção de dados armazenados Uma planilha no Excel
Linha Um registro específico de dados Uma linha no Excel
Coluna Um atributo/campo dos dados Uma coluna no Excel
Chave Primária Uma coluna que identifica unicamente cada linha Um número de documento de identidade

Por exemplo, uma tabela employees:

id name department salary
1 John Smith Engineering 15000
2 Jane Doe Marketing 12000

(4) SQL vs NoSQL

Comparação SQL (Relacional) NoSQL (Não-relacional)
Estrutura de Dados Tabelas (linhas e colunas) Documentos, pares chave-valor, grafos, etc.
Esquema Esquema fixo Flexível/sem esquema
Suporte a Transações Consistência forte (ACID) Consistência eventual
Método de Escalabilidade Escalabilidade vertical Escalabilidade horizontal
Cenários Típicos Bancos, pedidos de e-commerce Logs, dados sociais
Produtos Representativos MySQL, PostgreSQL MongoDB, Redis
💡 Dica: A maioria dos cenários de negócios (como e-commerce, finanças, sistemas de gestão) é bem atendida por bancos de dados SQL. Considere NoSQL apenas quando as estruturas de dados forem extremamente flexíveis ou quando houver necessidade de escalabilidade horizontal massiva.

(5) Comparação dos Principais Bancos de Dados

Banco de Dados Características Ideal Para
MySQL Open source, ecossistema maduro, excelente desempenho Aplicações web, projetos de pequeno a médio porte
PostgreSQL Mais rico em recursos, suporta JSON, ótima extensibilidade Consultas complexas, dados geográficos, grandes projetos
SQLite Leve, sem necessidade de servidor, armazenamento em arquivo único Mobile, embarcado, testes locais
SQL Server Produto Microsoft, boa integração com .NET Aplicações corporativas, ecossistema Windows

2. Sintaxe/Uso Básico

(1) Fundamentos da Sintaxe SQL

Instruções SQL terminam com ponto e vírgula ;. Palavras-chave são case-insensitive (mas maiúsculas são recomendadas para legibilidade).

SQL
SELECT name, salary FROM employees WHERE salary > 10000;

Esta instrução significa: da tabela employees, consulte o name e salary dos funcionários cujo salário ultrapassa 10000.

(2) Categorias de Comandos SQL

Os comandos SQL são divididos em quatro categorias principais por função:

Categoria Nome Completo Finalidade Comandos Comuns
DDL Data Definition Language Definir estrutura do banco de dados CREATE, ALTER, DROP
DML Data Manipulation Language Manipular dados (CRUD) SELECT, INSERT, UPDATE, DELETE
DCL Data Control Language Controle de permissões GRANT, REVOKE
TCL Transaction Control Language Gerenciamento de transações COMMIT, ROLLBACK
💡 Dica: Iniciantes encontrarão com mais frequência DDL e DML. DDL é usado para "criar tabelas" e DML é usado para "manipular dados". Este tutorial também foca nessas duas partes.

💡 Dica: Palavras-chave em instruções SQL (como SELECT, FROM, WHERE) são palavras reservadas e não podem ser usadas como nomes de tabelas ou colunas.

▶ Exemplo: Consultar Todos os Dados (Dificuldade ⭐)

A consulta mais básica — recuperar todos os dados de uma tabela:

SQL
-- Consultar todas as informações dos funcionários
SELECT * FROM employees;
▶ Experimente

Saída de exemplo:

TEXT 📖 Somente leitura
id  name  department_id  salary    hire_date
1   John  1              15000.00  2023-01-15
2   Jane  2              12000.00  2023-03-20
3   Bob   1              18000.00  2022-06-01

* significa "todas as colunas". Em ambientes de produção, é recomendado listar explicitamente os nomes das colunas para evitar retornar dados desnecessários.

▶ Exemplo: Criar uma Tabela e Inserir Dados (Dificuldade ⭐)

Use DDL para criar uma tabela simples e depois use DML para inserir dados:

SQL
-- Criar tabela students
CREATE TABLE students (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    age INTEGER,
    grade TEXT
);

-- Inserir dois registros
INSERT INTO students (name, age, grade) VALUES ('Alice', 18, 'Senior');
INSERT INTO students (name, age, grade) VALUES ('Bob', 17, 'Junior');

-- Consultar para verificar
SELECT * FROM students;
▶ Experimente

Saída:

TEXT 📖 Somente leitura
id  name   age  grade
1   Alice  18   Senior
2   Bob    17   Junior

3. Cenários Comuns de Aplicação

(1) Cenário 1: Gerenciamento de Dados de E-commerce

Uma plataforma de e-commerce precisa gerenciar produtos, usuários, pedidos e outros dados. SQL pode lidar com isso facilmente:

SQL
-- Consultar produtos com estoque baixo
SELECT name, stock FROM products WHERE stock < 10;

-- Calcular valor total dos pedidos deste mês
SELECT SUM(quantity * price) AS total_revenue
FROM orders
JOIN products ON orders.product_id = products.id
WHERE order_date >= '2026-06-01';

(2) Cenário 2: Sistema de Gestão de Funcionários

Um sistema de RH corporativo precisa gerenciar informações de funcionários, departamentos, salários, etc.:

SQL
-- Consultar salário médio por departamento
SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id;

-- Consultar funcionários que entraram em 2023
SELECT name, hire_date FROM employees
WHERE hire_date BETWEEN '2023-01-01' AND '2023-12-31';

❓ Perguntas Frequentes

P: SQL é difícil de aprender? R: Não. A sintaxe do SQL é próxima do inglês, e existem apenas alguns comandos principais (SELECT, INSERT, UPDATE, DELETE). Dominar o básico leva apenas alguns dias.

P: Preciso instalar um banco de dados antes de aprender SQL? R: É recomendado começar com SQLite — não requer instalação de servidor, apenas um único arquivo para rodar. A lição 02 deste tutorial mostrará como configurar o ambiente.

P: Qual a diferença entre SQL e MySQL? R: SQL é um padrão de linguagem, enquanto MySQL é um produto específico de banco de dados que utiliza a linguagem SQL. É como a relação entre "inglês" e "americanos".

P: Que empregos posso conseguir com habilidades em SQL? R: Desenvolvedor backend, analista de dados, engenheiro de dados, engenheiro BI, DBA (administrador de banco de dados) e muitas outras vagas dependem de SQL.

📖 Resumo

📝 Exercícios

Exercício 1 (⭐): Explique com suas próprias palavras o que é uma Chave Primária e por que toda tabela precisa de uma.

Exercício 2 (⭐⭐): Suponha que você precise projetar uma tabela "books" contendo título, autor, preço e data de publicação. Escreva a instrução CREATE TABLE.

Exercício 3 (⭐⭐⭐): Compare SQL e NoSQL, liste 3 vantagens e 3 desvantagens de cada, e explique quais cenários exigem qual tipo de banco de dados.


4. Banco de Dados de Exemplo Unificado

Os dados a seguir serão usados nas 27 lições restantes. Familiarize-se com eles agora; após configurar o ambiente na Lição 02, você poderá copiá-los e executá-los:

SQL
-- Tabela de departamentos
CREATE TABLE departments (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    location TEXT
);

-- Tabela de funcionários
CREATE TABLE employees (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    department_id INTEGER,
    salary DECIMAL(10,2),
    hire_date DATE,
    FOREIGN KEY (department_id) REFERENCES departments(id)
);

-- Tabela de produtos
CREATE TABLE products (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    category TEXT,
    price DECIMAL(10,2),
    stock INTEGER DEFAULT 0
);

-- Tabela de pedidos
CREATE TABLE orders (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    customer_name TEXT NOT NULL,
    product_id INTEGER,
    quantity INTEGER,
    order_date DATE,
    FOREIGN KEY (product_id) REFERENCES products(id)
);
💡 Dica: Essas quatro tabelas formam um pequeno "banco de dados corporativo", cobrindo departamentos, funcionários, produtos e pedidos. Todos os exemplos nas lições seguintes serão baseados nessas tabelas.


5. Próxima Lição

👉 02 - Configuração do Ambiente: Instale ferramentas de banco de dados, configure seu ambiente de aprendizado e execute sua primeira instrução SQL!

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%