Junção do MySQL Node.js


Junte duas ou mais tabelas

Você pode combinar linhas de duas ou mais tabelas, com base em uma coluna relacionada entre elas, usando uma instrução JOIN.

Considere que você tem uma tabela de "usuários" e uma tabela de "produtos":

Comercial

[
  { id: 1, name: 'John', favorite_product: 154},
  { id: 2, name: 'Peter', favorite_product: 154},
  { id: 3, name: 'Amy', favorite_product: 155},
  { id: 4, name: 'Hannah', favorite_product:},
  { id: 5, name: 'Michael', favorite_product:}
]

produtos

[
  { id: 154, name: 'Chocolate Heaven' },
  { id: 155, name: 'Tasty Lemons' },
  { id: 156, name: 'Vanilla Dreams' }
]

Essas duas tabelas podem ser combinadas usando o campo de usuários e o favorite_productcampo de produtos id.

Exemplo

Selecione registros com uma correspondência em ambas as tabelas:

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

con.connect(function(err) {
  if (err) throw err;
  var sql = "SELECT users.name AS user, products.name AS favorite FROM users JOIN products ON users.favorite_product = products.id";
  con.query(sql, function (err, result) {
    if (err) throw err;
    console.log(result);
  });
});

Nota: Você pode usar INNER JOIN em vez de JOIN. Ambos darão o mesmo resultado.

Salve o código acima em um arquivo chamado "demo_db_join.js" e execute o arquivo:

Execute "demo_db_join.js"

C:\Users\Your Name>node demo_db_join.js

Que lhe dará este resultado:

[
  { user: 'John', favorite: 'Chocolate Heaven' },
  { user: 'Peter', favorite: 'Chocolate Heaven' },
  { user: 'Amy', favorite: 'Tasty Lemons' }
]

Como você pode ver no resultado acima, apenas os registros com correspondência em ambas as tabelas são retornados.


Associação à esquerda

Se você deseja retornar todos os usuários, independentemente de terem um produto favorito ou não, use a instrução LEFT JOIN:

Exemplo

Selecione todos os usuários e seus produtos favoritos:

SELECT users.name AS user,
products.name AS favorite
FROM users
LEFT JOIN
products ON users.favorite_product = products.id

Que lhe dará este resultado:

[
  { user: 'John', favorite: 'Chocolate Heaven' },
  { user: 'Peter', favorite: 'Chocolate Heaven' },
  { user: 'Amy', favorite: 'Tasty Lemons' },
  { user: 'Hannah', favorite: null },
  { user: 'Michael', favorite: null }
]

União direita

Se você deseja devolver todos os produtos e os usuários que os têm como favoritos, mesmo que nenhum usuário os tenha como favorito, use a instrução RIGHT JOIN:

Exemplo

Selecione todos os produtos e o usuário que os tem como favorito:

SELECT users.name AS user,
products.name AS favorite
FROM users
RIGHT JOIN
products ON users.favorite_product = products.id

Que lhe dará este resultado:

[
  { user: 'John', favorite: 'Chocolate Heaven' },
  { user: 'Peter', favorite: 'Chocolate Heaven' },
  { user: 'Amy', favorite: 'Tasty Lemons' },
  { user: null, favorite: 'Vanilla Dreams' }
]

Nota: Hannah e Michael, que não têm nenhum produto favorito, não estão incluídos no resultado.