Para desenvolver os projetos, você deverá seguir as instruções a seguir. Fique atento a cada passo, e se tiver qualquer dúvida, nos envie por Slack! #vqv 🚀
Aqui você vai encontrar os detalhes de como estruturar o desenvolvimento do seu projeto a partir desse repositório, utilizando uma branch específica e um Pull Request para colocar seus códigos.
👨💻 O que deverá ser desenvolvido
Hoje você fará um projeto com o codinome All For One em que praticará todos os conceitos de SQL já ensinados até aqui. Porém, você vai usar um banco de dados totalmente diferente, então dê tchau para o sakila e dê boas vindas ao Northwind, que será usado neste projeto. As instruções de como restaurar o banco podem ser lidas a seguir.
👨💻 Desenvolvimento
Temos, nesse projeto, uma série de desafios com diferentes níveis de complexidade que devem ser resolvidos cada um em seu arquivo próprio.
-
Leia a pergunta e crie na raiz do projeto um arquivo chamado desafioN.sql, em que N é o número do desafio;
-
O arquivo deve conter apenas o código SQL do desafio resolvido. Não se esqueça de incluir o ponto e vírgula (";") no final de suas queries e também de colocar o nome do banco_de_dados.tabela_por_completo, como no exemplo a seguir:
SELECT * FROM northwind.orders;-
Faça isso até finalizar todos os desafios.
-
Para entregar o seu projeto você deverá criar um Pull Request neste repositório. Este Pull Request deverá conter os arquivos
desafio1.sql,desafio2.sqle assim por diante até odesafio27.sql, que conterão seu códigoSQLde cada desafio, respectivamente. -
Não é necessário colocar
USE northwindouSET SQL_SAFE_UPDATES = 0;no início dos seus arquivos. -
Após a execução dos teste locais, o banco de dados
northwindé deletado.
🐳 Rodando no Docker vs Localmente
1.26.0 por 1.29.2.
ℹ️ Rode os serviços
nodeedbcom o comandodocker-compose up -d.
- Lembre-se de parar o
mysqlse estiver usando localmente na porta padrão (3306), ou adapte, caso queria fazer uso da aplicação em containers - Esses serviços irão inicializar um container chamado
all_for_onee outro chamadoall_for_one_db. - A partir daqui você pode rodar o container
all_for_onevia CLI ou abri-lo no VS Code.
🗒️ Instruções para restaurar o banco de dados `Northwind`
117 118 1. Faça o download do arquivo de backup [aqui](northwind.sql) clicando em "Raw", depois clicando com botão direito e selecionando "Salvar como" para salvar o arquivo em seu computador. 119 2. Abra o arquivo com algum editor de texto e selecione todo o conteúdo do arquivo usando `CTRL-A`. 120 3. Abra o MySQL Workbench. 121 4. Abra uma nova janela de query e cole dentro dela todo o conteúdo do arquivo `northwind.sql`. 122 5. Selecione todo o código com o atalho `CTRL-A` e depois clique no ícone de raio para executar a query. 123 124  125 6. Aguarde alguns segundos (espere em torno de 30 segundos antes de tentar fazer algo). 126 7. Clique no botão apontado na imagem a seguir para atualizar a listagem de banco de dados. 127 128  129 7. Verifique se o banco restaurado possui todas as seguintes tabelas: 130 131  132 8. Clique com botão direito em cada tabela e selecione "Select Rows" e certifique-se que todas as tabelas possuem registros. Caso tenha alguma faltando, faça o passo a seguir. Caso contrário, pode ir para próxima seção. 133 9. Caso existam tabelas faltando, drope o banco de dados clicando com o botão direito em cima do banco de dados northwind e selecionando "Drop Schema" e refaça os passos novamente, dessa vez aguardando um tempo maior quando executar o script de restauração. 134 135  136 137
ℹ️ Instale as dependências [Caso existam] com
npm install. (Instale dentro do container)
-
⚠️ Atenção: Caso opte por utilizar o Docker, TODOS os comandos disponíveis nopackage.json(npm start, npm test, npm run dev, ...) devem ser executados DENTRO do container, ou seja, no terminal que aparece após a execução do comandodocker execcitado acima. -
⚠️ Atenção: O git dentro do container não vem configurado com suas credenciais. Ou faça os commits fora do container, ou configure as suas credenciais do git dentro do container. -
⚠️ Atenção: Não rode o comando npm audit fix! Ele atualiza várias dependências do projeto, e essa atualização gera conflitos com o avaliador. -
✨ Dica: A extensão
Remote - Containers(que estará na seção de extensões recomendadas do VS Code) é indicada para que você possa desenvolver sua aplicação no container Docker direto no VS Code, como você faz com seus arquivos locais.
ℹ️ Instale as dependências [Caso existam] com
npm install
-
⚠️ Atenção: Não rode o comando npm audit fix! Ele atualiza várias dependências do projeto, e essa atualização gera conflitos com o avaliador. -
✨ Dica: Para rodar o projeto desta forma, obrigatoriamente você deve ter o
nodeinstalado em seu computador. -
✨ Dica: O avaliador espera que a versão do
nodeutilizada seja a 16.
🤝 Depois de terminar o desenvolvimento (opcional)
Para sinalizar que o seu projeto está pronto para o "Code Review" dos seus colegas, faça o seguinte:
-
Vá até a página DO SEU Pull Request, adicione a label de "code-review" e marque seus colegas:
-
No menu à direita, clique no link "Labels" e escolha a label code-review;
-
No menu à direita, clique no link "Assignees" e escolha o seu usuário;
-
No menu à direita, clique no link "Reviewers" e digite
students, selecione o timetryber/students-sd-019-c.
-
Caso tenha alguma dúvida, aqui tem um video explicativo.
🕵🏿 Revisando um pull request
Use o conteúdo sobre Code Review para te ajudar a revisar os Pull Requests.
📑 Instruções para testar suas queries
- Após ter seguido os passos anteriores do
docker-compose up -dedocker exec -it all_for_one bash, dentro do terminal interativo do container, rode:
npm test- Para executar localmente os testes é preciso escrever o seguinte no seu terminal:
MYSQL_USER=<SEU_NOME_DE_PESSOA_USUARIA> MYSQL_PASSWORD=<SUA SENHA> HOSTNAME=<NOME_DO_HOST> PORT=<PORTA> npm test- Não esqueça de substituir os locais indicados com
< >por suas credenciais:
MYSQL_USER=root MYSQL_PASSWORD=password HOSTNAME=localhost PORT=3306 npm test- ✨ Dica: variáveis de ambiente definidas na mesma linha do comando valem apenas para aquele comando. Se preferir, você pode exportar as variáveis de ambiente para toda a sessão (todos os comandos até você fechar aquele terminal). Por exemplo:
export MYSQL_USER=root MYSQL_PASSWORD=password HOSTNAME=localhost PORT=3306E depois disso você só precisa rodar
npm testquando for testar os projetos.
- ✨ Dica: Caso queira utilizar Docker para rodar os testes localmente, basta executar o comando:
docker run -p 3306:3306 --name mysql_57 -e MYSQL_ROOT_PASSWORD=1234 -d mysql:5.7 mysqld --default-authentication-plugin=mysql_native_password- Depois de usar o comando acima, agora basta executar os testes digitando no terminal:
MYSQL_USER=root MYSQL_PASSWORD=1234 HOSTNAME=localhost npm testO que está sendo feito na dica acima
- 👉 flag --name:
Define um nome para o nosso container: "meu-mysql-5_7".
- 👉 flag -e:
Define a variável de ambiente "MYSQL_ROOT_PASSWORD" com o valor "1234".
- 👉 flag -d:
Define que o container rode em segundo plano.
- 👉 flag -p:
Mapeia uma porta local a uma porta do container.
- 👉 mysql:5.7:
Define qual versão da imagem mySQL queremos, no caso, a 5.7, que é a esperada pelo avaliador.
-
⚠️ Atenção: O avaliador espera que a versão do MySQL seja a 5.7. Em caso de erro nos testes, verifique se essa é a versão que está sendo usada por você. -
⚠️ Atenção: Não é necessário colocarUSE northwindouSET SQL_SAFE_UPDATES = 0;no início dos seus arquivos -
⚠️ Atenção: Após a execução dos teste locais, o banco de dadosnorthwindé deletado⚠️
Monte queries para encontrar as informações esperadas pelos desafios:
1 - Exiba apenas os nomes dos produtos na tabela products.
2 - Exiba os dados de todas as colunas da tabela products.
3 - Escreva uma query que exiba os valores da coluna que representa a primary key da tabela products.
4 - Conte quantos registros existem na coluna product_name da tabela products.
5 - Monte uma query que exiba os dados da tabela products a partir do quarto registro até o décimo terceiro.
👀 Observações técnicas
-
Tanto o quarto quanto o décimo terceiro registros, precisam aparecer na consulta;
-
Não use
whereouorder by.
6 - Exiba os dados das colunas product_name e id da tabela products de maneira que os resultados estejam em ordem alfabética dos nomes.
7 - Mostre apenas os ids dos 5 últimos registros da tabela products (a ordernação deve ser baseada na coluna id).
8 - Faça uma consulta que retorne três colunas, respectivamente, com os nomes 'A', 'Trybe' e 'eh', e com valores referentes a soma de '5 + 6', a string 'de', a soma de '2 + 8'.
👀 Observações técnicas
-
Na primeira coluna, exiba a soma de
5 + 6(essa soma deve ser realizada pelo SQL); -
Na segunda coluna deve haver a palavra "de";
-
E por fim, na terceira coluna, exiba a soma de
2 + 8(essa soma deve ser realizada pelo SQL); -
A primeira coluna deve se chamar "A", a segunda coluna deve se chamar "Trybe" e a terceira coluna deve se chamar "eh";
-
Não use colunas pré-existentes, apenas o que for criado na hora.
9 - Mostre todos os valores de notes da tabela purchase_orders que não são nulos.
10 - Mostre todos os dados da tabela purchase_orders em ordem decrescente, ordenados por created_by em que o created_by é maior ou igual a 3.
👀 Observações técnicas
- Como critério de desempate para a ordenação, ordene também os resultados pelo
idde forma crescente.
11 - Exiba os dados da coluna notes da tabela purchase_orders em que seu valor de Purchase generated based on Order é maior ou igual a 30 e menor ou igual a 39.
12 - Mostre as submitted_date de purchase_orders em que a submitted_date é do dia 26 de abril de 2006.
13 - Mostre o supplier_id das purchase_orders em que o supplier_id seja 1 ou 3.
14 - Mostre os resultados da coluna supplier_id da tabela purchase_orders em que o supplier_id seja maior ou igual a 1 e menor ou igual 3.
15 - Mostre somente as horas (sem os minutos e os segundos) da coluna submitted_date de todos registros da tabela purchase_orders.
👀 Observações técnicas
- Chame essa coluna de
submitted_hour.
16 - Exiba a submitted_date das purchase_orders que estão entre 2006-01-26 00:00:00 e 2006-03-31 23:59:59.
17 - Mostre os registros das colunas id e supplier_id das purchase_orders em que os supplier_id sejam tanto 1, ou 3, ou 5, ou 7.
18 - Mostre todos os registros de purchase_orders que tem o supplier_id igual a 3 e status_id igual a 2.
19 - Mostre a quantidade de pedidos que foram feitos na tabela orders pelo employee_id igual a 5 ou 6, e que foram enviados através do método(coluna) shipper_id igual a 2.
👀 Observações técnicas
- Chame a coluna de
orders_count.
20 - Adicione à tabela order_details um registro com order_id: 69, product_id: 80, quantity: 15.0000, unit_price: 15.0000, discount: 0, status_id: 2, date_allocated: NULL, purchase_order_id: NULL e inventory_id: 129.
👀 Observações técnicas
- Obs.: o
iddeve ser incrementado automaticamente.
21 - Adicione com um único INSERT, duas linhas à tabela order_details com os mesmos dados do requisito 20.
👀 Observações técnicas
-
Esses dados são novamente
order_id: 69,product_id: 80,quantity: 15.0000,unit_price: 15.0000,discount: 0,status_id: 2,date_allocated: NULL,purchase_order_id: NULL einventory_id: 129; -
O
ìddeve ser incrementado automaticamente.
22 - Atualize os dados de discount do order_details para 15. (Não é necessário utilizar o SAFE UPDATE em sua query).
23 - Atualize os dados da coluna discount da tabela order_details para 30, onde o valor na coluna unit_price seja menor que 10.0000.
👀 Observações técnicas
- Não é necessário utilizar o SAFE UPDATE em sua query.
24 - Atualize os dados da coluna discount da tabela order_details para 45, onde o valor na coluna unit_price seja maior que 10.0000 e o id seja um número entre 30 e 40.
👀 Observações técnicas
- Não é necessário utilizar o SAFE UPDATE em sua query.
25 - Delete todos os dados em que a unit_price da tabela order_details seja menor que 10.0000.
26 - Delete todos os dados em que a unit_price da tabela order_details seja maior que 10.0000.
27 - Delete todos os dados da tabela order_details.
