Pular para o conteúdo
  • Este tópico contém 3 respostas, 2 vozes e foi atualizado pela última vez 8 anos, 4 meses atrás por Avatar de Paulo WerneckPaulo Werneck.
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #108285
    Avatar de Oracle DeveloperOracle Developer
    Participante

      Fala pessoal, tudo bem?
      Estou começando com SQL, e tenho algumas dúvidas, se puderem me ajudar. Eu tenho as tabelas abaixo (lembrando que minhas tabelas são outras, isso tudo é fictício):

      TABELA CLIENTE:
      – COLUNA 1 (ID do clientePK)
      – COLUNA 2 (nome do cliente)

      TABELA PRODUTO (tabela principal):
      – COLUNA 1 (ID do clienteFK)
      – COLUNA 2 (nome do produto)
      – COLUNA 3 (ID do produtoPK)
      – COLUNA 4 (nome do cliente)

      TABELA DESCRIÇÃO DO PRODUTO:
      – COLUNA 1 (tipo do produto)
      – COLUNA 2 (estado do produto)
      – COLUNA 3 (ID do produtoFK)

      Meu JOIN seria basicamente esse:

      SELECT
      rc.ID_DO_CLIENTE
      rc.nome_do_cliente
      ri.ID_do_cliente
      ri.nome_do_produto
      ri.ID_do_produto
      re.tipo_do_produto
      re.estado_do_produto
      re.id_do_produto
      FROM TABELA_PRODUTO rc
      INNER JOIN TABELA_PRODUTO ri
      ON rc.ID_DO_CLIENTE = ri.ID_do_cliente
      INNER JOIN TABELA_DESCRICAO_PRODUTO re
      ON re.id_do_produto = ri.id_do_produto

      Minhas dúvidas são:

      1. No lugar de utilizar:
      INNER JOIN TABELA_PRODUTO ri
      ON rc.ID_DO_CLIENTE = ri.ID_do_cliente
      Eu poderia fazer:
      INNER JOIN TABELA_PRODUTO ri
      ON rc.nome_do_cliente = ri.nome_do_cliente ?

      Por exemplo, se eu tenho o relacionamento entre 3 tabelas, elas precisam as 3 terem campos
      em comum obrigatoriamente, correto? Se afirmativo, sempre precisa ser o ID?
      Caso a resposta é que elas sempre precisam ter campos em comum, eu sempre preciso defini-los
      no ‘ON’? Eu não poderia apenas colocar algo como ‘INNER JOIN….’ e mais nada?

      Obrigado,

      #108286
      Avatar de Paulo WerneckPaulo Werneck
      Participante

        Olá

        Primeira Pergunta:
        Sim, sintaticamente está correto, vc pode fazer join por colunas que não sejam o id ou a chave primaria

        Segunda Pergunta:
        As três tabelas ou mais não precisam ter o mesmo campo em todas elas, nem mesmo os campos precisam ter o mesmo nome. Você conhece modelagem de dados? se não estude um pouco sobre, vai te ajudar a entender esses joins.

        Terceira Pergunta:
        Nessa sintaxe sim, vc precisará colocar a clausula “on”, mas existem outras sintaxes de se fazer joins… dá uma olhada nesses links

        http://www.w3schools.com/sql/sql_join.asp
        http://www.techonthenet.com/oracle/joins.php

        #108287
        Avatar de Oracle DeveloperOracle Developer
        Participante

          Fala luckzin,

          Muito obrigado por responder a estas dúvidas. Rapidamente, sem querer abusar, se eu posso fazer um INNER JOIN entre duas tabelas por exemplo, e elas não precisam ter colunas em comum, como eu definiria isso na cláusula ‘ON’?

          Por exemplo:
          1. No lugar de utilizar:
          INNER JOIN TABELA_PRODUTO ri
          ON rc.ID_DO_CLIENTE = ri.ID_do_cliente

          Eu poderia utilizar o que aqui?
          INNER JOIN TABELA_PRODUTO ri
          ON rc…. = ri….

          Essa é a minha dúvida. Vou dar uma estudada em modelagem de dados!

          Obrigado mais uma vez,

          #108288
          Avatar de Paulo WerneckPaulo Werneck
          Participante

            Quando eu digo que não precisam ser em comum eu estou dizendo que elas não precisam estar relacionadas (Pode ser que isso seja um erro de modelagem, ou não), mas nada impede.

            exemplo:
            tabela1
            id
            nome

            tabela2
            codigo
            estado

            com isso pode ser feito uma consulta como:
            select *
            from tabela1
            inner join tabela2 on (id=codigo)

            Obs: A sintaxe está correta, mas não quer dizer que a semântica tbm esteja, aí é questão de analise dos dados nos campos.

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.
          plugins premium WordPress