-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathliga.sql
More file actions
95 lines (82 loc) · 3.71 KB
/
Copy pathliga.sql
File metadata and controls
95 lines (82 loc) · 3.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
-- ============================================================
-- Capacitação de MySQL — Liga Acadêmica
-- Script completo da aula (Anexo B do guia)
-- ============================================================
-- COMO USAR
-- 1. Troque `liga_SEUNOME` pelo seu banco nas linhas 22, 23 e 24.
-- Ex.: liga_ana, liga_joao, liga_maria.
-- Só letras minúsculas, sem acento e sem espaço.
-- 2. Cole no phpMyAdmin, aba SQL, e execute.
--
-- O login da turma só tem permissão em bancos que começam com
-- "liga_". Qualquer outro nome retorna ERROR 1044.
-- ============================================================
-- ============================================================
-- Capacitação MySQL — Liga Acadêmica
-- Cenário: cadastro de membros e cursos
-- ============================================================
-- 1. BANCO ---------------------------------------------------
-- O DROP zera SÓ o seu banco, para o script poder ser rodado de novo.
DROP DATABASE IF EXISTS liga_SEUNOME;
CREATE DATABASE liga_SEUNOME CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
USE liga_SEUNOME;
-- 2. ESTRUTURA (DDL) -----------------------------------------
CREATE TABLE curso (
id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(80) NOT NULL UNIQUE
) ENGINE=InnoDB;
CREATE TABLE membro (
id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(120) NOT NULL,
email VARCHAR(160) NOT NULL UNIQUE,
periodo TINYINT NOT NULL,
data_ingresso DATE NOT NULL,
ativo BOOLEAN NOT NULL DEFAULT TRUE,
curso_id INT NULL,
criado_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_membro_curso
FOREIGN KEY (curso_id) REFERENCES curso(id)
ON DELETE SET NULL
ON UPDATE CASCADE
) ENGINE=InnoDB;
-- 3. DADOS (INSERT) ------------------------------------------
INSERT INTO curso (nome) VALUES
('Engenharia de Software'),
('Ciência da Computação'),
('Sistemas de Informação'),
('Engenharia de Produção');
INSERT INTO membro (nome, email, periodo, data_ingresso, curso_id) VALUES
('Ana Souza', 'ana@liga.edu.br', 7, '2024-03-11', 1),
('Bruno Lima', 'bruno@liga.edu.br', 3, '2025-02-20', 2),
('Carla Dias', 'carla@liga.edu.br', 5, '2024-08-05', 1),
('Diego Rocha', 'diego@liga.edu.br', 9, '2023-09-14', 3),
('Elisa Prado', 'elisa@liga.edu.br', 1, '2026-03-02', NULL);
-- 4. CONSULTAS (SELECT) --------------------------------------
SELECT * FROM membro;
SELECT nome, email FROM membro WHERE periodo > 5;
SELECT * FROM membro WHERE nome LIKE 'A%';
SELECT * FROM membro WHERE curso_id IS NULL;
SELECT nome, periodo FROM membro ORDER BY periodo DESC;
SELECT nome FROM membro ORDER BY data_ingresso ASC LIMIT 3;
-- 5. ALTERAÇÃO E REMOÇÃO -------------------------------------
SELECT * FROM membro WHERE id = 1; -- confira ANTES
UPDATE membro SET periodo = 8 WHERE id = 1;
-- registro descartável, criado só para ser apagado
INSERT INTO membro (nome, email, periodo, data_ingresso)
VALUES ('Registro Teste', 'teste@liga.edu.br', 1, '2026-01-01');
SELECT * FROM membro WHERE email = 'teste@liga.edu.br'; -- confira ANTES
DELETE FROM membro WHERE email = 'teste@liga.edu.br';
-- 6. RELACIONAMENTO (JOIN) -----------------------------------
SELECT m.nome AS membro, c.nome AS curso, m.periodo
FROM membro m
INNER JOIN curso c ON m.curso_id = c.id
ORDER BY c.nome, m.nome;
SELECT m.nome AS membro, c.nome AS curso
FROM membro m
LEFT JOIN curso c ON m.curso_id = c.id;
-- 7. BÔNUS: AGREGAÇÃO ----------------------------------------
SELECT c.nome AS curso, COUNT(m.id) AS total_membros
FROM curso c
LEFT JOIN membro m ON m.curso_id = c.id
GROUP BY c.id, c.nome
ORDER BY total_membros DESC;