MySQL에서 여러 테이블의 데이터를 결합하고 조회하는 것은 매우 중요합니다. JOIN 문을 사용하면 두 개 이상의 테이블을 연결하여 복잡한 데이터를 효율적으로 조회할 수 있습니다. 이번 글에서는 Node.js와 MySQL을 연동하여 다양한 JOIN
문을 사용하는 방법을 단계별로 설명하겠습니다.
Node.js와 MySQL 연결 설정
MySQL에서 조인을 사용하여 데이터를 조회하기 전에, 먼저 Node.js와 MySQL 간의 연결을 설정해야 합니다. 이를 위해 mysql2
패키지를 설치하고, MySQL 서버와 연결하는 방법을 알아보겠습니다.
1. mysql2 패키지 설치
Node.js와 MySQL을 연동하려면 mysql2
패키지를 설치해야 합니다. 이 패키지를 사용하면 MySQL 데이터베이스와의 통신을 쉽게 처리할 수 있습니다.
$ npm init -y
$ npm install mysql2
위 명령어를 통해 mysql2
패키지를 설치할 수 있습니다.
2. MySQL 연결 설정
다음은 MySQL 서버에 연결하는 기본 코드입니다. 이를 통해 Node.js에서 MySQL에 연결할 수 있습니다.
// app.js
const mysql = require('mysql2');
// MySQL 연결 설정
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'your-password',
database: 'node_mysql'
});
// MySQL 연결
connection.connect((err) => {
if (err) {
console.error('MySQL 연결 중 오류 발생:', err);
return;
}
console.log('MySQL에 성공적으로 연결되었습니다.');
});
MySQL에서 JOIN 문 사용하기
MySQL의 JOIN
문은 여러 테이블을 결합하여 관련 데이터를 조회할 때 사용됩니다. INNER JOIN, LEFT JOIN, RIGHT JOIN 등 여러 종류의 조인이 있으며, 각 조인은 특정 조건에 맞춰 테이블을 결합합니다.
1. INNER JOIN 사용하기
INNER JOIN
은 두 테이블에서 공통된 데이터를 조회할 때 사용됩니다. 예를 들어, users
테이블과 orders
테이블을 결합해, 사용자와 그 사용자의 주문 데이터를 조회할 수 있습니다.
// INNER JOIN 쿼리
const selectQuery = `
SELECT users.name, orders.product, orders.amount
FROM users
INNER JOIN orders ON users.id = orders.user_id
`;
// 데이터 조회 실행
connection.query(selectQuery, (err, results) => {
if (err) {
console.error('데이터 조회 중 오류 발생:', err);
return;
}
console.log('조회된 데이터:', results);
});
위 쿼리는 users
테이블과 orders
테이블을 INNER JOIN
으로 연결하여, 각 사용자와 그 사용자가 주문한 상품 정보와 수량을 조회합니다.
2. LEFT JOIN 사용하기
LEFT JOIN
은 왼쪽 테이블의 모든 행을 가져오고, 오른쪽 테이블에 일치하는 데이터가 없으면 NULL
값을 반환합니다. 예를 들어, 주문이 없는 사용자도 포함하여 모든 사용자를 조회할 수 있습니다.
// LEFT JOIN 쿼리
const selectQuery = `
SELECT users.name, orders.product, orders.amount
FROM users
LEFT JOIN orders ON users.id = orders.user_id
`;
// 데이터 조회 실행
connection.query(selectQuery, (err, results) => {
if (err) {
console.error('데이터 조회 중 오류 발생:', err);
return;
}
console.log('조회된 데이터:', results);
});
이 쿼리는 LEFT JOIN
을 사용하여 users
테이블의 모든 사용자와 해당 사용자의 주문 데이터를 가져옵니다. 주문이 없는 사용자의 경우 NULL
값이 반환됩니다.
3. RIGHT JOIN 사용하기
RIGHT JOIN
은 오른쪽 테이블의 모든 행을 반환하고, 왼쪽 테이블에 일치하는 데이터가 없으면 NULL
값을 반환합니다. 예를 들어, 주문만 있고 사용자 정보가 없는 데이터를 모두 포함하려면 RIGHT JOIN
을 사용합니다.
// RIGHT JOIN 쿼리
const selectQuery = `
SELECT users.name, orders.product, orders.amount
FROM users
RIGHT JOIN orders ON users.id = orders.user_id
`;
// 데이터 조회 실행
connection.query(selectQuery, (err, results) => {
if (err) {
console.error('데이터 조회 중 오류 발생:', err);
return;
}
console.log('조회된 데이터:', results);
});
이 쿼리는 RIGHT JOIN
을 사용하여 orders
테이블에 있는 모든 주문을 조회하고, 일치하는 사용자 정보가 없는 경우 NULL
값을 반환합니다.
4. FULL OUTER JOIN 사용하기
FULL OUTER JOIN
은 양쪽 테이블의 모든 데이터를 반환하며, 어느 한쪽에 일치하는 데이터가 없으면 NULL
값을 반환합니다. MySQL은 기본적으로 FULL OUTER JOIN
을 지원하지 않지만, UNION
을 사용해 이를 구현할 수 있습니다.
// FULL OUTER JOIN 쿼리
const selectQuery = `
SELECT users.name, orders.product, orders.amount
FROM users
LEFT JOIN orders ON users.id = orders.user_id
UNION
SELECT users.name, orders.product, orders.amount
FROM users
RIGHT JOIN orders ON users.id = orders.user_id
`;
// 데이터 조회 실행
connection.query(selectQuery, (err, results) => {
if (err) {
console.error('데이터 조회 중 오류 발생:', err);
return;
}
console.log('조회된 데이터:', results);
});
위 쿼리는 LEFT JOIN
과 RIGHT JOIN
을 UNION
으로 결합하여 FULL OUTER JOIN
의 효과를 구현합니다. 이를 통해 두 테이블에서 모든 데이터를 가져올 수 있습니다.
JOIN을 활용한 다양한 예시
1. 여러 테이블 조인하기
두 개 이상의 테이블을 조인할 수도 있습니다. 예를 들어, users
, orders
, products
세 개의 테이블을 조인하여 사용자 이름, 주문한 상품, 그리고 상품의 가격을 조회하는 쿼리를 작성할 수 있습니다.
// 여러 테이블 조인
const selectQuery = `
SELECT users.name, products.name AS product, products.price
FROM users
INNER JOIN orders ON users.id = orders.user_id
INNER JOIN products ON orders.product_id = products.id
`;
// 데이터 조회 실행
connection.query(selectQuery, (err, results) => {
if (err) {
console.error('데이터 조회 중 오류 발생:', err);
return;
}
console.log('조회된 데이터:', results);
});
이 쿼리는 세 개의 테이블을 조인하여 사용자, 그가 주문한 상품, 그리고 상품의 가격 정보를 반환합니다.
MySQL 연결 종료
데이터 조회 작업이 끝나면 MySQL 연결을 안전하게 종료해야 합니다. connection.end()
메서드를 사용해 연결을 종료할 수 있습니다.
// MySQL 연결 종료
connection.end((err) => {
if (err) {
console.error('MySQL 연결 종료 중 오류 발생:', err);
return;
}
console.log('MySQL 연결이 종료되었습니다.');
});
전체 코드 예시
지금까지 설명한 내용을 바탕으로, INNER JOIN
을 사용하는 전체 코드는 다음과 같습니다.
// app.js
const mysql = require('mysql2');
// MySQL 연결 설정
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'your-password',
database: 'node_mysql'
});
// MySQL 연결
connection.connect((err) => {
if (err) {
console.error('MySQL 연결 중 오류 발생:', err);
return;
}
console.log('MySQL에 성공적으로 연결되었습니다.');
// INNER JOIN 쿼리
const selectQuery = `
SELECT users.name, orders.product, orders.amount
FROM users
INNER JOIN orders ON users.id = orders.user_id
`;
// 데이터 조회 실행
connection.query(selectQuery, (err, results) => {
if (err) {
console.error('데이터 조회 중 오류 발생:', err);
return;
}
console.log('조회된 데이터:', results);
// MySQL 연결 종료
connection.end((err) => {
if (err) {
console.error('MySQL 연결 종료 중 오류 발생:', err);
return;
}
console.log('MySQL 연결이 종료되었습니다.');
});
});
});
결론
Node.js에서 MySQL을 사용할 때 JOIN
문을 활용하면 여러 테이블의 데이터를 결합하여 복잡한 쿼리를 효율적으로 처리할 수 있습니다. INNER JOIN
, LEFT JOIN
, RIGHT JOIN
등의 다양한 조인 방법을 상황에 맞게 사용하면, 더욱 정교한 데이터 조회가 가능합니다. 이 방법을 통해 데이터베이스의 관계를 활용하여 더욱 강력한 애플리케이션을 개발해보세요!
댓글 쓰기