5
respostas

Dúvida sobre SQL

Pessoal, pequena dúvida, para eu dar um select (inner join) entre duas tabelas. Elas devem estar relacionados entre si ?

5 respostas

Olá Marcos, sim esse seria o cenário "mais correto" vamos dizer assim.

Que você tenha uma chave primária(Primary Key) na tabela A e uma Chave estrangeira(Foreign Key ) na tabela B que represente a sua Chave primária da tabela A, assim resultando em uma relação ou relacionamento.

Porém, quando queremos fazer um JOIN(ou INNER JOIN) entre colunas de diferentes tabelas, basta que o a nossa cláusula ON seja atendida. Ou seja, se na coluna id da minha tabela A eu tenho algum valor que corresponda a minha coluna id da minha tabela B , o JOIN irá funcionar.

Exemplo:

SELECT
        a.id
FROM
    tabela A
        JOIN     tabela B
            ON A.id = B.id

Espero ter ajudado,

abraços !

Entendi, mas no meu caso e o seguinte,estou com dificuldade de entender o seguinte : Eu tenho que montar um DER, de uma agencia bancária, onde o Cliente, tem um painel de operações, Tipo de operação (Saque, depósito, transferência), data e valor de de cada operação, exemplo : Saque = 80 R$. E eu preciso filtrar em um select todas essas informações, isto é, do cliente em um período de tempo, quantas operações, e os valores. Exemplo : do dia 10/04/17 até 20/04/17, o que ele fez. Como eu poderia filtrar por cliente ? várias operações dele ?

Para dar uma resposta mais significativa para sua estrutura em particular você precisaria fornecer como é o modelo. Qual a estrutura das tabelas envolvidas, ai conseguimos lhe mostrar como seria a query.

Abraço.

Em relação as tabelas, como você comentou que o DER é de uma agência bancária, eu imaginei o seguinte

tabela CLIENTES

cli_id - cli_nome - cli_CPF, cli_data_cadastro, e demais campos de acordo com sua necesssidades.

tabela CONTAS (O cliente pode ter 1 ou mais contas)

con_id, con_cli_id, con_numero_conta, outros campos....

tabela CARTOES (Uma conta pode ter mais de 1 cartão, ex: titular, adicional. Para o seu exemplo ela não seria necessária)

car_id, car_con_id, car_numero, outros campos....

tabela MOVIMENTACAO (para cada lançamento)

mov_id, mov_con_id, mov_data, mov_tipo (saque, transferência, etc...), mov_valor.

Com base no exemplo acima, para puxar os saques do cliente, teria que vincular clientes, contas, e movimentacao. Ficaria algo assim:

select m.mov_data, m.mov_valor from movimentacao as m inner join contas as c on m.mov_con_id = c.con_id inner join clientes as cl on cl.cli_id = c.con_cli_id WHERE cl.cli_id = CODIGO_DO_CLIENTE AND m.mov_data BETWEEN DATA_INICIAL and DATA_FINAL

Daniel Bins, é bem assim, porém estou com dificuldade em fazer o vínculo entre estas tabelas !