Material organizado para estudo progressivo, com leitura confortável, recursos complementares e navegação para a próxima etapa da disciplina.
Resumo
Na Aula 03, o foco é aprofundar o uso do comando SELECT, explorando recursos que permitem realizar consultas mais específicas e úteis no banco de dados. São apresentados os filtros utilizando a cláusula WHERE, que possibilita selecionar apenas os registros que atendem a determinadas condições, utilizando operadores relacionais como =, >, <, >=, <=, <> e operadores lógicos como AND, OR e NOT.
Também é abordada a ordenação de resultados com ORDER BY, permitindo organizar os dados de forma crescente ou decrescente, facilitando a análise das informações. Em seguida, são introduzidas as funções de agregação, que permitem realizar cálculos sobre conjuntos de dados, como COUNT (contagem de registros), SUM (soma de valores), AVG (média), MAX (maior valor) e MIN (menor valor).
A aula apresenta ainda o conceito de agrupamento de dados utilizando GROUP BY, permitindo reunir registros com características semelhantes, e o uso do HAVING, que possibilita aplicar filtros após o agrupamento dos dados. São utilizados exemplos práticos envolvendo tabelas simples, permitindo ao aluno compreender como extrair informações relevantes do banco de dados de forma eficiente, preparando o caminho para consultas envolvendo múltiplas tabelas e JOIN nas próximas aulas.
Leitura pensada para estudo, consulta e revisão. Use a navegação lateral para alternar entre etapas da aula.
Estudo
Conteúdo interativo — HTML importado
Aula 03 – Introdução ao MySQL
Abra o material em tela cheia para estudar com conforto, sem sair da disciplina.
Aula 03 – Introdução ao MySQL
100%
Carregando conteúdo interativo...
Aula 3 — Introdução ao MySQL ◀ ▶ 1 / 0 ⛶ Tela cheia A3 ◆ Banco de Dados · Aula 3 Introdução ao MySQL Instalação, configuração, ferramentas de acesso, criação de bancos de dados, tipos de dados e estrutura de tabelas. 5 tópicos ~2 horas Iniciante Pré-req: Aulas 1 e 2 01 01 · Instalação e Configuração O que é o MySQL? 🐬 Definição MySQL é um Sistema Gerenciador de Banco de Dados Relacional (SGBDR) open-source, criado em 1995 e mantido pela Oracle. É o banco de dados mais popular do mundo para aplicações web. 🌐 Amplamente usado na web WordPress, Facebook, Twitter e YouTube já usaram MySQL 💰 Gratuito e open-source Licença GPL — pode usar, modificar e distribuir livremente ⚡ Rápido e confiável Suporta milhões de registros com bom desempenho 🔗 Multiplataforma Funciona em Windows, Linux e macOS MySQL na família de SGBDs MySQL Nossa aula PostgreSQL Relacional SQLite Relacional MongoDB Não-relacional 📌 Versão desta aula Usaremos o MySQL 8.x, versão atual. A maioria dos exemplos funciona também no MySQL 5.7+. 02 01 · Instalação e Configuração Como Instalar o MySQL Opção A XAMPP — Recomendado para iniciantes 1 Baixar o XAMPP Acesse apachefriends.org e baixe o instalador para seu sistema operacional. O XAMPP inclui Apache, MySQL e PHP. 2 Executar o instalador Siga o assistente de instalação. Mantenha as opções padrão. Instale em C:\xampp (Windows). 3 Iniciar o serviço MySQL Abra o XAMPP Control Panel e clique em Start ao lado de MySQL. O status ficará verde. 4 Verificar a instalação Acesse localhost/phpmyadmin no navegador. Se abrir, está funcionando. Opção B MySQL Installer — Instalação oficial 1 Baixar o MySQL Installer Acesse dev.mysql.com/downloads e baixe o MySQL Installer for Windows. 2 Escolher "Developer Default" Esta opção instala o MySQL Server, MySQL Workbench e outros utilitários de uma vez. 3 Definir senha do root Durante a instalação, você definirá a senha do usuário root. Guarde essa senha! 4 Concluir e testar Ao final, abra o MySQL Workbench e conecte-se com o usuário root. ⚠️ Atenção Em ambas as opções, o MySQL roda na porta 3306 por padrão. Não mude essa porta em ambiente de aula. 03 02 · Ferramentas de Acesso MySQL Workbench 🖥️ O que é Ferramenta visual oficial da Oracle para administrar o MySQL. Permite escrever SQL, visualizar bancos, criar diagramas ER e monitorar o servidor — tudo em uma interface gráfica. Principais recursos ✏️ SQL Editor Escreva e execute queries com realce de sintaxe e autocompletar 🗂️ Schema Browser Navegue por bancos, tabelas e colunas no painel lateral 📐 EER Diagram Crie e visualize diagramas de entidade-relacionamento graficamente 📦 Import / Export Faça backup e restaure bancos em formato SQL facilmente MySQL Workbench 8.0 SCHEMAS ▸ escola Tables Views Routines ▸ loja ▸ sys SELECT * FROM aluno WHERE id_curso = 1; -- 3 linha(s) retornadas id | nome | id_curso 1 | Ana Lima | 1 3 | Maria Silva | 1 5 | Pedro Costa | 1 Mockup da interface do Workbench 04 02 · Ferramentas de Acesso phpMyAdmin e Comparativo 🌐 phpMyAdmin Interface web para gerenciar o MySQL pelo navegador. Incluído no XAMPP. Acesse em localhost/phpmyadmin. Simples, visual e sem instalação extra. 🌐 localhost/phpmyadmin BANCOS 📁 escola 📁 loja 📁 information_schema 📁 mysql Tabelas em escola Nome Registros aluno 15 curso 3 matricula 42 Workbench vs phpMyAdmin Critério Workbench phpMyAdmin Interface App desktop Navegador web Instalação Separada Junto com XAMPP Diagrama ER ✓ Sim ✗ Não Facilidade Intermediário Iniciante Produtividade SQL Alta Média Uso em produção ✓ Sim Somente local 💡 Recomendação para a aula Use o phpMyAdmin para começar — é mais simples. Migre para o Workbench quando quiser criar diagramas ER e explorar recursos avançados. 05 03 · Criação de Banco de Dados Criando um Banco de Dados 🗄️ O que é um Schema? No MySQL, banco de dados e schema são o mesmo conceito — um contêiner que agrupa todas as tabelas, views e rotinas de um projeto. criar_banco.sql SQL 📋 Copiar -- 1. Criar o banco de dados CREATE DATABASE escola; -- 2. Criar com verificação (não dá erro se existir) CREATE DATABASE IF NOT EXISTS escola; -- 3. Definir charset e collation (boas práticas) CREATE DATABASE IF NOT EXISTS escola CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 4. Selecionar o banco para usar USE escola; -- 5. Ver todos os bancos disponíveis SHOW DATABASES; -- 6. Ver qual banco está selecionado SELECT DATABASE(); -- 7. Excluir um banco (CUIDADO!) DROP DATABASE IF EXISTS escola; Output esperado no terminal mysql> CREATE DATABASE escola; Query OK, 1 row affected (0.01 sec) mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | escola | | information_schema | | mysql | | performance_schema | +--------------------+ 4 rows in set (0.00 sec) mysql> USE escola; Database changed ⚠️ Charset importa! Sempre use utf8mb4 ao criar bancos que armazenam textos em português. O utf8 padrão não suporta todos os caracteres especiais. 06 04 · Tipos de Dados Tipos Numéricos Tipos Numéricos — Inteiros Tipo Intervalo (sem sinal) Bytes Uso típico TINYINT 0 a 255 1 Flags, status SMALLINT 0 a 65.535 2 Códigos pequenos INT 0 a ~4,29 bilhões 4 IDs, contadores BIGINT 0 a ~18 quintilhões 8 IDs de grandes sistemas Tipos Numéricos — Decimais Tipo Precisão Uso típico FLOAT ~7 dígitos Números científicos DOUBLE ~15 dígitos Cálculos de precisão DECIMAL(M,D) Exata — M total, D decimais Preços, salários 💡 DECIMAL vs FLOAT Nunca use FLOAT ou DOUBLE para valores monetários — eles têm erros de arredondamento. Use sempre DECIMAL(10,2) para preços e salários. exemplo_numerico.sql SQL 📋 Copiar CREATE TABLE produto ( id INT AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(100), -- INT: quantidade em estoque (sem decimais) estoque INT DEFAULT 0, -- DECIMAL: preço com 2 casas decimais preco DECIMAL(10,2) NOT NULL, -- TINYINT: ativo/inativo (0 ou 1) ativo TINYINT(1) DEFAULT 1 ); 07 04 · Tipos de Dados Tipos de Texto Tipos de Texto Tipo Tamanho máximo Uso típico CHAR(N) 255 caracteres fixos CPF, CEP, UF VARCHAR(N) 65.535 variável Nomes, emails, endereços TEXT 65.535 caracteres Descrições longas MEDIUMTEXT 16 MB Artigos, conteúdos LONGTEXT 4 GB Documentos extensos ENUM Lista de valores fixos Status, tipo, categoria 📌 CHAR vs VARCHAR CHAR(10) sempre ocupa 10 bytes, mesmo que o valor tenha 3 letras. VARCHAR(100) ocupa apenas o necessário. Use CHAR só para campos de tamanho fixo como CPF e CEP. exemplo_texto.sql SQL 📋 Copiar CREATE TABLE pessoa ( id INT AUTO_INCREMENT PRIMARY KEY, -- VARCHAR: tamanho variável, ideal para nomes nome VARCHAR(100) NOT NULL, -- CHAR: tamanho fixo — CPF tem sempre 11 dígitos cpf CHAR(11) UNIQUE, -- VARCHAR: email varia muito de tamanho email VARCHAR(120), -- TEXT: bio pode ser muito longa bio TEXT, -- ENUM: só aceita os valores da lista genero ENUM('M', 'F', 'outro'), -- CHAR: UF sempre tem 2 letras uf CHAR(2) ); 08 04 · Tipos de Dados Tipos de Data e Hora Tipos de Data e Hora Tipo Formato Intervalo DATE YYYY-MM-DD 1000-01-01 a 9999-12-31 TIME HH:MM:SS -838:59:59 a 838:59:59 DATETIME YYYY-MM-DD HH:MM:SS 1000 a 9999 TIMESTAMP YYYY-MM-DD HH:MM:SS 1970 a 2038 YEAR YYYY 1901 a 2155 💡 DATETIME vs TIMESTAMP Use DATETIME para datas que não dependem de fuso horário (ex: data de nascimento). Use TIMESTAMP para registrar quando um registro foi criado/atualizado — ele converte automaticamente para UTC. exemplo_datas.sql SQL 📋 Copiar CREATE TABLE evento ( id INT AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(150), -- DATE: só a data, sem hora data_evento DATE NOT NULL, -- TIME: só o horário hora_inicio TIME, -- DATETIME: data e hora exatas do evento abertura DATETIME, -- TIMESTAMP: preenchido automaticamente -- ao criar/atualizar o registro criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP, atualizado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); 09 04 · Tipos de Dados Guia rápido de Tipos Números inteiros TINYINTflags (0/1) INTIDs e contadores ✓ BIGINTIDs gigantes Números decimais FLOATciência (impreciso) DECIMAL(M,D)preços ✓ Texto CHAR(N)CPF, CEP, UF VARCHAR(N)nomes, emails ✓ TEXTdescrições longas ENUMlista fixa de opções Data e Hora DATEnasc, vencimento ✓ DATETIMEdata+hora exata ✓ TIMESTAMPcriado_em, updated_at Erros comuns — nunca faça isso ✗ Preço com FLOAT FLOAT pode retornar 9.9999999 ao invés de 10.00 ✗ CPF com INT CPFs com zero à esquerda seriam apagados: 01234... → 1234 ✗ Data com VARCHAR "32/13/2024" seria aceito — sem validação automática ✗ VARCHAR sem limite Sempre defina o tamanho: VARCHAR(100), não só VARCHAR 10 05 · Estrutura de Tabelas Anatomia do CREATE TABLE create_table.sql SQL 📋 Copiar CREATE TABLE aluno ( -- Chave primária com auto incremento id INT AUTO_INCREMENT PRIMARY KEY, -- NOT NULL: campo obrigatório nome VARCHAR(100) NOT NULL, -- UNIQUE: valor não pode repetir email VARCHAR(120) NOT NULL UNIQUE, -- NULL implícito: campo opcional telefone VARCHAR(20), -- DEFAULT: valor padrão se não informado ativo TINYINT(1) DEFAULT 1, -- TIMESTAMP automático de criação criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- CHECK: validação de valor (MySQL 8+) nota DECIMAL(4,2) CHECK (nota BETWEEN 0 AND 10), -- FOREIGN KEY: chave estrangeira id_curso INT, FOREIGN KEY (id_curso) REFERENCES curso(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; Constraints — regras de integridade PRIMARY KEY Identifica cada linha de forma única. Implica NOT NULL + UNIQUE. NOT NULL O campo é obrigatório. Não aceita valor vazio. UNIQUE Nenhuma linha pode ter o mesmo valor nessa coluna. DEFAULT Valor usado quando não é informado na inserção. CHECK Valida se o valor respeita uma condição. (MySQL 8+) 11 05 · Estrutura de Tabelas Gerenciando Tabelas gerenciar_tabelas.sql SQL 📋 Copiar -- Ver a estrutura de uma tabela DESCRIBE aluno; -- ou a versão curta: DESC aluno; -- Ver o SQL que criou a tabela SHOW CREATE TABLE aluno; -- Listar tabelas do banco atual SHOW TABLES; -- Adicionar uma coluna nova ALTER TABLE aluno ADD COLUMN data_nasc DATE; -- Modificar tipo de uma coluna ALTER TABLE aluno MODIFY COLUMN nome VARCHAR(150) NOT NULL; -- Remover uma coluna ALTER TABLE aluno DROP COLUMN telefone; -- Excluir a tabela (CUIDADO!) DROP TABLE IF EXISTS aluno; -- Limpar todos os dados (mantém estrutura) TRUNCATE TABLE aluno; Output do DESCRIBE mysql> DESC aluno; +-----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+--------------+------+-----+---------+----------------+ | id | int | NO | PRI | NULL | auto_increment | | nome | varchar(100) | NO | | NULL | | | email | varchar(120) | NO | UNI | NULL | | | ativo | tinyint(1) | YES | | 1 | | +-----------+--------------+------+-----+---------+----------------+ 🔥 DROP vs TRUNCATE vs DELETE DROP TABLE — apaga a tabela inteira (estrutura + dados). TRUNCATE — apaga todos os dados, mantém a estrutura. DELETE — apaga linhas específicas (com WHERE). 12 05 · Estrutura de Tabelas Script completo — Banco Escola escola_completo.sql SQL 📋 Copiar -- ══════════════════════════════════ -- Banco de dados: escola -- ══════════════════════════════════ CREATE DATABASE IF NOT EXISTS escola CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE escola; -- Tabela: curso (criada primeiro) CREATE TABLE curso ( id INT AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(100) NOT NULL UNIQUE ); -- Tabela: aluno CREATE TABLE aluno ( id INT AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(100) NOT NULL, email VARCHAR(120) NOT NULL UNIQUE, data_nasc DATE, ativo TINYINT(1) DEFAULT 1, criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP, id_curso INT, FOREIGN KEY (id_curso) REFERENCES curso(id) ); -- Inserir dados de teste INSERT INTO curso (nome) VALUES ('Informática'), ('Engenharia'), ('Design'); INSERT INTO aluno (nome, email, id_curso) VALUES ('Ana Lima', 'ana@mail.com', 1), ('Carlos Melo','carlos@mail.com', 2), ('Maria Silva','maria@mail.com', 1); 📋 Ordem importa! Sempre crie a tabela referenciada pela FK antes da tabela que tem a FK. No exemplo: curso antes de aluno. Verificar o resultado mysql> SHOW TABLES; +------------------+ | Tables_in_escola | +------------------+ | aluno | | curso | +------------------+ mysql> SELECT * FROM aluno; +----+-------------+-----------------+---------+ | id | nome | email | id_curso| +----+-------------+-----------------+---------+ | 1 | Ana Lima | ana@mail.com | 1| | 2 | Carlos Melo | carlos@mail.com | 2| | 3 | Maria Silva | maria@mail.com | 1| +----+-------------+-----------------+---------+ 13 06 · Exercícios Exercícios Práticos 🎯 Instrução Execute os exercícios diretamente no MySQL Workbench ou phpMyAdmin. Clique para ver a solução quando precisar. 01 Crie um banco chamado loja com charset UTF-8. Em seguida, selecione-o e liste os bancos disponíveis. FÁCIL ▼ 💡 Use CREATE DATABASE com CHARACTER SET utf8mb4, depois USE e SHOW DATABASES. Solução📋 CREATE DATABASE IF NOT EXISTS loja CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE loja; SHOW DATABASES; -- Deve aparecer "loja" na lista 💡 Ver dica 02 Crie a tabela produto com: id (PK auto), nome (obrigatório), preço (2 casas decimais), estoque (inteiro, padrão 0), ativo (flag 0/1, padrão 1). FÁCIL ▼ 💡 Preço → DECIMAL(10,2). Flag → TINYINT(1). Use NOT NULL onde o campo é obrigatório e DEFAULT para valores padrão. Solução📋 CREATE TABLE produto ( id INT AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(150) NOT NULL, preco DECIMAL(10,2) NOT NULL, estoque INT DEFAULT 0, ativo TINYINT(1) DEFAULT 1 ); -- Verificar: DESC produto; 💡 Ver dica 03 Adicione a coluna descricao (TEXT, opcional) na tabela produto já criada. Depois, altere o nome para VARCHAR(200). MÉDIO ▼ 💡 Use ALTER TABLE com ADD COLUMN para adicionar e MODIFY COLUMN para alterar. Solução📋 -- Adicionar nova coluna ALTER TABLE produto ADD COLUMN descricao TEXT; -- Modificar coluna existente ALTER TABLE produto MODIFY COLUMN nome VARCHAR(200) NOT NULL; -- Verificar resultado DESC produto; 💡 Ver dica ★ Desafio: Crie o banco clinica com as tabelas: medico, paciente e consulta. Escolha os tipos de dados corretos para cada campo. DESAFIO ▼ 💡 Médico: id, nome, crm (único), especialidade. Paciente: id, nome, cpf (único), data_nasc. Consulta: id, id_medico (FK), id_paciente (FK), data_hora (DATETIME), valor (DECIMAL). clinica.sql📋 CREATE DATABASE IF NOT EXISTS clinica CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE clinica; CREATE TABLE medico ( id INT AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(100) NOT NULL, crm VARCHAR(20) NOT NULL UNIQUE, especialidade VARCHAR(80) ); CREATE TABLE paciente ( id INT AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(100) NOT NULL, cpf CHAR(11) NOT NULL UNIQUE, data_nasc DATE ); CREATE TABLE consulta ( id INT AUTO_INCREMENT PRIMARY KEY, id_medico INT NOT NULL, id_paciente INT NOT NULL, data_hora DATETIME NOT NULL, valor DECIMAL(8,2), criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (id_medico) REFERENCES medico(id), FOREIGN KEY (id_paciente) REFERENCES paciente(id) ); 💡 Ver dica 14 FIM · Resumo Resumo da Aula 3 01 MySQL é um SGBDR open-source, gratuito, amplamente usado na web. Versão atual: 8.x. 02 XAMPP para iniciantes (inclui phpMyAdmin). MySQL Installer para ambiente dedicado. 03 phpMyAdmin — interface web simples. Workbench — app desktop com diagramas ER. 04 CREATE DATABASE cria o banco. USE nome o seleciona. Sempre use utf8mb4. 05 INT para IDs · DECIMAL(M,D) para preços · VARCHAR(N) para textos · DATE/DATETIME para datas. 06 Constraints: PRIMARY KEY · NOT NULL · UNIQUE · DEFAULT · FOREIGN KEY. 07 ALTER TABLE modifica estrutura. DESC tabela mostra estrutura. DROP TABLE exclui. Próxima aula Aula 4 — SQL: INSERT, SELECT, UPDATE e DELETE