{"id":20924965,"url":"https://github.com/gonzagadavid/mysql-joins","last_synced_at":"2026-03-01T05:02:47.290Z","repository":{"id":107666199,"uuid":"415275712","full_name":"Gonzagadavid/MySQL-JOINS","owner":"Gonzagadavid","description":"Conteúdo sobre Join em SQL, com explicação, exemplos e exercícios em MySQL","archived":false,"fork":false,"pushed_at":"2022-08-14T01:45:07.000Z","size":231,"stargazers_count":7,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-02T05:03:46.100Z","etag":null,"topics":["banco-de-dados","exemplos","exercicios","join","left-join","mysql","right-join","self-join","sql","tutorial","tutorial-code"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Gonzagadavid.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-10-09T10:25:32.000Z","updated_at":"2024-04-29T01:13:17.000Z","dependencies_parsed_at":"2023-06-08T17:30:53.494Z","dependency_job_id":null,"html_url":"https://github.com/Gonzagadavid/MySQL-JOINS","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gonzagadavid%2FMySQL-JOINS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gonzagadavid%2FMySQL-JOINS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gonzagadavid%2FMySQL-JOINS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gonzagadavid%2FMySQL-JOINS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Gonzagadavid","download_url":"https://codeload.github.com/Gonzagadavid/MySQL-JOINS/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253981818,"owners_count":21994341,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["banco-de-dados","exemplos","exercicios","join","left-join","mysql","right-join","self-join","sql","tutorial","tutorial-code"],"created_at":"2024-11-18T20:28:24.164Z","updated_at":"2026-03-01T05:02:42.252Z","avatar_url":"https://github.com/Gonzagadavid.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# SQL JOIN\n##  *INNER JOIN, LEFT JOIN, RIGHT JOIN e SELF JOIN*\n\n---\n\u0026nbsp;\n\n# Sumário\n\n- [O que vamos aprender?](#o-que-vamos-aprender)  \n  - [Você será capaz de:](#você-será-capaz-de)  \n- [Porque isso é importante?](#porque-isso-é-importante)  \n- [JOIN](#join)  \n- [INNER JOIN](#inner-join)  \n- [LEFT JOIN e RIGHT JOIN](#left-join-e-right-join)  \n- [SELF JOIN](#self-join)  \n- [Vamos praticar!](#vamos-praticar)  \n  - [Gabarito](#gabarito)\n- [Recursos Adicionais](#recursos-adicionais)\n  \n\n---\n\u0026nbsp;\n\n# O que vamos aprender?\n\nHoje, você aprenderá a utilizar os principais **Joins** no **MySQL**, associando **duas ou mais tabelas**  com **dados relacionados** entre si, inclusive associar uma tabela com ela **mesma**, usando uma **determinada condição** de organização.  *Vamos lá!* :rocket:\n\n---\n\n## Você será capaz de:  \n\n- Escrever queries combinando *informações* de duas tabelas utilizando o INNER JOIN;\n- Escrever queries combinando duas tabelas e preservando todas as informções de uma delas, utilizando LEFT JOIN ou RIGHT JOIN;\n- Escrever queries utilizando os dados da mesma tabela como se fosse duas tabelas distintas;\n\n---\n\u0026nbsp;\n\n# Porque isso é importante?\n\nO **banco de dados relacional** armazena diversas tabelas que **relaciona os dados entre si** e utiliza indicadores como referência. Sendo assim, as informações da qual você precisará para sua consulta, poderá estar em mais de uma tabela, surgindo a necessidade de unir duas ou mais tabelas em uma mesma query.\n\n--- \n\u0026nbsp;\n\n# JOIN\n\n\n  O JOIN  tem um grande papel no banco de dados relacionais, sendo utilizado no SQL para trabalhar com dados de duas tabelas ou mais.\n\nQuer acompanhar os exemplos na sua máquina? \n\nExecute o SQLScript abaixo no seu MYSQL Workbench!\n\n  ```mysql\nDROP SCHEMA IF EXISTS ComicCenter ;\n\nCREATE SCHEMA IF NOT EXISTS ComicCenter ;\nUSE ComicCenter ;\n\nCREATE TABLE IF NOT EXISTS ComicCenter.Cliente (\n  Cliente_id INT NOT NULL AUTO_INCREMENT,\n  Nome VARCHAR(45) NOT NULL,\n  PRIMARY KEY (Cliente_id));\n  \nCREATE TABLE IF NOT EXISTS ComicCenter.Telefone (\n  Cliente_id INT NOT NULL,\n  Numero VARCHAR(45) NOT NULL,\n  PRIMARY KEY (Numero),\n    FOREIGN KEY (Cliente_id)\n    REFERENCES ComicCenter.Cliente (Cliente_id));\n\nCREATE TABLE IF NOT EXISTS ComicCenter.Email (\n  Cliente_id INT NOT NULL,\n  Cliente_email VARCHAR(45) NOT NULL,\n  PRIMARY KEY (Cliente_email),\n    FOREIGN KEY (Cliente_id)\n    REFERENCES ComicCenter.Cliente (Cliente_id));\n    \nCREATE TABLE IF NOT EXISTS ComicCenter.Funcionario (\n  Funcionario_id INT NOT NULL,\n  Nome VARCHAR(45) NOT NULL,\n  PRIMARY KEY (Funcionario_id));\n  \nCREATE TABLE IF NOT EXISTS ComicCenter.Revista (\n  Revista_id INT NOT NULL,\n  Titulo VARCHAR(45) NOT NULL,\n  Editora VARCHAR(45) NOT NULL,\n  PRIMARY KEY (Revista_id));\n\nINSERT INTO ComicCenter.Cliente (Cliente_id, Nome) \n  VALUES (1, 'Sheldon Cooper'), \n         (2, 'Amy Farrah Fowler\t'),\n         (3, 'Leonard Hofstadter'),\n         (4, 'Bernadette Maryann');\n\nINSERT INTO ComicCenter.Telefone (Cliente_id, Numero) \n  VALUES (1, '(19) 16044-3249'),\n         (2, '(73) 45578-8629'),\n         (3, '(23) 57692-8688'),\n         (4, '(62) 19832-5762');\n\nINSERT INTO ComicCenter.Email (Cliente_id, Cliente_email) \n  VALUES (1, 'protoncooper@scemail.com'),\n         (2, 'badgirl@scemail.com'), \n         (3, 'luckyman@scemail.com'), \n         (4, 'candybern@mbmail.com');\n\nINSERT INTO ComicCenter.Funcionario (Funcionario_id, Nome)\n  VALUES (1, 'Stuart Bloom'),\n         (2, 'Sheldon Cooper'),\n         (3, 'Leonard Hofstadter'),\n         (4, 'Raj Koothrappali');\n\nINSERT INTO ComicCenter.Revista (Revista_id, Titulo, Editora) \n  VALUES (1, 'Vingadores', 'Marvel'),\n         (2, 'Liga da Justiça', 'DC Comics'),\n         (3, 'Batman', 'DC Comics'),\n         (4, 'X-Men', 'Marvel'),\n         (5, 'Homem Aranha', 'Marvel'),\n         (6, 'Mulher Maravilha', 'Dc Comics');\n  ```\n--- \n\u0026nbsp;\n\n# INNER JOIN\n\n## Situação a qual será aplicado o INNER JOIN entre duas tabelas\n\nImagine que você precisará consultar o telefone de pessoas clientes através do nome e essas informações(nome e telefone) estão em tabelas diferentes em no banco de dados, dessa forma:\n\n**Tabela Cliente:** \n| Cliente_id | Nome               |\n| :---------:| :----------------: |\n| 1          | Sheldon Cooper     |\n| 2          | Amy Farrah Fowler  |\n| 3          | Leonard Hofstadter |\n| 4          | Bernadette Maryann |\n\n\u0026nbsp;\n\n**Tabela Telefone:**\n| Cliente_id | Numero           |\n| :---------:| :--------------: |\n| 1          | (19) 16044-3249  |\n| 2          | (73) 45578-8629  |\n| 3          | (23) 57692-8688  |\n| 4          | (62) 19832-5762  |\n\n\u0026nbsp;\n\nAgora, consegue visualizar a dificuldade de associar o número de telefone ao nome da pessoa?\n\n## Primeiros passos para o uso do INNER JOIN\n\nAo trabalhar com duas ou mais tabelas você precisará se atentar com as colunas que possuem o mesmo nome, nesse caso seria a coluna Cliente_id. Se não informar de qual tabela será extraída essa informação, um erro de ambiguidade será gerado!  \n\n```shell\n  Error Code: 1052. Column 'Cliente_id' in field list is ambiguous\n```\n\nPara evitar isso, informe da seguinte forma a qual tabela essa coluna pertence: \n\n*Cliente.Cliente_id* para tabela Cliente e *Telefone.Cliente_id* para a tabela Telefone.  \n**Gerando erro ou não, será UMA BOA PRÁTICA informar de qual tabela as informações estão sendo extraídas. Com isso, tornará sua query mais legível e de fácil entendimento para manutenções ou mudanças futuras**\n\n\u0026nbsp;\n\nDessa forma, o ínicio da sua query, onde é informado as colunas a serem exibidas, ficará dessa forma:  \n\n```mysql\n  SELECT \n    Cliente.Cliente_id, Cliente.Nome, Telefone.Numero\n```\n\u0026nbsp;\n\n## Usando o INNER JOIN com duas tabelas\n\nPara unir as duas tabelas através das informações a qual a mesmas se relacionam é necessário informar qual das colunas devem ser usadas como referência para a união dessas informações através do ON,  nesse caso seria a coluna Cliente_id.\n\n\u0026nbsp;\n\nSendo assim, sua query ficaria assim:  \n```mysql\nUSE ComicCenter;\n\nSELECT \n    Cliente.Cliente_id, Cliente.Nome, Telefone.Numero\nFROM\n    Cliente\n        INNER JOIN\n    Telefone ON Cliente.Cliente_id = Telefone.Cliente_id;\n\n```\n\u0026nbsp;\n\nRetornando a seguinte tabela:\n\n| Cliente_id | Nome               | Numero           |\n| :---------:| :-----------------:| :--------------: |\n| 1          | Sheldon Cooper     | (19) 16044-3249  |\n| 2          | Amy Farrah Fowler  | (73) 45578-8629  |\n| 3          | Leonard Hofstadter | (23) 57692-8688  |\n| 4          | Bernadette Maryann | (62) 19832-5762  |\n\n## AS - Alias para tabelas\n\nNo bloco passado *(bloco 19)*, você aprendeu a usar o alias(AS) para nomear colunas em suas queries, porém também pode ser usado para nomear tabelas, se tornado um bom uso para essa situação, tornando sua query menos verbosa:\n\n\u0026nbsp;\n\n```mysql\nUSE ComicCenter;\n\nSELECT \n    C.Cliente_id, C.Nome, T.Numero\nFROM\n    Cliente AS C\n        INNER JOIN\n    Telefone AS T ON C.Cliente_id = T.Cliente_id;\n```\n*Usar a primeira letra ou uma abreviação do nome da tabela como alias é muito comum e uma ótima opção*\n\n\u0026nbsp;\n\nObtendo o mesmo resultado:\n\n| Cliente_id | Nome               | Numero           |\n| :---------:| :----------------: | :--------------: |\n| 1          | Sheldon Cooper     | (19) 16044-3249  |\n| 2          | Amy Farrah Fowler  | (73) 45578-8629  |\n| 3          | Leonard Hofstadter | (23) 57692-8688  |\n| 4          | Bernadette Maryann | (62) 19832-5762  |\n\n\u0026nbsp;\n\n## Situação a qual será aplicado o INNER JOIN com mais de duas tabelas\n\nImagine que você precisará consultar o telefone e o e-mail de pessoas clientes através do nome, e essas informações estão em três tabelas distintas da seguinte forma:\n\n**Tabela Cliente:** \n| Cliente_id | Nome               |\n| :---------:| :----------------: |\n| 1          | Sheldon Cooper     |\n| 2          | Amy Farrah Fowler  |\n| 3          | Leonard Hofstadter |\n| 4          | Bernadette Maryann |\n\n\u0026nbsp;\n\n**Tabela Telefone:**\n| Cliente_id | Numero           |\n| :---------:| :--------------: |\n| 1          | (19) 16044-3249  |\n| 2          | (73) 45578-8629  |\n| 3          | (23) 57692-8688  |\n| 4          | (62) 19832-5762  |\n\n\u0026nbsp;\n\n**Tabela Email:**\n| Cliente_id | Cliente_email             |\n| :---------:| :-----------------------: |\n| 1          | protoncooper@scemail.com  |\n| 2          | badgirl@scemail.com       |\n| 3          | luckyman@scemail.com      |\n| 4          | candybern@mbmail.com      |\n\n\u0026nbsp;\n\n## Usando o INNER JOIN com mais de duas tabelas\n\nPara usar mais de um INNER JOIN na mesma query, basta adicioná-lo logo depois do primeiro, usando no **ON** a coluna relacionada a uma coluna de qualquer tabela declarada anteriormente.\n\n\u0026nbsp;\n\n```mysql\nUSE ComicCenter;\n\nSELECT \n    C.Cliente_id, C.Nome, T.Numero, E.Cliente_email\nFROM\n    Cliente AS C\n        INNER JOIN\n    Telefone AS T ON C.Cliente_id = T.Cliente_id\n        INNER JOIN\n    Email AS E ON E.Cliente_id = C.Cliente_id;\n\n```\n\u0026nbsp;\n\nRetorando o seguinte resultado:\n\n| Cliente_id | Nome               | Numero           | Cliente_email             |\n| :---------:| :----------------: | :--------------: | :-----------------------: |\n| 1          | Sheldon Cooper     | (19) 16044-3249  | protoncooper@scemail.com  |\n| 2          | Amy Farrah Fowler  | (73) 45578-8629  | badgirl@scemail.com       |\n| 3          | Leonard Hofstadter | (23) 57692-8688  | luckyman@scemail.com      |\n| 4          | Bernadette Maryann | (62) 19832-5762  | candybern@mbmail.com      |\n\n---\n\u0026nbsp;\n\n## Exercícios de Fixação\n\nPara a resolver os exercícios de fixação, será usado o banco de dados final_space_db, execute o script abaixo no seu MySQL Workbench:\n\n```mysql\nDROP SCHEMA IF EXISTS final_space_db ;\n\nCREATE SCHEMA IF NOT EXISTS final_space_db ;\nUSE final_space_db ;\n\nCREATE TABLE IF NOT EXISTS final_space_db.Location (\n    Location_id INT NOT NULL AUTO_INCREMENT,\n    Location_Name VARCHAR(45) NOT NULL,\n    Location_Type VARCHAR(45) NOT NULL,\n    PRIMARY KEY (Location_id)\n);\n\nCREATE TABLE IF NOT EXISTS final_space_db.Specie (\n    Specie_id INT NOT NULL AUTO_INCREMENT,\n    Specie_Name VARCHAR(45) NOT NULL,\n    PRIMARY KEY (Specie_id)\n);\n\nCREATE TABLE IF NOT EXISTS final_space_db.Character (\n    Character_id INT NOT NULL AUTO_INCREMENT,\n    Name VARCHAR(45) NOT NULL,\n    Origin INT NULL,\n    Specie INT NULL,\n    PRIMARY KEY (Character_id),\n    FOREIGN KEY (Origin)\n        REFERENCES final_space_db.Location (Location_id),\n    FOREIGN KEY (Specie)\n        REFERENCES final_space_db.Specie (Specie_id)\n);\n\nINSERT INTO final_space_db.Location( \n  Location_id,\n  Location_Name,\n  Location_Type\n  )\n    VALUES\n      (1, 'Earth', 'Planet'),\n      (2, 'Final Space', 'Dimension'),\n      (3, 'Tera Con Prime', 'Destroyed planet'),\n      (4, 'Inner Space', 'Dimension'),\n      (5, 'Yarno', 'Planet'),\n      (6, 'Dark Zone', 'Black hole'),\n      (7, 'Deathcropolis', 'Gladiatorial Colosseum'),\n      (8, 'Lazarus Trap', 'Trap'),\n      (9, 'The Order of the Twelve', 'Temple'),\n      (10, 'Serepentis', 'Planet'),\n      (11, 'Ventrexia', 'Planet'),\n      (12, 'Invictus Prison', 'Dimension'),\n      (13, 'Tryvuulian', 'Planet'),\n      (14, 'Hatched', 'Planet');\n    \nINSERT INTO final_space_db.Specie(Specie_id, Specie_Name)\n  VALUES\n    (1, 'Human'),\n    (2, 'Ventrexian'),\n    (3, 'Robot'),\n    (4, 'Serepentian'),\n    (5, 'Tryvuulian'),\n    (6, 'Artificial Intelligence'),\n    (7, 'Titan'),\n    (8, 'Cosmic Entity'),\n    (9, 'Energy being'),\n    (10, 'Alien'),\n    (11, 'Hooblot'),\n    (12, 'Cyborg'),\n    (13, 'Fire Snake'),\n    (14, 'Tiger Tiger');\n    \nINSERT INTO final_space_db.Character(\n  Character_id,\n  Name,\n  Origin,\n  Specie\n)\n  VALUES\n    (1, 'Gary Goodspeed', 1, 1),\n    (2, 'Mooncake', NULL, NULL),\n    (3, 'Quinn Ergon', 1, 1),\n    (4, 'Little Cato', 11, 2),\n    (5, 'Avocato', 11, 2),\n    (6, 'KVN', 1, 3),\n    (7, 'Ash Graven', 10, 4),\n    (8, 'Fox', 13, 5),\n    (9, 'H.U.E', NULL, 6),\n    (10, 'Tribore Menendez',14, NULL),\n    (11, 'Clarence', NULL, NULL),\n    (12, 'Biskit', NULL, 14),\n    (13, 'Quatronostro Menendez', 14, NULL),\n    (14, 'Lord Commander', NULL, NULL),\n    (15, 'Sheryl Goodspeed', 1, 1),\n    (16, 'Bolo', 2, 7),\n    (17, 'Invictus', 2, 7),\n    (18, 'John Goodspeed', 1, 1),\n    (19, 'A.V.A', NULL, 6),\n    (20, 'Evra', 2, 9),\n    (21, 'Queen of Ventrexia', 11, 2),\n    (22, 'King of Ventrexia', 11, 2),\n    (23, 'Mega-KVN', 1, 3),\n    (24, 'Melanie Dewinter',3, 11),\n    (25, 'Harp Graven', 10, 4),\n    (26, 'Shannon Thunder', 1, 1),\n    (27, 'David Dewinter', 3, 11),\n    (28, 'Meowlapeño', 3, 2),\n    (29, 'Fraskenhaur', NULL, 10),\n    (30, 'Oreskis\"',2, 7 );\n    \n```\n\u0026nbsp;\n\n**1** - Escreva uma query que retorne **uma coluna** com o **nome dos personagens** e **uma coluna** com o **nome de sua espécie**.  \n*Dica: Quando queremos usar uma palavra reservada do mysql para referenciar a uma tabela, devemos colocar a palavra entre o acento grave (`) .  Por exemplo, o banco de dados fornecido para os exercícios de fixação possui uma tabela com o nome de Character, uma palavra reservada, então ao referencia-lá   escrevemos:*  \u0026#96;*Character*\u0026#96;.\n\n**2** - Escreva uma query que retorne **uma coluna** com os **nomes dos personagens** e **uma coluna** com o **nome do seu local de origem**.\n\n**3** - Agora, retorne o **nome do personagem**, **sua espécie** e o **lugar de origem** em uma query.\n\n**4** - Escreva uma query que retornará **uma coluna** com o **nome da espécie**, nomeie como `Especie,` e **uma coluna** com a **quantidade de personagens daquela espécie**, nomeie como `Quantidade`. Por fim,  **organize a lista** de forma **ascendente** pela quantidade.\n\n**5** - Escreva uma query que retorne **uma coluna** com o **nome do Local**, nomeie como `Local de origem,` e **uma coluna** com **quantidade de personagens** que tenham origem desse local, nomeie como `Quantidade`. Por fim, **organize a lista** de forma **decrescente** pela quantidade.\n\n**6** - Escreva uma query que **retorne os nomes dos personagens** que tem como **local de origem 'Earth'**. Por fim, **organize** os nomes em **ordem alfabética**.\n\n**7** - Escreva uma query que retorne **nome** e **local de origem** de todos personagens que são **de espécie 'Ventrexian'**. Por fim, **ordene** os nome de forma **alfabética-invertida**.\n\n---\n\u0026nbsp;\n\n# LEFT JOIN e RIGHT JOIN\n\nPara entender LEFT JOIN e RIGHT JOIN, observe as duas tabelas a seguir: \n\n**Tabela Cliente:** \n| Cliente_id | Nome               |\n| :---------:| :----------------: |\n| 1          | Sheldon Cooper     |\n| 2          | Amy Farrah Fowler  |\n| 3          | Leonard Hofstadter |\n| 4          | Bernadette Maryann |\n\n\n\n**Tabela Funcionario:** \n| Funcionario_id | Nome               |\n| :-------------:| :----------------: |\n| 1              | Stuart Bloom       |\n| 2              | Sheldon Cooper     |\n| 3              | Leonard Hofstadter |\n| 4              | Raj Koothrappali   |\n\nNote que algumas pessoas que estão na tabela Cliente, também estão na tabela Funcionário.\n\nPara identificar essas pessoas basta utilizar o INNER JOIN:\n\n\u0026nbsp;\n\n```mysql\nUSE ComicCenter;\n\nSELECT \n    C.Cliente_id, C.Nome, F.Funcionario_id, F.Nome\nFROM\n    Cliente AS C\n        INNER JOIN\n    Funcionario AS F ON C.Nome = F.Nome;\n\n```\n\u0026nbsp;\n\n\n| Cliente_id | Nome               | Funcionario_id | Nome               |\n| :---------:| :----------------: | :-------------:| :----------------: |\n| 1          | Sheldon Cooper     | 2              | Sheldon Cooper     |\n| 3          | Leonard Hofstadter | 3              | Leonard Hofstadter |\n\n\u0026nbsp;\n\nObeserve que o INNER JOIN retornou apenas as pessoas que estão nas duas tabelas.\n\n## Situação a qual será aplicado o LEFT JOIN\n\nAgora, imagine que você precise de uma consulta que retorne os dados de todas as pessoas clientes, pessoa funcionaria ou não.  Caso seja pessoa funcionaria, você deseja que os dados da tabela Funcionario dessa pessoa sejam exibidos.  \n\n## Usando o LEFT JOIN\n\nPara essa situação é utilizado o LEFT JOIN, pois manterá TODOS os dados da **primeira tabela** declarada, mesmo que não exista na segunda tabela, sendo preenchido com a palavra NULL.  \n*(O posicionamento das colunas não influenciam, apenas a ordem em que as tabelas são declaradas no LEFT JOIN)*\n\n\u0026nbsp;\n\n```mysql\nUSE ComicCenter;\n\nSELECT \n    C.Cliente_id, C.Nome, F.Funcionario_id, F.Nome\nFROM\n    Cliente AS C\n        LEFT JOIN\n    Funcionario AS F ON C.Nome = F.Nome;\n\n```\n\u0026nbsp;\n\n| Cliente_id | Nome               | Funcionario_id | Nome               |\n| :---------:| :----------------: | :-------------:| :----------------: |\n| 1          | Sheldon Cooper     | 2              | Sheldon Cooper     |\n| 2          | Amy Farrah Fowler  | NULL           | NULL               |\n| 3          | Leonard Hofstadter | 3              | Leonard Hofstadter |\n| 4          | Bernadette Maryann | NULL           | NULL               |\n\n\u0026nbsp;\n\n## Situação a qual será aplicado o RIGHT JOIN\n\nImagine que você queira que sua consulta retorne os dados de todas as pessoas funcionárias, pessoa cliente ou não. Caso seja pessoa cliente, você deseja que os dados da tabela Ciente dessa pessoa sejam exibidos.\n\n## Usando o RIGHT JOIN\n\nPara essa situação pode ser utilizado o RIGHT JOIN, pois ele manterá TODOS os dados da **segunda tabela** declarada, mesmo que algum dado não exista na primeira tabela, sendo preenchido com a palavra NULL. \n*(O posicionamento das colunas não influenciam, apenas a ordem em que as tabelas são declaradas no RIGHT JOIN)*\n\n\u0026nbsp;\n\n```mysql\nUSE ComicCenter;\n\nSELECT \n    C.Cliente_id, C.Nome, F.Funcionario_id, F.Nome\nFROM\n    Cliente AS C\n        RIGHT JOIN\n    Funcionario AS F ON C.Nome = F.Nome;\n\n```\n\n\u0026nbsp;\n\n| Cliente_id | Nome               | Funcionario_id | Nome               |\n| :---------:| :----------------: | :-------------:| :----------------: |\n| NULL       | NULL               | 1              | Stuart Bloom       |\n| 1          | Amy Farrah Fowler  | 2              | Sheldon Cooper     |\n| 3          | Leonard Hofstadter | 3              | Leonard Hofstadter |\n| NULL       | NULL               | 4              | Raj Koothrappali   |\n\n\u0026nbsp;\n\n## Usando IFNULL\n\nSe você deseja substituir os valores NULL por outro valor, basta utilizar a função IFNULL. Você deve passar a coluna como primeiro parâmetro e o valor a ser atribuído para os campos preenchidos com  NULL, como segundo parâmetro. Segue alguns exemplos: \n\n### Utilizando IFNULL no LEFT JOIN\n\n```mysql\nUSE ComicCenter;\n\nSELECT \n    C.Cliente_id,\n    C.Nome,\n    IFNULL(F.Funcionario_id, 'inexistente') AS Funcionario_id,\n    IFNULL(F.Nome, 'não funcionario') AS Nome\nFROM\n    Cliente AS C\n        LEFT JOIN\n    Funcionario AS F ON C.Nome = F.Nome;\n\n```\n\u0026nbsp;\n\n| Cliente_id | Nome               | Funcionario_id | Nome               |\n| :---------:| :----------------: | :-------------:| :----------------: |\n| 1          | Sheldon Cooper     | 2              | Sheldon Cooper     |\n| 2          | Amy Farrah Fowler  | inexistente    | não funcionario    |\n| 3          | Leonard Hofstadter | 3              | Leonard Hofstadter |\n| 4          | Bernadette Maryann | inexistente    | não funcionario    |\n\n\u0026nbsp;\n\n### Utilizando IFNULL no RIGHT JOIN\n\n```mysql\nUSE ComicCenter;\n\nSELECT \n    IFNULL(C.Cliente_id, 'inexistente') AS Cliente_id,\n    IFNULL(C.Nome, 'não cliente') AS Nome,\n    F.Funcionario_id,\n    F.Nome\nFROM\n    Cliente AS C\n        RIGHT JOIN\n    Funcionario AS F ON C.Nome = F.Nome;\n\n```\n\u0026nbsp;\n\n| Cliente_id  | Nome               | Funcionario_id | Nome               |\n| :----------:| :----------------: | :-------------:| :----------------: |\n| inexistente | não cliente        | 1              | Stuart Bloom       |\n| 1           | Amy Farrah Fowler  | 2              | Sheldon Cooper     |\n| 3           | Leonard Hofstadter | 3              | Leonard Hofstadter |\n| inexistente | não cliente        | 4              | Raj Koothrappali   |\n\n---\n\u0026nbsp;\n\n## Exercícios de Fixação\n\nUsando o banco de dados final_space_db, resolva os exercicios abaixo:\n\n**1** - Escreva uma query que exiba os **nomes de todos os personagens e sua espécie**. \n*Observação: O nome de todos os personagens deve aparecer,  inclusive os que não tem uma espécie definida.*\n\n**2** - Escreva uma query que exiba os **nomes de todos os personagens** e seu **local de origem**.\n*Observação: O nome de todos os personagens deve aparecer, inclusive os que não tem um local de origem definido.*\n\n**3** - Escreva uma query que mostre **nome do personagem** e  **nome de todas as espécies**, mesmo as que não possuem personagem com aquela espécie.\n\n**4** - Escreva uma query que retorne **nome do personagem** e  **nome de todos locais de origem**, inclusive os personagens sem origem desse local.\n\n**5** - Escreva uma query que exiba **nomes de todos os personagens** e **sua espécie**. Se o personagem não tiver espécie definida, o campo da espécie deverá mostrar 'Unknown'. Por fim, nomeie a coluna espécie de 'Specie' e a coluna nomes dos personagens de 'Character'.\n\n**6** - Escreva uma query que retorne **nome do personagem**  e  **nome de todos locais de origem**. Nomeie  coluna nome do personagem de 'Character' e coluna do local de 'Local'. \nCaso não houver personagem com origem do local, o campo que apresentaria no nome do personagem deve mostrar 'Unknown'.\n\n---\n\u0026nbsp;\n\n\n# SELF JOIN\n\n## Situação a qual será aplicado o SELF JOIN\n\nPara entender melhor o SELF JOIN, utilizaremos a seguinte tabela:\n\n**Tabela Revista:**\n| Revista_id | Titulo           | Editora   |\n| :--------- | :--------------- | :-------- |\n| 1          | Vingadores       | Marvel    |\n| 2          | Liga da Justiça  | DC Comics |\n| 3          | Batman           | DC Comics |\n| 4          | X-Men            | Marvel    |\n| 5          | Homem Aranha     | Marvel    |\n| 6          | Mulher Maravilha | DC Comics |\n\nAgora, imagine que na sua consulta você precisará exibir todas as revistas da mesma editora para cada revista presente na tabela.\n\n## Usando o SELF JOIN\n\nPara situações como essa pode ser usado o SELF JOIN, pois você irá **relacionar informações de uma tabela com informações contidas na mesma**.\nDiferente dos outros JOINS o termo SELF JOIN, não precisará ser declarado na query. Basta declarar a mesma tabela duas vezes separando por uma virgula e usar alias(AS) diferente para as duas, usando um WHERE para informar os dados a serem relacionados.\n\n\u0026nbsp;\n\n```mysql\nUSE ComicCenter;\n\nSELECT \n    R1.Titulo, R1.Editora, R2.Titulo, R2.Editora\nFROM\n    Revista AS R1,\n    Revista AS R2\nWHERE\n    R1.Editora = R2.Editora;\n\n```\n\u0026nbsp;\n\n| Titulo           | Editora   | Titulo           | Editora   |\n| :--------------- | :-------- | :--------------- | :-------- |\n| Homem Aranha     | Marvel    | Vingadores       | Marvel    |\n| X-Men            | Marvel    | Vingadores       | Marvel    |\n| Vingadores       | Marvel    | Vingadores       | Marvel    |\n| Mulher Maravilha | DC Comics | Liga da Justiça  | DC Comics |\n| Batman           | DC Comics | Liga da Justiça  | DC Comics |\n| Liga da Justiça  | DC Comics | Liga da Justiça  | DC Comics |\n| Mulher Maravilha | DC Comics | Batman           | DC Comics |\n| Batman           | DC Comics | Batman           | DC Comics |\n| Liga da Justiça  | DC Comics | Batman           | DC Comics |\n| Homem Aranha     | Marvel    | X-Men            | Marvel    |\n| X-Men            | Marvel    | X-Men            | Marvel    |\n| Vingadores       | Marvel    | X-Men            | Marvel    |\n| Homem Aranha     | Marvel    | Homem Aranha     | Marvel    |\n| X-Men            | Marvel    | Homem Aranha     | Marvel    |\n| Vingadores       | Marvel    | Homem Aranha     | Marvel    |\n| Mulher Maravilha | DC Comics | Mulher Maravilha | DC Comics |\n| Batman           | DC Comics | Mulher Maravilha | DC Comics |\n| Liga da Justiça  | DC Comics | Mulher Maravilha | DC Comics |\n\n\u0026nbsp;\n\nNote que os Títulos que repetiram na mesma linha, ou seja ele se comparou consigo mesmo, isso pode ser corrigido através do **WHERE**.\n\n\u0026nbsp;\n\n```mysql\nUSE ComicCenter;\n\nSELECT \n    R1.Titulo, R1.Editora, R2.Titulo, R2.Editora\nFROM\n    Revista AS R1,\n    Revista AS R2\nWHERE\n    R1.Editora = R2.Editora\n        AND R1.Titulo \u003c\u003e R2.Titulo;\n```\n\u0026nbsp;\n\n| Titulo           | Editora   | Titulo           | Editora   |\n| :--------------- | :-------- | :--------------- | :-------- |\n| Homem Aranha     | Marvel    | Vingadores       | Marvel    |\n| X-Men            | Marvel    | Vingadores       | Marvel    |\n| Mulher Maravilha | DC Comics | Liga da Justiça  | DC Comics |\n| Batman           | DC Comics | Liga da Justiça  | DC Comics |\n| Mulher Maravilha | DC Comics | Batman           | DC Comics |\n| Liga da Justiça  | DC Comics | Batman           | DC Comics |\n| Homem Aranha     | Marvel    | X-Men            | Marvel    |\n| Vingadores       | Marvel    | X-Men            | Marvel    |\n| X-Men            | Marvel    | Homem Aranha     | Marvel    |\n| Vingadores       | Marvel    | Homem Aranha     | Marvel    |\n| Batman           | DC Comics | Mulher Maravilha | DC Comics |\n| Liga da Justiça  | DC Comics | Mulher Maravilha | DC Comics |\n\n\u0026nbsp;\n\n## Exercícios de Fixação\n\nUsando o banco de dados final_space_db, resolva os exercicios abaixo:\n\n**1** - Escreva uma query que exiba **nomes dos personagens** em uma coluna e **nomes dos personagens** com **mesmo local de origem** na coluna ao lado;\n\n**2** - Escreva uma query que exiba **nomes dos personagens** em uma coluna e **nomes dos personagens** com **mesmo local de origem** na coluna ao lado. Agora, sem que nome do personagem apareça duas vezes na mesma linha.\n\n**3** - Escreva uma query que exiba **nomes dos personagens** em uma coluna e **nomes dos personagens da mesma espécie** na coluna ao lado.\n\n**4** - Escreva uma query que exiba **nomes dos personagens** em uma coluna e **nomes dos personagens da mesma espécie** na coluna ao lado. Agora, sem que nome do personagem apareça duas vezes na mesma linha.\n\n---\n\u0026nbsp;\n\n# Vamos praticar!\n\n## Exercícios\n\nPara resolver os exercícios, será o usado o banco de dados academia:\n\n```mysql\nDROP SCHEMA IF EXISTS academia ;\n\nCREATE SCHEMA IF NOT EXISTS academia ;\nUSE academia ;\n\nCREATE TABLE IF NOT EXISTS academia.Endereco (\n    Endereco_ID INT NOT NULL,\n    Logradouro VARCHAR(100) NOT NULL,\n    Numero INT NOT NULL,\n    Bairro VARCHAR(100) NOT NULL,\n    CEP INT NOT NULL,\n    PRIMARY KEY (Endereco_ID)\n);\n\nCREATE TABLE IF NOT EXISTS academia.Telefone (\n    Telefone_ID INT NOT NULL,\n    Telefone_Contato VARCHAR(45) NULL,\n    Telefone_Emergencia VARCHAR(45) NULL,\n    PRIMARY KEY (Telefone_ID)\n);\n  \nCREATE TABLE IF NOT EXISTS academia.Plano (\n    Plano_ID INT NOT NULL,\n    Nome_plano VARCHAR(45) NOT NULL,\n    Valor DOUBLE NOT NULL,\n    PRIMARY KEY (Plano_ID)\n);\n\nCREATE TABLE IF NOT EXISTS academia.Horario (\n    Horario_ID INT NOT NULL,\n    Periodo VARCHAR(45) NOT NULL,\n    PRIMARY KEY (Horario_ID)\n);\n\nCREATE TABLE IF NOT EXISTS academia.Modalidade (\n    Modalidade_ID INT NOT NULL,\n    Nome_modalidade VARCHAR(45) NOT NULL,\n    PRIMARY KEY (Modalidade_ID)\n);\n\nCREATE TABLE IF NOT EXISTS academia.Pessoa_Associada (\n    Pessoa_Associada_ID INT NOT NULL AUTO_INCREMENT,\n    Nome VARCHAR(45) NOT NULL,\n    Sobrenome VARCHAR(45) NOT NULL,\n    Endereco_ID INT NOT NULL,\n    Telefone_ID INT NULL,\n    Plano_ID INT NOT NULL,\n    PRIMARY KEY (Pessoa_Associada_ID),\n    FOREIGN KEY (Endereco_ID)\n        REFERENCES academia.Endereco (Endereco_ID),\n    FOREIGN KEY (Telefone_ID)\n        REFERENCES academia.Telefone (Telefone_ID),\n    FOREIGN KEY (Plano_ID)\n        REFERENCES academia.Plano (Plano_ID)\n);\n\nCREATE TABLE IF NOT EXISTS academia.Pessoa_Treinadora (\n    Pessoa_Treinadora_ID INT NOT NULL,\n    Nome VARCHAR(45) NOT NULL,\n    Sobrenome VARCHAR(45) NOT NULL,\n    Endereco_ID INT NOT NULL,\n    Telefone_ID INT NULL,\n    PRIMARY KEY (Pessoa_Treinadora_ID),\n    FOREIGN KEY (Endereco_ID)\n        REFERENCES academia.Endereco (Endereco_ID),\n    FOREIGN KEY (Telefone_ID)\n        REFERENCES academia.Telefone (Telefone_ID)\n);\n\nCREATE TABLE IF NOT EXISTS academia.Treino (\n    Pessoa_Associada_ID INT NOT NULL,\n    Modalidade_ID INT NOT NULL,\n    Horario_ID INT,\n    PRIMARY KEY (Pessoa_Associada_ID , Modalidade_ID),\n    FOREIGN KEY (Pessoa_Associada_ID)\n        REFERENCES academia.Pessoa_Associada (Pessoa_Associada_ID),\n    FOREIGN KEY (Modalidade_ID)\n        REFERENCES academia.Modalidade (Modalidade_ID),\n    FOREIGN KEY (Horario_ID)\n        REFERENCES academia.Horario (Horario_ID)\n);\n\nCREATE TABLE IF NOT EXISTS academia.Aula (\n    Pessoa_Treinadora_ID INT NOT NULL,\n    Modalidade_ID INT NOT NULL,\n    Horario_ID INT NOT NULL,\n    PRIMARY KEY (Pessoa_Treinadora_ID , Modalidade_ID , Horario_ID),\n    FOREIGN KEY (Pessoa_Treinadora_ID)\n        REFERENCES academia.Pessoa_Treinadora (Pessoa_Treinadora_ID),\n    FOREIGN KEY (Horario_ID)\n        REFERENCES academia.Horario (Horario_ID),\n    FOREIGN KEY (Modalidade_ID)\n        REFERENCES academia.Modalidade (Modalidade_ID)\n);\n\nINSERT INTO academia.Plano ( Plano_ID, Nome_plano, Valor)\n  VALUES \n    (1, 'Mensal', 90.00),\n    (2, 'Trimestral', 210.00),\n    (3, 'Semestral', 380.00),\n    (4, 'Anual', 720.00);\n    \nINSERT INTO academia.Horario (Horario_ID, Periodo)\n  VALUES \n    (1, 'Manhã'),\n    (2, 'Tarde'),\n    (3, 'Noite');\n    \nINSERT INTO academia.Modalidade (Modalidade_ID, Nome_modalidade)\n  VALUES\n    (1, 'Musculação'),\n    (2, 'Natação'),\n    (3, 'Dança'),\n    (4, 'Boxe'),\n    (5, 'Aeróbica');\n    \nINSERT INTO academia.Endereco (\n  Endereco_ID, \n  Logradouro,\n  Numero, \n  Bairro, \n  CEP\n) \n  VALUES\n    (1, 'Rua Visconde de Parnaíba', 355, 'Brás', 03045000),\n    (2, 'Travessa Capachos II', 659, 'Jardim Célia', 08191331),\n    (3, 'Rua Domenico Venturi', 365, 'Jardim Patente', 04243040),\n    (4, 'Rua Varadouro', 100, 'Jardim Soares', 03919040),\n    (5, 'Rua Cardoso de Almeida', 175, 'Sumaré' , 01251001),\n    (6, 'Rua Fábio Monte Negro', 928, 'Cidade Nova América', 04897500),\n    (7, 'Praça Eduardo Berlendis', 237, 'Jardim Lourdes', 08452445),\n    (8, 'Rua Doutor Antônio Ruggiero Júnior', 782, 'Jardim Monte Alegre', 05165120),\n    (9, 'Rua Antônio Romero Fernandes', 919, 'Vila Alpina', 03208050),\n    (10, 'Rua Estado de Rondônia', 180, 'Jardim Cidade Pirituba', 02945150),\n    (11, 'Rua Júlio Brandão', 617, 'Jardim Porteira Grande', 03917040),\n    (12, 'Rua Ipacaraí', 581, 'Perdizes', 05011020),\n    (13, 'Rua Professor Arnaldo João Semeraro', 941, 'Jardim Santa Emília', 04184900),\n    (14, 'Rua Carlos Motta Marchi', 994, 'Parque Bristol', 04193210),\n    (15, 'Rua Doutor Mello Nogueira', 639, 'Vila Baruel', 02510040),\n    (16, 'Rua José Maria Lisboa 480', 673, 'Jardim Paulista', 01423908),\n    (17, 'Rua Jaguapeba', 672, 'Conjunto Habitacional Fazenda do Carmo', 08421521),\n    (18, 'Rua José Henrique Tomaz de Lima', 958, 'Vila Verde', 08230850),\n    (19, 'Travessa Paulo Leitão', 717, 'Capão Redondo', 05866003),\n    (20, 'Rua Equador', 198, 'Jardim América', 01436080),\n    (21, 'Avenida Brigadeiro Luís Antônio', 452, 'Jardim Paulista', 01402002),\n    (22, 'Rua Doutor Raul Manso Sayão Filho', 688, 'Cidade São Mateus', 03965010),\n    (23, 'Rua Edgar Codazzi', 309, 'Cidade Antônio Estevão de Carvalho', 08225280),\n    (24, 'Rua Piracanjuba', 805, 'Vila Carbone', 02750040),\n    (25, 'Rua Canori', 910, 'Jardim Olinda', 05765170),\n    (26, 'Passagem Sebastião Festa', 870, 'Conjunto Promorar Estrada da Parada', 02873710),\n    (27, 'Avenida General Charles de Gaulle', 380, 'Parque São Domingos', 05124901),\n    (28, 'Rua Pepita de Fogo', 317, 'Jardim São Carlos (Zona Leste)', 08062740),\n    (29, 'Rua Paulo da Silva', 793, 'Jardim do Lago', 05397110),\n    (30, 'Praça Daniel Berciano Villasol', 291, 'Perdizes', 05009050),\n    (31, 'Rua Doutor Sílvio Dante Bertacchi', 154, 'Vila Sônia', 05625001);\n\nINSERT INTO academia.Telefone (\n  Telefone_ID,\n  Telefone_Contato,\n  Telefone_Emergencia\n) \n  VALUES\n    (1, '(11)997016542', '(11)36178405'),\n    (2, '(11)999124939', NULL),\n    (3, '(11)987492668', '(11)36215274'),\n    (4, '(11)996133401', '(11)38382770'),\n    (5, '(11)981875877', '(11)26640540'),\n    (6, '(11)991828746', '(11)26074255'),\n    (7, '(11)996702111', '(11)35659534'),\n    (8, '(11)988589105', NULL),\n    (9, '(11)993762497', '(11)28598239'),\n    (10, '(11)997629440', '(11)26449065'),\n    (11, '(11)982903669', '(11)29823025'),\n    (12, '(11)981651295', '(11)27846478'),\n    (13, '(11)29544808', NULL),\n    (14, '(11)981126496', '(11)26736144'),\n    (15, '(11)982591935', '(11)25415453'),\n    (16, '(11)993509407', '(11)25945608'),\n    (17, '(11)994293997', NULL),\n    (18, '(11)998975027', '(11)26611809'),\n    (19, '(11)993792683', '(11)26127452'),\n    (20, '(11)981055416', '(11)36162485'),\n    (21, '(11)996293237', '(11)35919556'),\n    (22, '(11)991352745', '(11)29929050'),\n    (23, '(11)993498573', '(11)38092873'),\n    (24, '(11)983345058', '(11)26853653'),\n    (25, '(11)985477714', '(11)39195446'),\n    (26, '(11)993912951', '(11)39126508'),\n    (27, '(11)996175387', '(11)39789749'),\n    (28, '(11)985190150', '(11)39287080'),\n    (29, '(11)989988795', '(11)38647391'),\n    (30, '(11)987760331', '(11)35953526'),\n    (31, '(11)986352698', '(11)27106247'),\n    (32, '(11)984650287', '(11)36072875'),\n    (33, '(11)985429620', '(11)28698585'),\n    (34, '(11)996005453', '(11)27739729'),\n    (35, '(11)982872235', '(11)28210058');\n\t\t\t\n\nINSERT INTO  academia.Pessoa_Associada (\n  Pessoa_Associada_ID,\n  Nome,\n  Sobrenome,\n  Endereco_ID,\n  Telefone_ID,\n  Plano_ID\n)\n  VALUES\n    (1, 'Ayla', 'Cunha', 9, 11, 1),\n    (2, 'Catarina', 'Almeida', 10, 12, 1),\n    (3, 'Heitor', 'Rocha', 11, 13, 3),\n    (4, 'Noah', 'Soares', 12, 14, 3 ),\n    (5, 'Anderson', 'Silva', 13, 15, 3),\n    (6, 'Luiza', 'Ramos', 14, 16, 2),\n    (7, 'Bárbara', 'Soares', 12, 17, 1),\n    (8, 'Nair', 'Ramos', 15, 18, 2),\n    (9, 'André', 'Silva', 16, 19, 2),\n    (10, 'Yuri', 'Pereira', 17, 20, 1),\n    (11, 'José', 'Antunes', 18, NULL, 2),\n    (12, 'Betina', 'Texeira', 19, 22, 3),\n    (13, 'Antônia', 'Souza', 20, 23, 3),\n    (14, 'Antônio', 'Nunes', 21, 24, 4),\n    (15, 'Vitória', 'Santos', 22, 25, 1),\n    (16, 'Emily', 'Oliveira', 23, 26, 1),\n    (17, 'Reginaldo', 'Rocha', 24, 27, 2),\n    (18, 'Carla', 'Perez', 25, 28, 1),\n    (20, 'Joana', 'Gonçalves', 26, 29, 1),\n    (21, 'Paula', 'Costa', 27, 30, 3),\n    (22, 'Sonia', 'Nunes', 28, 31, 1),\n    (23, 'Francisco', 'Rodrigues', 29, 32, 1),\n    (24, 'Alessandra', 'Rodrigues', 29, 33, 1),\n    (25, 'Cauê', 'Costa', 30, 34, 2),\n    (26, 'Marcelo', 'Souza', 15, 21, 3),\n    (27, 'Angela', 'Pereira', 17, NULL, 1),\n    (29, 'Saulo', 'Gonçalves', 26, NULL, 3),\n    (30, 'Maria', 'Silva', 13, NULL, 1),\n    (31, 'Livia', 'Almeida', 10, NULL, 1),\n    (32, 'Oswaldo', 'Garibaldo', 29, NULL, 3);\n\n\t\nINSERT INTO  academia.Pessoa_Treinadora (\n  Pessoa_Treinadora_ID,\n  Nome,\n  Sobrenome,\n  Endereco_ID,\n  Telefone_ID\n)\n  VALUES\n    (1, 'Jorge', 'Galvão', 1, 1),\n    (2, 'Sophia', 'Galvão', 1, 2),\n    (3, 'Camila', 'Cunha', 2, 3),\n    (4, 'Mário', 'Peixoto', 3, 4),\n    (5, 'Gustavo', 'Bernades', 4, 5),\n    (6, 'Aline', 'Oliveira', 5, 6),\n    (7, 'Beatriz', 'Oliveira', 6, 7),\n    (8, 'Maya', 'Galvão', 1, 8),\n    (9, 'Marcos', 'Fernades', 7, 9),\n    (10, 'Vinicios', 'Morais', 8, 10),\n    (11, 'Laura', 'Fernandes', 31, 35);\n\n\nINSERT INTO academia.Aula (\n  Pessoa_Treinadora_ID,\n  Modalidade_ID,\n  Horario_ID\n) \n  VALUES\n    (1, 1, 1),\n    (6, 1, 2),\n    (1, 1, 3),\n    (2, 2, 1),\n    (4, 2, 2),\n    (2, 2, 3),\n    (3, 3, 1),\n    (10, 3, 2),\n    (3, 3, 3),\n    (5, 4, 1),\n    (7, 4, 2),\n    (5, 4, 3),\n    (6, 5, 1),\n    (8, 5, 2),\n    (6, 5, 3);\n\nINSERT INTO academia.Treino (\n  Pessoa_Associada_ID,\n  Modalidade_ID,\n  Horario_ID\n)\n  VALUES\n    (1, 3, 1),\n    (2, 2, 3),\n    (3, 1, NULL),\n    (4, 1, 2),\n    (5, 4, NULL),\n    (6, 4, 1),\n    (7, 2, 3),\n    (8, 5, 1),\n    (9, 4, 2),\n    (10, 1, 2),\n    (11, 4, 3),\n    (12, 1, NULL),\n    (13, 5, 3),\n    (14, 1, 1),\n    (15, 2, 3),\n    (16, 3, 1),\n    (17, 4, 2),\n    (18, 3, NULL),\n    (20, 1, 3),\n    (21, 4, 1),\n    (22, 2, 2),\n    (23, 4, NULL),\n    (24, 2, 3),\n    (25, 2, NULL),\n    (26, 3, 3),\n    (27, 5, NULL),\n    (29, 5, 3),\n    (30, 5, 1),\n    (31, 2, 3),\n    (32, 1, 1);\n\n```\n\u0026nbsp;\n\n**1** - Crie uma query que retorne **uma coluna** nomeada como 'Nome Completo' com o **nome completo** das pessoas associadas a academia, **uma coluna** com o **logradouro**  e outra com o **número**. Utilize as tabelas Pessoa_Associada e Endereco.\n\n\u0026nbsp;\n\n**2** - Escreva uma query que retorne **uma coluna** nomeada como 'Nome Completo' com o **nome completo** das pessoas associadas a academia, **uma coluna** com **o nome do plano** dessa pessoa. Utilize as tabelas Pessoa_Associada e Plano.\n\n\u0026nbsp;\n\n**3** - Escreva uma query que retorne **uma coluna** nomeada como 'Nome Completo' com o **nome completo** das pessoas associadas a academia, **uma coluna** com **telefone** e outra com o **cep** dessa pessoa. Utilize as tabelas Pessoa_Associada, Telefone e Endereco.\n\n\u0026nbsp;\n\n**4** - Escreva uma query que retorne **uma coluna** nomeada como 'Nome Completo' com o **nome completo** das pessoas associadas a academia, **uma coluna** com **telefone de contato** e outra com o **cep** dessa pessoa. Utilize as tabelas Pessoa_Associada, Telefone e Endereco.\n\n\u0026nbsp;\n\n**5** - Crie uma query que retorne **uma coluna** nomeada como 'Nome Completo' com o **nome completo** de **todas** as pessoas associadas a academia, e **uma coluna** com o **telefone de emergência** dessa pessoa, caso a pessoa não tiver telefone de emergência, exiba 'PEDENTE', nomeie essa coluna como 'Telefone de Emergência'. Utilize as tabelas Pessoa_Associada e Telefone.\n\n\u0026nbsp;\n\n**6** - Crie uma query que retorne **duas coluna** com os **nomes** das pessoas associadas que possuem o mesmo **endereço**. Porém, não deixe que o mesmo nome se repita na mesma linha.\n\n\u0026nbsp;\n\n**7** - Crie uma query que retorne **duas coluna** com os **nomes** das pessoas treinadoras que possuem o mesmo **endereço**. Porém, não deixe que o mesmo nome se repita na mesma linha.\n\n\u0026nbsp;\n\n**8** - Crie uma query que retorne **uma coluna** com o **nome dos planos** outra que com a **quantidade** de pessoas associadas que possuem esse plano, nomeie como 'Pessoas Inclusas'.\n\n\u0026nbsp;\n\n**9** - Crie uma query que retorne **uma coluna** nomeada como 'Nome Completo', com o **nome completo** das pessoas associadas a academia, e **uma coluna** com o **período** dessa pessoa. Utilize as tabelas Pessoa_Associada, Treino e Horario.\n\n\u0026nbsp;\n\n**10** - Crie uma query que retorne **uma coluna** nomeada como 'Nome Completo' com o **nome completo** de **todas** as pessoas associadas a academia e **uma coluna** com o nome 'Horario', mostrando o **período** dessa pessoa. Caso a pessoa não tiver período estipulado, exiba 'LIVRE'. Utilize as tabelas Pessoa_Associada, Aula e Horario.\n\n\u0026nbsp;\n\n---\n\n## Bonus\n\nPara resolver os exercícios bonus use o banco de dados academia.\n\n**1** - Mostre o **nome da pessoa treinadora** e a **modalidade** em que atua, de modo que a mesma informação não se repita na tabela. Use as tabelas Pessoa_Treinadora, Aula, Modalidade.\n\n\u0026nbsp;\n\n**2** - Retorne o **nome da pessoa treinadora** e o **período** em que atua. Utilize as tabelas Pessoa_Treinadora, Aula, Horario.\n\n\u0026nbsp;\n\n**3** - Retorne o **nome de todas pessoas treinadoras** e uma coluna com o nome 'Horario', mostrando o **período** em que a pessoa atua. Caso não tenha um horário estipulado, mostre 'EVENTUAL'. Por fim, ordene em forma **alfabética-invertida** pelo nome da pessoa. Utilize as tabelas Pessoa_Treinadora, Aula, Horario.\n\n\u0026nbsp;\n\n**4** - Retorne o **nome da modalidade** e a quantidade de pessoas que a praticam, nomeie essa coluna como 'Pessoas' e ordena por essa coluna em ordem crescente. Utilize as Tabelas Modalidade e Treino.\n\n\u0026nbsp;\n\n**5** - Retorne o **nome da pessoa treinadora** e a quantidade de **pessoas associadas** que participam de suas aulas,\nnomeie essa coluna como 'Pessoas'. Utilize as tabelas Pessoa_Treinadora, Treino, Aula.\n\n\u0026nbsp;\n\n**6** - Escreva uma query que retorne o **nome da pessoa associada** e o **nome da pessoa treinadora** responável pelo seu treino de acordo com a modalidade e o horário.\n\n---\n\u0026nbsp;\n# Gabarito\n\n[Ir para gabarito](./Gabarito.md)\n\n---\n\u0026nbsp;\n\n# Recursos Adicionais\n\nAlém dos JOINS usados nessa aula, existem outros, os links abaixo mostrará, caso queira se aprofundar:\n\n- Além dos que JOINS apresentados no conteúdo, esse material também fala sobre o CROSS JOIN - [MySQLTutorial](https://www.mysqltutorial.org/mysql-join/)\n\n- Esse conteúdo contem exemplos e exercícios - [W3SCHOOLS](https://www.w3schools.com/sql/sql_join.asp)\n\n- Documentação do MySQL sobre JOIN - [MySQL Documentation](https://dev.mysql.com/doc/refman/8.0/en/join.html)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgonzagadavid%2Fmysql-joins","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgonzagadavid%2Fmysql-joins","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgonzagadavid%2Fmysql-joins/lists"}