├── 10_funcoes_number
└── comandos.txt
├── 11_funcoes_date
└── comandos.txt
├── 12_relacoes
└── comandos.txt
├── 13_database_design
├── diagrama_er.mwb
├── pizzaria.mwb
└── pizzaria.pdf
├── 14_pizzaria_do_joao
├── css
│ └── styles.css
├── dashboard.php
├── img
│ ├── pizza-banner.jpg
│ └── pizza.svg
├── index.php
├── process
│ ├── conn.php
│ ├── orders.php
│ └── pizza.php
└── templates
│ ├── footer.php
│ └── header.php
├── 15_extra_php_blog
├── contato.php
├── css
│ └── styles.css
├── data
│ ├── categories.php
│ └── posts.php
├── helpers
│ └── url.php
├── img
│ ├── logo.svg
│ ├── prog-1.jpg
│ ├── prog-2.jpg
│ ├── prog-3.jpg
│ └── prog-4.jpg
├── index.php
├── post.php
└── templates
│ ├── footer.php
│ └── header.php
├── 1_intro
├── empresa.sql
└── empresa2.sql
├── 3_tabelas
└── comandos.txt
├── 4_crud
└── comandos.txt
├── 5_select_avancado
└── comandos.txt
├── 6_constraints
└── comandos.txt
├── 7_joins
└── comandos.txt
├── 8_de_volta_ao_select
└── comandos.txt
└── 9_funcoes_string
├── comandos.txt
├── sakila-data.sql
└── sakila-schema.sql
/10_funcoes_number/comandos.txt:
--------------------------------------------------------------------------------
1 | # 1 - CEIL
2 |
3 | SELECT amount, CEIL(amount) AS arredondado FROM payment;
4 |
5 | # 2 - COUNT
6 |
7 | SELECT COUNT(*) FROM payment;
8 |
9 | # 3 - FLOOR
10 |
11 | SELECT amount, CEIL(amount) AS para_cima, FLOOR(amount) AS para_baixo FROM payment;
12 |
13 | # 4 - MAX
14 |
15 | SELECT MAX(amount) AS maior_pagamento FROM payment;
16 |
17 | # 5 - MIN
18 |
19 | SELECT MIN(amount) AS menor_pagamento FROM payment;
20 |
21 | # 6 - SUM
22 |
23 | SELECT SUM(amount) AS soma_pagamentos FROM payment;
--------------------------------------------------------------------------------
/11_funcoes_date/comandos.txt:
--------------------------------------------------------------------------------
1 | # 1 - ADDDATE
2 |
3 | SELECT last_update, ADDDATE(last_update, "5 DAYS") AS data_atualizada FROM actor;
4 |
5 | # 2 - ADDTIME
6 |
7 | SELECT last_update, ADDTIME(last_update, "3 02:10:05") AS data_atualizada FROM actor;
8 |
9 | # 3 - DATEDIFF
10 |
11 | SELECT DATEDIFF(last_update, ADDDATE(last_update, "1 DAY")) AS diferenca_de_datas FROM sakila.actor;
12 |
13 | # 4 - DATE_FORMAT
14 |
15 | SELECT DATE_FORMAT(last_update, "%d/%m/%Y") AS data_formatada FROM actor;
16 |
17 | # 5 - DAY
18 |
19 | SELECT last_update, DAY(last_update) AS dia FROM actor;
20 |
21 | # 6 - DAYOFWEEK
22 |
23 | SELECT last_update, DAYOFWEEK(last_update) AS dia FROM actor;
24 |
25 | # 7 - DAYOFYEAR
26 |
27 | SELECT last_update, DAYOFYEAR(last_update) AS dia_do_ano FROM actor;
28 |
29 | # 8 - WEEKOFYEAR
30 |
31 | SELECT last_update, WEEKOFYEAR(last_update) AS semana FROM actor;
32 |
33 | # 9 - MONTH
34 |
35 | SELECT last_update, MONTH(last_update) AS mes FROM actor;
36 |
37 | # 10 - YEAR
38 |
39 | SELECT last_update, YEAR(last_update) AS ano FROM actor;
--------------------------------------------------------------------------------
/12_relacoes/comandos.txt:
--------------------------------------------------------------------------------
1 | # 1 - ONE TO ONE
2 | CREATE DATABASE relacoes;
3 |
4 | USE relacoes;
5 |
6 | CREATE TABLE estudantes(
7 | id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
8 | nome VARCHAR(100),
9 | turma VARCHAR(5)
10 | );
11 |
12 | CREATE TABLE contatos (
13 | id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
14 | telefone VARCHAR(20),
15 | estudante_id INT NOT NULL,
16 | FOREIGN KEY (estudante_id) REFERENCES estudantes(id)
17 | );
18 |
19 | INSERT INTO estudantes (nome, turma) VALUES ("Matheus", "304d");
20 | INSERT INTO estudantes (nome, turma) VALUES ("João", "101a");
21 |
22 | INSERT INTO contatos (telefone, estudante_id) VALUES ("(48)9999-9999", 1);
23 | INSERT INTO contatos (telefone, estudante_id) VALUES ("(48)8888-8888", 2);
24 |
25 | SELECT estudantes.nome, contatos.telefone
26 | FROM estudantes
27 | JOIN contatos ON contatos.estudante_id = estudantes.id;
28 |
29 | # 2 - ONE TO MANY
30 |
31 | CREATE TABLE clientes (
32 | id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
33 | nome VARCHAR(100),
34 | data_nascimento DATE
35 | );
36 |
37 | CREATE TABLE pedidos (
38 | id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
39 | qtd_itens INT(10),
40 | total FLOAT,
41 | cliente_id INT NOT NULL,
42 | FOREIGN KEY (cliente_id) REFERENCES clientes(id)
43 | );
44 |
45 |
46 | INSERT INTO clientes (nome, data_nascimento) VALUES ("Matheus", "1991-05-01");
47 | INSERT INTO clientes (nome, data_nascimento) VALUES ("João", "1985-02-04");
48 |
49 | INSERT INTO pedidos (qtd_itens, total, cliente_id) VALUES (5, 214.54, 1);
50 | INSERT INTO pedidos (qtd_itens, total, cliente_id) VALUES (3, 120.00, 1);
51 | INSERT INTO pedidos (qtd_itens, total, cliente_id) VALUES (2, 89.47, 1);
52 |
53 |
54 | SELECT clientes.nome, pedidos.id AS pedido_id
55 | FROM clientes
56 | JOIN pedidos ON pedidos.cliente_id = clientes.id
57 | WHERE pedidos.cliente_id = 1;
58 |
59 | # 3 - MANY TO MANY
60 |
61 | CREATE TABLE materias (
62 | id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
63 | nome VARCHAR(100)
64 | );
65 |
66 | CREATE TABLE estudante_materia (
67 | estudante_id INT NOT NULL,
68 | materia_id INT NOT NULL,
69 | FOREIGN KEY (estudante_id) REFERENCES estudantes(id),
70 | FOREIGN KEY (materia_id) REFERENCES materias(id)
71 | );
72 |
73 | INSERT INTO materias (nome) VALUES ("Matemática");
74 | INSERT INTO materias (nome) VALUES ("Química");
75 | INSERT INTO materias (nome) VALUES ("Física");
76 |
77 | INSERT INTO estudantes (nome, turma) VALUES ("Maria", "202b");
78 | INSERT INTO estudantes (nome, turma) VALUES ("Amanda", "104c");
79 |
80 | INSERT INTO estudante_materia (estudante_id, materia_id) VALUES (1, 1);
81 | INSERT INTO estudante_materia (estudante_id, materia_id) VALUES (1, 2);
82 | INSERT INTO estudante_materia (estudante_id, materia_id) VALUES (1, 3);
83 | INSERT INTO estudante_materia (estudante_id, materia_id) VALUES (2, 1);
84 | INSERT INTO estudante_materia (estudante_id, materia_id) VALUES (2, 2);
85 | INSERT INTO estudante_materia (estudante_id, materia_id) VALUES (2, 3);
86 | INSERT INTO estudante_materia (estudante_id, materia_id) VALUES (3, 1);
87 | INSERT INTO estudante_materia (estudante_id, materia_id) VALUES (3, 2);
88 | INSERT INTO estudante_materia (estudante_id, materia_id) VALUES (3, 3);
89 | INSERT INTO estudante_materia (estudante_id, materia_id) VALUES (4, 2);
90 |
91 | // ALUNOS QUIMICA
92 | SELECT * FROM alunos
93 | JOIN estudante_materia ON estudante_materia.estudante_id = alunos.id
94 | AND estudante_materia.materia_id = 2;
--------------------------------------------------------------------------------
/13_database_design/diagrama_er.mwb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matheusbattisti/curso_sql/6a70c7fc8d995948511b891e4e6ad359e5849d37/13_database_design/diagrama_er.mwb
--------------------------------------------------------------------------------
/13_database_design/pizzaria.mwb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matheusbattisti/curso_sql/6a70c7fc8d995948511b891e4e6ad359e5849d37/13_database_design/pizzaria.mwb
--------------------------------------------------------------------------------
/13_database_design/pizzaria.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matheusbattisti/curso_sql/6a70c7fc8d995948511b891e4e6ad359e5849d37/13_database_design/pizzaria.pdf
--------------------------------------------------------------------------------
/14_pizzaria_do_joao/css/styles.css:
--------------------------------------------------------------------------------
1 | html, body {
2 | height: 100%;
3 | }
4 |
5 | /* NAVBAR */
6 | #brand-logo {
7 | width: 50px;
8 | }
9 |
10 | .navbar.navbar-expand-lg {
11 | background-color: #000;
12 | font-weight: bold;
13 | }
14 |
15 | .navbar.navbar-expand-lg a {
16 | color: #FFF;
17 | }
18 |
19 | /* HOME */
20 | #main-banner {
21 | background-image: url("../img/pizza-banner.jpg");
22 | height: 300px;
23 | background-position: center;
24 | background-size: cover;
25 | width: 100%;
26 | background-position-y: -300px;
27 | display: flex;
28 | align-items: center;
29 | justify-content: center;
30 | }
31 |
32 | #main-banner h1 {
33 | color: #FFF;
34 | background-color: #000;
35 | text-align: center;
36 | padding: 30px;
37 | text-transform: uppercase;
38 | width: 550px;
39 | font-size: 50px;
40 | }
41 |
42 | #main-container {
43 | margin-bottom: 100px;
44 | padding: 50px 0;
45 | text-align: center;
46 | min-height: 50%;
47 | }
48 |
49 | #main-container h2 {
50 | margin-bottom: 30px;
51 | }
52 |
53 | .row {
54 | margin: 0;
55 | }
56 |
57 | #pizza-form {
58 | max-width: 550px;
59 | margin: 0 auto;
60 | text-align: left;
61 | }
62 |
63 | #pizza-form label {
64 | font-weight: bold;
65 | }
66 |
67 | .btn.btn-primary {
68 | background-color: #000;
69 | border-color: #000;
70 | }
71 |
72 | /* ALERTA */
73 | .alert {
74 | border-radius: 0;
75 | text-align: center;
76 | margin-bottom: 0;
77 | font-weight: bold;
78 | padding: 20px;
79 | font-size: 18px;
80 | }
81 |
82 | .alert.alert-success {
83 | border: 2px solid #155724;
84 | }
85 |
86 | .alert.alert-warning {
87 | border: 2px solid #856404;
88 | }
89 |
90 | .alert p {
91 | margin-bottom: 0;
92 | }
93 |
94 | /* DASHBOARD */
95 | .delete-btn, .update-btn {
96 | border: none;
97 | background-color: transparent;
98 | }
99 |
100 | .delete-btn {
101 | padding-top: 10px;
102 | }
103 |
104 | .delete-btn i {
105 | color: #721c24;
106 | font-size: 20px;
107 | }
108 |
109 | .update-btn {
110 | margin-left: 10px;
111 | }
112 |
113 | .update-btn i {
114 | color: #004085;
115 | }
116 |
117 | .update-form {
118 | display: flex;
119 | flex-direction: row;
120 | }
121 |
122 | .status-input {
123 | width: 65%;
124 | }
125 |
126 | .table ul {
127 | text-align: left;
128 | }
129 |
130 | /* FOOTER */
131 | footer {
132 | position: relative;
133 | width: 100%;
134 | height: 175px;
135 | background-color: #000;
136 | color: #FFF;
137 | display: flex;
138 | align-items: center;
139 | justify-content: center;
140 | font-weight: bold;
141 | }
142 |
143 | /* RESPONSIVO */
144 | @media(max-width: 425px) {
145 |
146 | #main-banner {
147 | background-position-y: 0;
148 | }
149 |
150 | #main-banner h1 {
151 | padding: 10px;
152 | }
153 |
154 | #main-container {
155 | margin-bottom: 0;
156 | }
157 |
158 | #main-container .container {
159 | padding: 10px;
160 | }
161 |
162 | .form-group .btn.btn-primary {
163 | width: 100%;
164 | height: 50px;
165 | margin-top: 15px;
166 | text-transform: uppercase;
167 | }
168 |
169 | .table-container {
170 | padding: 0;
171 | }
172 |
173 | .table td, .table th {
174 | padding: .5rem;
175 | }
176 |
177 | th span {
178 | display: none;
179 | }
180 |
181 | .table thead th:nth-child(5),
182 | .table thead th:nth-child(6),
183 | .table tbody td:nth-child(5),
184 | .table tbody td:nth-child(6) {
185 | display: none;
186 | }
187 |
188 | }
--------------------------------------------------------------------------------
/14_pizzaria_do_joao/dashboard.php:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
8 |
9 |
Gerenciar pedidos:
10 |
11 |
12 |
13 |
14 |
15 | Pedido # |
16 | Borda |
17 | Massa |
18 | Sabores |
19 | Status |
20 | Ações |
21 |
22 |
23 |
24 |
25 |
26 | = $pizza["id"] ?> |
27 | = $pizza["borda"] ?> |
28 | = $pizza["massa"] ?> |
29 |
30 |
31 |
32 | - = $sabor ;?>
33 |
34 |
35 | |
36 |
37 |
49 | |
50 |
51 |
58 | |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/14_pizzaria_do_joao/img/pizza-banner.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/matheusbattisti/curso_sql/6a70c7fc8d995948511b891e4e6ad359e5849d37/14_pizzaria_do_joao/img/pizza-banner.jpg
--------------------------------------------------------------------------------
/14_pizzaria_do_joao/img/pizza.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/14_pizzaria_do_joao/index.php:
--------------------------------------------------------------------------------
1 |
5 |
6 |
Faça seu Pedido
7 |
8 |
9 |
10 |
11 |
12 |
Monte a pizza como desejar:
13 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/14_pizzaria_do_joao/process/conn.php:
--------------------------------------------------------------------------------
1 | setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
14 | $conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
15 |
16 | } catch (PDOException $e) {
17 |
18 | print "Erro: " . $e->getMessage() . "
";
19 | die();
20 |
21 | }
22 |
23 | ?>
--------------------------------------------------------------------------------
/14_pizzaria_do_joao/process/orders.php:
--------------------------------------------------------------------------------
1 | query("SELECT * FROM pedidos;");
10 |
11 | $pedidos = $pedidosQuery->fetchAll();
12 |
13 | $pizzas = [];
14 |
15 | // Montando pizza
16 | foreach($pedidos as $pedido) {
17 |
18 | $pizza = [];
19 |
20 | // definir um array para a pizza
21 | $pizza["id"] = $pedido["pizza_id"];
22 |
23 | // resgatando a pizza
24 | $pizzaQuery = $conn->prepare("SELECT * FROM pizzas WHERE id = :pizza_id");
25 |
26 | $pizzaQuery->bindParam(":pizza_id", $pizza["id"]);
27 |
28 | $pizzaQuery->execute();
29 |
30 | $pizzaData = $pizzaQuery->fetch(PDO::FETCH_ASSOC);
31 |
32 | // resgatando a borda da pizza
33 | $bordaQuery = $conn->prepare("SELECT * FROM bordas WHERE id = :borda_id");
34 |
35 | $bordaQuery->bindParam(":borda_id", $pizzaData["borda_id"]);
36 |
37 | $bordaQuery->execute();
38 |
39 | $borda = $bordaQuery->fetch(PDO::FETCH_ASSOC);
40 |
41 | $pizza["borda"] = $borda["tipo"];
42 |
43 | // resgatando a borda da pizza
44 | $massaQuery = $conn->prepare("SELECT * FROM massas WHERE id = :massa_id");
45 |
46 | $massaQuery->bindParam(":massa_id", $pizzaData["massa_id"]);
47 |
48 | $massaQuery->execute();
49 |
50 | $massa = $massaQuery->fetch(PDO::FETCH_ASSOC);
51 |
52 | $pizza["massa"] = $massa["tipo"];
53 |
54 | // resgatando os sabores da pizza
55 | $saboresQuery = $conn->prepare("SELECT * FROM pizza_sabor WHERE pizza_id = :pizza_id");
56 |
57 | $saboresQuery->bindParam(":pizza_id", $pizza["id"]);
58 |
59 | $saboresQuery->execute();
60 |
61 | $sabores = $saboresQuery->fetchAll(PDO::FETCH_ASSOC);
62 |
63 | // resgatando o nome dos sabores
64 | $saboresDaPizza = [];
65 |
66 | $saborQuery = $conn->prepare("SELECT * FROM sabores WHERE id = :sabor_id");
67 |
68 | foreach($sabores as $sabor) {
69 |
70 | $saborQuery->bindParam(":sabor_id", $sabor["sabor_id"]);
71 |
72 | $saborQuery->execute();
73 |
74 | $saborPizza = $saborQuery->fetch(PDO::FETCH_ASSOC);
75 |
76 | array_push($saboresDaPizza, $saborPizza["nome"]);
77 |
78 | }
79 |
80 | $pizza["sabores"] = $saboresDaPizza;
81 |
82 | // adicionar o status do pedido
83 | $pizza["status"] = $pedido["status_id"];
84 |
85 | // Adicionar o array de pizza, ao array das pizzas
86 | array_push($pizzas, $pizza);
87 |
88 | }
89 |
90 | // Resgatando os status
91 | $statusQuery = $conn->query("SELECT * FROM status;");
92 |
93 | $status = $statusQuery->fetchAll();
94 |
95 | } else if($method === "POST") {
96 |
97 | // verificando tipo de POST
98 | $type = $_POST["type"];
99 |
100 | // deletar pedido
101 | if($type === "delete") {
102 |
103 | $pizzaId = $_POST["id"];
104 |
105 | $deleteQuery = $conn->prepare("DELETE FROM pedidos WHERE pizza_id = :pizza_id;");
106 |
107 | $deleteQuery->bindParam(":pizza_id", $pizzaId, PDO::PARAM_INT);
108 |
109 | $deleteQuery->execute();
110 |
111 | $_SESSION["msg"] = "Pedido removido com sucesso!";
112 | $_SESSION["status"] = "success";
113 |
114 | // Atualizar status do pedido
115 | } else if($type === "update") {
116 |
117 | $pizzaId = $_POST["id"];
118 | $statusId = $_POST["status"];
119 |
120 | $updateQuery = $conn->prepare("UPDATE pedidos SET status_id = :status_id WHERE pizza_id = :pizza_id");
121 |
122 | $updateQuery->bindParam(":pizza_id", $pizzaId, PDO::PARAM_INT);
123 | $updateQuery->bindParam(":status_id", $statusId, PDO::PARAM_INT);
124 |
125 | $updateQuery->execute();
126 |
127 | $_SESSION["msg"] = "Pedido atualizado com sucesso!";
128 | $_SESSION["status"] = "success";
129 |
130 | }
131 |
132 | // retorna usuário para dashboard
133 | header("Location: ../dashboard.php");
134 |
135 | }
136 |
137 | ?>
--------------------------------------------------------------------------------
/14_pizzaria_do_joao/process/pizza.php:
--------------------------------------------------------------------------------
1 | query("SELECT * FROM bordas;");
11 |
12 | $bordas = $bordasQuery->fetchAll();
13 |
14 | $massasQuery = $conn->query("SELECT * FROM massas;");
15 |
16 | $massas = $massasQuery->fetchAll();
17 |
18 | $saboresQuery = $conn->query("SELECT * FROM sabores;");
19 |
20 | $sabores = $saboresQuery->fetchAll();
21 |
22 | // Criação do pedido
23 | } else if($method === "POST") {
24 |
25 | $data = $_POST;
26 |
27 | $borda = $data["borda"];
28 | $massa = $data["massa"];
29 | $sabores = $data["sabores"];
30 |
31 | // validação de sabores máximos
32 | if(count($sabores) > 3) {
33 |
34 | $_SESSION["msg"] = "Selecione no máximo 3 sabores!";
35 | $_SESSION["status"] = "warning";
36 |
37 | } else {
38 |
39 | // salvando borda e massa na pizza
40 | $stmt = $conn->prepare("INSERT INTO pizzas (borda_id, massa_id) VALUES (:borda, :massa)");
41 |
42 | // filtrando inputs
43 | $stmt->bindParam(":borda", $borda, PDO::PARAM_INT);
44 | $stmt->bindParam(":massa", $massa, PDO::PARAM_INT);
45 |
46 | $stmt->execute();
47 |
48 | // resgatando último id da última pizza
49 | $pizzaId = $conn->lastInsertId();
50 |
51 | $stmt = $conn->prepare("INSERT INTO pizza_sabor (pizza_id, sabor_id) VALUES (:pizza, :sabor)");
52 |
53 | // repetição até terminar de salvar todos os sabores
54 | foreach($sabores as $sabor) {
55 |
56 | // filtrando os inputs
57 | $stmt->bindParam(":pizza", $pizzaId, PDO::PARAM_INT);
58 | $stmt->bindParam(":sabor", $sabor, PDO::PARAM_INT);
59 |
60 | $stmt->execute();
61 |
62 | }
63 |
64 | // criar o pedido da pizza
65 | $stmt = $conn->prepare("INSERT INTO pedidos (pizza_id, status_id) VALUES (:pizza, :status)");
66 |
67 | // status -> sempre inicia com 1, que é em produção
68 | $statusId = 1;
69 |
70 | // filtrar inputs
71 | $stmt->bindParam(":pizza", $pizzaId);
72 | $stmt->bindParam(":status", $statusId);
73 |
74 | $stmt->execute();
75 |
76 | // Exibir mensagem de sucesso
77 | $_SESSION["msg"] = "Pedido realizado com sucesso";
78 | $_SESSION["status"] = "success";
79 |
80 | }
81 |
82 | // Retorna para página inicial
83 | header("Location: ..");
84 |
85 | }
86 |
87 | ?>
--------------------------------------------------------------------------------
/14_pizzaria_do_joao/templates/footer.php:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |