JOIN

ํ•œ ํ…Œ์ด๋ธ”๊ณผ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์ด ์™ธ๋ž˜ ํ‚ค๋กœ ์—ฐ๊ฒฐ์ด ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋‘ ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•˜์—ฌ, ๋‘ ํ…Œ์ด๋ธ”์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ SELECT๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

INNER JOIN

๋‘ ํ…Œ์ด๋ธ”์„ ๋น„๊ตํ•˜์—ฌ ์กฐ๊ฑด์ด ์ฐธ์ธ COLUMN์„ SELECT

๋‘ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ฐ’์ด ์ผ์น˜ํ•˜๋Š” ํ–‰๋งŒ ํฌํ•จ ( ๊ต์ง‘ํ•ฉ )

SELECT column_list
FROM table_1
INNER JOIN table_2 ON join_condition;

join_condition์ด ์ฐธ์ธ COLUMN์„ SELECTํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค.

SELECT
    m.member_id,
    m.name member,
    c.committee_id,
    c.name committee
FROM
    members m
INNER JOIN committees c
	ON c.name = m.name;
//INNER JOIN committees c
//    USING(name);

๋‘ ํ…Œ์ด๋ธ”์— colmun_name์ด ๊ฐ™์•„ table_1.name = table_2.name ์ธ ๊ฒฝ์šฐ USING์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

LEFT JOIN

์™ผ์ชฝ ํ…Œ์ด๋ธ”์„ ๊ธฐ์ค€์œผ๋กœ ๋ชจ๋“  ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋˜, ์˜ค๋ฅธ์ชฝ๊ณผ ๊ฐ™์€ ๊ฐ’์€ ๊ฐ’์„ ์ฑ„์›Œ์„œ ๊ฐ€์ ธ์˜ค๊ณ  ์˜ค๋ฅธ์ชฝ๊ณผ ๊ฐ™์ง€ ์•Š์€ ๊ฐ’์€ NULL๋กœ selectํ•œ๋‹ค

SELECT
    m.member_id,
    m.name member,
    c.committee_id,
    c.name committee
FROM
    members m
LEFT JOIN committees c USING(name);
SELECT
    m.member_id,
    m.name member,
    c.committee_id,
    c.name committee
FROM
    members m
LEFT JOIN committees c USING(name)
WHERE c.committee_id IS NULL;

RIGHT JOIN

left join์˜ ๋ฐ˜๋Œ€๋กœ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์„ ๊ธฐ์ค€์œผ๋กœ ๋ชจ๋“  ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋˜, ์กฐ๊ฑด์ด ์ฐธ์ด ์•„๋‹Œ ๊ฐ’์€ null๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.

SELECT
    m.member_id,
    m.name member,
    c.committee_id,
    c.name committee
FROM
    members m
RIGHT JOIN committees c on c.name = m.name;
SELECT
    m.member_id,
    m.name member,
    c.committee_id,
    c.name committee
FROM
    members m
RIGHT JOIN committees c USING(name)
WHERE c.committee_id IS NULL;

JOIN ON์—์„œ ์กฐ๊ฑด ์ถ”๊ฐ€์™€ WHERE ์กฐ๊ฑด ๋น„๊ต

SELECT
    o.orderNumber,
    customerNumber,
    productCode
FROM
    orders o
LEFT JOIN orderDetails
    USING (orderNumber)
WHERE
    orderNumber = 10123;
SELECT
    o.orderNumber,
    customerNumber,
    productCode
FROM
    orders o
LEFT JOIN orderDetails d
    ON o.orderNumber = d.orderNumber AND
       o.orderNumber = 10123;

์œ„์˜ ๋‘ ์ฟผ๋ฆฌ ๋ฌธ์„ ๋น„๊ตํ•ด๋ณด๋ฉด, ์ฒซ๋ฒˆ์งธ ์ฟผ๋ฆฌ๋ฌธ์€ ordernumber์ด ๊ฐ™์€ column๋งŒ selectํ›„ where์ ˆ๋กœ ์ธํ•ด ordernumber์ด 10123์ธ column๋งŒ selectํ•œ๋‹ค.

๋‘๋ฒˆ์งธ ์ฟผ๋ฆฌ๋ฌธ์€, ๋ชจ๋“  ordernumber์ด ๊ฐ™์€ column์— ๋Œ€ํ•ด ordernumber์ด 10123์ธ column๋งŒ ๊ฐ’์ด ๋“ค์–ด์žˆ๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“  column์€ null๊ฐ’์ด ๋“ค์–ด์žˆ๋Š” ํ…Œ์ด๋ธ”์„ ๋ชจ๋‘ selectํ•˜๋Š” ์ฟผ๋ฆฌ๋ฌธ์ด๋‹ค.

CROSS JOIN

ํฌ๋กœ์Šค ์กฐ์ธ์€ on ์กฐ๊ฑด ์—†๊ณ , ๋ชจ๋“  ํ…Œ์ด๋ธ”์˜ ํ–‰์„ ๊ฒฐํ•ฉํ•œ๋‹ค. (ํ–‰๋ ฌ์˜ ๊ณฑ, mxn)

SELECT
    m.member_id,
    m.name member,
    c.committee_id,
    c.name committee
FROM
    members m
CROSS JOIN committees c;

SELF JOIN

ํ•œ ํ…Œ์ด๋ธ”์—์„œ ์ž๊ธฐ ์ž์‹ ์„ ์ฐธ์กฐํ•˜์—ฌ ํ•œ column๊ณผ ๋‹ค๋ฅธ column์„ ๋น„๊ตํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

SELF JOIN๋„ INNER JOIN๊ณผ LEFT JOIN์„ ์ด์šฉํ•˜์—ฌ ๊ต์ง‘ํ•ฉ๋งŒ ํ‘œ์‹œํ• ์ง€, NULL๊ฐ’์„ ํฌํ•จํ•œ ๊ฐ’์„ ๊ฐ€์ ธ ์˜ฌ์ง€ ์ƒํ™ฉ์—๋”ฐ๋ผ ์„ ํƒํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฉด๋œ๋‹ค.

  • INNER JOIN

    SELECT
    CONCAT(m.lastName, ', ', m.firstName) AS 'Manager',
    CONCAT(e.lastName, ', ', e.firstName) AS 'Direct report'
    FROM
        employees e
    INNER JOIN employees m ON
        m.employeeNumber = e.reportsTo
    ORDER BY
        Manager;
  • LEFT JOIN

    SELECT
    CONCAT(m.lastname, ', ', m.firstname) AS 'Manager',
    CONCAT(e.lastname, ', ', e.firstname) AS 'Direct report'
    FROM
        employees e
    LEFT JOIN employees m ON
        m.employeeNumber = e.reportsto
    ORDER BY
        manager DESC;

Last updated