Responsive Advertisement

Node.js에서 MySQL 조인(JOIN) 사용하기: JOIN 문 완벽 가이드

MySQL에서 여러 테이블의 데이터를 결합하고 조회하는 것은 매우 중요합니다. JOIN 문을 사용하면 두 개 이상의 테이블을 연결하여 복잡한 데이터를 효율적으로 조회할 수 있습니다. 이번 글에서는 Node.jsMySQL을 연동하여 다양한 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 JOINRIGHT JOINUNION으로 결합하여 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 등의 다양한 조인 방법을 상황에 맞게 사용하면, 더욱 정교한 데이터 조회가 가능합니다. 이 방법을 통해 데이터베이스의 관계를 활용하여 더욱 강력한 애플리케이션을 개발해보세요!

댓글 쓰기