{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "SQL-modulo_6_aula.ipynb",
      "provenance": [],
      "collapsed_sections": [],
      "toc_visible": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "KJqp9AANOCtf"
      },
      "source": [
        "<img src=\"https://raw.githubusercontent.com/andre-marcos-perez/ebac-course-utils/main/media/logo/newebac_logo_black_half.png\" alt=\"ebac-logo\">\n",
        "\n",
        "---\n",
        "\n",
        "# **Módulo** | SQL: Trabalhando com Múltiplas Tabelas\n",
        "Caderno de **Aula**<br> \n",
        "Professor [Mariane Neiva](www.linkedin.com/in/mariane-neiva)\n",
        "\n",
        "---"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "d9jDtUbDOE1-"
      },
      "source": [
        "# **Tópicos**\n",
        "\n",
        "<ol type=\"1\">\n",
        "  <li>Union;</li>\n",
        "  <li>Junções: inner / cross;</li>\n",
        "  <li>Junções: left / right;</li>\n",
        "</ol>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "SmoHgt-lwkpD"
      },
      "source": [
        "---"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "GABI6OW8OfQ2"
      },
      "source": [
        "# **Aulas**"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "NF7Pdc6hJ8oF"
      },
      "source": [
        "Nessa aula, usaremos a seguinte tabela:"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "QkH5jQruJG-L"
      },
      "source": [
        "```sql\n",
        "CREATE TABLE transacoes (\n",
        "  id_cliente INT, \n",
        "  id_transacao INT,\n",
        "  data_compra DATE,\n",
        "  valor FLOAT, \n",
        "  id_loja varchar(25)\n",
        ");\n",
        "```"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "MLdOjQcDKCXc"
      },
      "source": [
        "Também temos os seguintes valores inseridos na tabela"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "I34tqzZrKOma"
      },
      "source": [
        "```sql\n",
        "INSERT INTO transacoes VALUES (1,768805383,'2021-06-10',50.74,'magalu');\n",
        "INSERT INTO transacoes VALUES (2,768805399,'2021-06-13',30.90,'giraffas');\n",
        "INSERT INTO transacoes VALUES (3,818770008,'2021-06-05',110.00,'postoshell');\n",
        "INSERT INTO transacoes VALUES (1,76856563,'2021-07-10',2000.90,'magalu');\n",
        "INSERT INTO transacoes VALUES (1,767573759,'2021-06-20',15.70,'subway');\n",
        "INSERT INTO transacoes VALUES (3,818575758,'2021-06-25',2.99,'seveneleven');\n",
        "INSERT INTO transacoes VALUES (4,764545534,'2021-07-11',50.74,'extra');\n",
        "INSERT INTO transacoes VALUES (5,76766789,'2021-08-02',10.00,'subway');\n",
        "INSERT INTO transacoes VALUES (3,8154567758,'2021-08-15',1100.00,'shopee');\n",
        "```"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "rRBLidUaK7NJ"
      },
      "source": [
        "Como resultado da função SELECT, temos a seguinte tabela:\n",
        "\n",
        "| id_cliente | id_transacao | data_compra |valor | id_loja |\n",
        "|------------|----------|----|-----| ------- |\n",
        "| 1| 768805383    | 2021-06-10    | 50.74 |magalu \n",
        "| 2 | 768805399    | 2021-06-13    |  30.90 | giraffas \n",
        "| 3 | 818770008    |2021-06-05   |  110.00 |  postoshell  \n",
        "|1 |76856563 | 2021-07-10 |2000.90 |magalu\n",
        "|1|767573759|2021-06-20|15.70|subway\n",
        "| 3|818575758|2021-06-25|2.99|seveneleven\n",
        " |4|764545534|2021-07-10|50.74|extra\n",
        "|5|76766789|2021-08-92|10.00|subway\n",
        "|3|8154567758|2021-08-15|1100.00|shopee "
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "x_81anuj4UFT"
      },
      "source": [
        "Além disso, também utilizaremos a tabela:\n",
        "\n",
        "```sql\n",
        "CREATE TABLE cliente (\n",
        "  id_cliente INT,  \n",
        "  nome varchar(25),\n",
        "  data_compra DATE,\n",
        "  valor_compra float, \n",
        "  loja_cadastro varchar(25)\n",
        ");\n",
        "```\n",
        "\n",
        "Teremos os seguintes dados na tabela:\n",
        "\n",
        "```sql\n",
        "INSERT INTO cliente VALUES (5,'jose', '2020-07-01',500.43,'cea');\n",
        "INSERT INTO cliente VALUES (1,'maria','2019-03-02',150.70,'riachuelo');\n",
        "INSERT INTO cliente VALUES (2,'valentina','2020-01-09',210.99,'zara');\n",
        "INSERT INTO cliente VALUES (4,'joana','2019-05-11',1300.50,'pontofrio');\n",
        "INSERT INTO cliente VALUES (6,'fernando','2020-03-02',86.55,'pontofrio'); \n",
        "```\n",
        "\n",
        "Como resultado temos:\n",
        "\n",
        "|id_cliente|nome|data_compra|valor_compra|loja_cadastro|\n",
        "|-|-|-|-|-|\n",
        "|5|jose|2020-07-01|500.43|cea|\n",
        "|1|maria|2019-03-02|150.70|riachuelo|\n",
        "|2|valentina|2020-01-09|210.99|zara|\n",
        "|4|joana|2019-05-11|1300.50|pontofrio|\n",
        "|6|fernando|2020-03-02|86.55|pontofrio|"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ok889VghEyKq"
      },
      "source": [
        "#1. Função UNION\n",
        "\n",
        "A função UNION combina colunas e mostra os valores das colunas sequencialmente. \n",
        "\n",
        "A função é utilizada junto com a função SELECT e estabelece algumas regras:\n",
        "\n",
        "\n",
        "1.   As seleções devem possuir o mesmo número de colunas\n",
        "2.   As colunas combinadas possuem o mesmo tipo de dado\n",
        "\n",
        "No SQL Server:\n",
        "\n",
        "```sql\n",
        "SELECT <colunas1> FROM <tabela1>\n",
        "UNION\n",
        "SELECT <colunas2>  FROM <tabela2>;\n",
        "```\n",
        "\n",
        "No exemplo\n",
        "\n",
        "```sql\n",
        "SELECT id_cliente FROM transacoes\n",
        "UNION\n",
        "SELECT id_cliente  FROM cliente;\n",
        "```\n",
        "\n",
        "Resultado:\n",
        "\n",
        "|id_cliente|\n",
        "|----------| \n",
        "|1|\n",
        "|2|\n",
        "|3|\n",
        "|4|\n",
        "|5|\n",
        "|6|\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "GTLMydA69ZGT"
      },
      "source": [
        "Pelo resultado anterior, é possível reparar que os valores não se repetem. Mesmo que a tabela transações mostre id_cliente = 1 em três linhas, a seleção com UNION mostra o valor apenas uma vez. \n",
        "\n",
        "Para mostrar todos os valores, use **UNION ALL** ao invés de **UNION**"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "eqtRcYZgF94g"
      },
      "source": [
        "# 2. **Junções: inner / cross**\n",
        "\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "rQQ_R5ym-9yw"
      },
      "source": [
        "Lembra da união de conjuntos da matemática? Revisitaremos nessa aula."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "3G086dzN-KHm"
      },
      "source": [
        "## 2.1 Função inner\n",
        "\n",
        "A função inner mostra as informações comuns em duas seleções. Para ilustrar podemos observar a imagem abaixo:\n",
        "\n",
        "![tabela1lower.png](data:image/png;base64,[encoded data, 13772 characters])\n",
        "\n",
        "\n",
        "Para utilizar a função:\n",
        "```sql\n",
        "SELECT <colunas>\n",
        "FROM <tabela1>\n",
        "INNER JOIN <tabela2>\n",
        "ON <tabela1>.<coluna> = <tabela2>.<coluna>;\n",
        "``` \n",
        "\n",
        "No exemplo:\n",
        "\n",
        "```sql\n",
        "SELECT transacoes.id_cliente, cliente.nome\n",
        "FROM transacoes\n",
        "INNER JOIN cliente\n",
        "ON transacoes.id_cliente = cliente.id_cliente;\n",
        "```\n",
        "\n",
        "Resultado:\n",
        "\n",
        "|id_cliente|nome|\n",
        "|-----|-----|\n",
        "|1|maria|\n",
        "|2|valentina|\n",
        "|1|maria|\n",
        "|1|maria|\n",
        "|4|joana\n",
        "|5|jose|\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "vwu6dwNs-N6c"
      },
      "source": [
        "## 2.2 Função cross\n",
        "\n",
        "A função cross realiza um cruzamento de dados de duas tabela. É possível unir todas as informações de uma tabela a outra como veremos no exemplo.\n",
        "\n",
        "```sql\n",
        "SELECT <colunas>\n",
        "FROM <tabela1>\n",
        "CROSS JOIN <tabela2>\n",
        "```\n",
        "\n",
        "No exemplo:\n",
        "```sql\n",
        "SELECT *\n",
        "FROM cliente\n",
        "CROSS JOIN transacoes\n",
        "```\n",
        "\n",
        "Parte do resultado: [clique aqui](https://drive.google.com/file/d/1nwjHByagyfL3R2gQm2ALQMverAVmk75J/view?usp=sharing) \n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "7eVF8T9P-RBr"
      },
      "source": [
        "# **3. Junções: left / right**\n",
        "\n",
        "Nesses dois modelos de junção, todas os dados selecionados de uma tabela serão mostrado enquanto apenas os dados comuns de outra serão selecionados. \n",
        "\n",
        "Vamos entender."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "mIf7HNlr-X08"
      },
      "source": [
        "##3.1 Junção left\n",
        "\n",
        "Verifique a imagem abaixo:\n",
        "\n",
        "![leftjoin.png](data:image/png;base64,[encoded data, 8272 characters])\n",
        "\n",
        "Nesse modelo, todos os dados da **tabela1** são mostrados enquanto apenas os dados da tabela2 que são comuns as duas tabelas são mostrados.\n",
        "\n",
        "No SQL Server: \n",
        "\n",
        "```sql\n",
        "SELECT <colunas>\n",
        "FROM <tabela1>\n",
        "LEFT JOIN <tabela2>\n",
        "ON <tabela1>.<nomecolunacomum> = <tabela2>.<nomecolunacomum>;\n",
        "```\n",
        "\n",
        "Exemplo:\n",
        "\n",
        "\n",
        "```sql\n",
        "SELECT *\n",
        "FROM transacoes\n",
        "LEFT JOIN cliente \n",
        "ON cliente.id_cliente = transacoes.id_cliente;\n",
        "```\n",
        "\n",
        "Resultado completo: [clique aqui](https://drive.google.com/file/d/1qoGtmKzNhSLME0igLrhoq-B97KaAj3h7/view?usp=sharing)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Bh6zaK3c-aM_"
      },
      "source": [
        "## 3.2 Junção right\n",
        "\n",
        "Verifique a imagem abaixo:\n",
        "\n",
        "![rightjoin.png](data:image/png;base64,[encoded data, 8764 characters])\n",
        "\n",
        "Nesse modelo, todos os dados da **tabela2** são mostrados enquanto apenas os dados da **tabela1** que são comuns as duas tabelas são mostrados.\n",
        "\n",
        "No SQL Server: \n",
        "\n",
        "```sql\n",
        "SELECT <colunas>\n",
        "FROM <tabela1>\n",
        "RIGHT JOIN <tabela2>\n",
        "ON <tabela1>.<nomecolunacomum> = <tabela2>.<nomecolunacomum>;\n",
        "```\n",
        "\n",
        "Exemplo:\n",
        "\n",
        "\n",
        "```sql\n",
        "SELECT *\n",
        "FROM transacoes\n",
        "RIGHT JOIN cliente \n",
        "ON cliente.id_cliente = transacoes.id_cliente;\n",
        "```\n",
        "\n",
        "Para ver o resultado: [clique aqui](https://drive.google.com/file/d/1MYKpGh9WW_j-MOVDvPptijTHY5FJSAQG/view?usp=sharing)\n",
        "\n",
        "> Atenção: o site [SQLiteonline](https://sqliteonline.com/) não possui a função RIGHT JOIN"
      ]
    }
  ]
}