๋ฐ˜์‘ํ˜•

์—ด(Column) ํ•ฉ์น˜๊ธฐ

 

๋‚ด๋ถ€ ์กฐ์ธ

 

1. FROM/WHERE๋ฅผ ์‚ฌ์šฉ

 

๋‚ด๋ถ€ ์กฐ์ธ์€ ๋‘ ํ…Œ์ด๋ธ”์˜ ํ‚ค๊ฐ’์ด ๋งค์นญ๋  ๊ฒฝ์šฐ ์„ ํƒ๋œ ๋ชจ๋“  ์—ด์„ ๋‚˜ํƒ€๋ƒ„

 

SELECT ํ…Œ์ด๋ธ”๋ช…1.์—ด ์ด๋ฆ„1, ํ…Œ์ด๋ธ”๋ช…2.์—ด ์ด๋ฆ„2
FROM ํ…Œ์ด๋ธ”๋ช…1, ํ…Œ์ด๋ธ”๋ช…2
WHERE ํ…Œ์ด๋ธ”๋ช…1.KEY=ํ…Œ์ด๋ธ”๋ช…2.KEY;

 

2. FROM/WHERE์™€ ๋ณ„์นญ์„ ์‚ฌ์šฉ

 

์˜ค๋ผํด์„ ํฌํ•จํ•œ ๋ช‡๋ช‡ DBMS๋Š” ํ…Œ์ด๋ธ”๋ช… ๋ณ„์นญ์„ ์ค„ ๋•Œ AS ํ‚ค์›Œ๋“œ๊ฐ€ ์ง€์›๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ

AS๋ฅผ ๋นผ๊ณ  ํ…Œ์ด๋ธ” ๋ณ„์นญ์„ ์„ค์ •ํ•ด์•ผํ•จ!

SELECT ๋ณ„์นญ1.์—ด ์ด๋ฆ„1, ๋ณ„์นญ2.์—ด ์ด๋ฆ„2
FROM ํ…Œ์ด๋ธ”๋ช…1(AS) ๋ณ„์นญ1, ํ…Œ์ด๋ธ”๋ช…2(AS) ๋ณ„์นญ2
WHERE ๋ณ„์นญ1.KEY=๋ณ„์นญ2.KEY;

 

3. INNER JOIN์„ ์‚ฌ์šฉ

 

INNER JOIN์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ํ…Œ์ด๋ธ”์„ ํ•ฉ์น  ์ˆ˜ ์žˆ๋‹ค

 

=> ON ๋’ค์— ๋‘ ํ…Œ์ด๋ธ”์˜ ์—ฐ๊ฒฐ๊ณ ๋ฆฌ๊ฐ€ ๋˜๋Š” ํ‚ค๊ฐ’์„ ์ ์œผ๋ฉด ๋จ

SELECT ํ…Œ์ด๋ธ”๋ช…1.์—ด ์ด๋ฆ„1, ํ…Œ์ด๋ธ”๋ช…2.์—ด ์ด๋ฆ„2
FROM ํ…Œ์ด๋ธ”๋ช…1 INNER JOIN ํ…Œ์ด๋ธ”๋ช…2
ON ํ…Œ์ด๋ธ”๋ช…1.KEY=ํ…Œ์ด๋ธ”๋ช…2.KEY;

 

4. INNER JOIN๊ณผ ๋ณ„์นญ์„ ์‚ฌ์šฉ

 

์˜ค๋ผํด์„ ํฌํ•จํ•œ ๋ช‡๋ช‡ DBMS๋Š” ํ…Œ์ด๋ธ”๋ช… ๋ณ„์นญ์„ ์ค„ ๋•Œ AS ํ‚ค์›Œ๋“œ๊ฐ€ ์ง€์›๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ

AS๋ฅผ ๋นผ๊ณ  ํ…Œ์ด๋ธ” ๋ณ„์นญ์„ ์„ค์ •ํ•ด์•ผํ•จ!

 

SELECT ๋ณ„์นญ1.์—ด ์ด๋ฆ„1, ๋ณ„์นญ2.์—ด ์ด๋ฆ„2
FROM ํ…Œ์ด๋ธ”๋ช…1(AS) ๋ณ„์นญ1 INNER JOIN ํ…Œ์ด๋ธ”๋ช…2 (AS) ๋ณ„์นญ2
ON ๋ณ„์นญ1.KEY=๋ณ„์นญ2.KEY;

 

CUSTOMERS

 

ORDERS

 

EMPLOYEE

 

1. CUSTOMERS์™€ ORDERS ํ…Œ์ด๋ธ”์„ ์ด์šฉํ•˜์—ฌ ์ฃผ๋ฌธ์ด๋ ฅ์ด ์žˆ๋Š” ๊ณ ๊ฐ์•„์ด๋””, ๊ณ ๊ฐ์ด๋ฆ„, ์ฃผ๋ฌธ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ ค๋ฉด?

 

SELECT TMP1.CUST_ID, TMP1.CUST_NM, TMP2.ORDER_ID
FROM CUSTOMERS TMP1, ORDERS TMP2
WHERE TMP1.CUST_ID = TMP2.CUST_ID;

 

2. CUSTOMERS, ORDERS, EMPLOYEE ํ…Œ์ด๋ธ”์„ ์ด์šฉํ•˜์—ฌ ์ฃผ๋ฌธ์ด๋ ฅ์ด ์žˆ๋Š” ๊ณ ๊ฐ์•„์ด๋””, ๊ณ ๊ฐ์ด๋ฆ„, ์ฃผ๋ฌธ๋ฒˆํ˜ธ, ํŒ๋งค์ง์›์•„์ด๋”” ๋ฐ ํŒ๋งค์ง์›์ด๋ฆ„์„ ๋‚˜ํƒ€๋‚ด๋ ค๋ฉด?

 

SELECT TMP1.CUST_ID, TMP1.CUST_NM, TMP2.ORDER_ID, TMP2.EMP_ID, TMP3.NM
FROM CUSTOMERS TMP1
     INNER JOIN ORDERS TMP2 ON TMP1.CUST_ID = TMP2.CUST_ID
     INNER JOIN EMPLOYEE TMP3 ON TMP2.EMP_ID = TMP3.EMP_ID;

 

1. ์กฐ์ธ ์กฐ๊ฑด์„ ์ง€์ •ํ•˜์ง€ ์•Š์€ ์ฑ„ ๋‘ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜๋ฉด ๊ณฑ์ง‘ํ•ฉ์ด ๋œ๋‹ค

=> ์ด ๊ฒฝ์šฐ ๋ฐ˜ํ™˜ ๋˜๋Š” ํ–‰์˜ ์ˆ˜๋Š” ์ฒซ ๋ฒˆ์งธ ํ…Œ์ด๋ธ”๊ณผ ๋‘ ๋ฒˆ์งธ ํ…Œ์ด๋ธ”์˜ ํ–‰์˜ ์ˆ˜๋ฅผ ๊ณฑํ•œ ์ˆ˜๊ฐ€ ๋œ๋‹ค

 

์™ธ๋ถ€ ์กฐ์ธ

 

1. LEFT OUTER JOIN

 

์™ผ์ชฝ ํ…Œ์ด๋ธ”์„ ๊ธฐ์ค€์œผ๋กœ ์กฐ์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, OUTER๋ฅผ ์ƒ๋žตํ•ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค

(๋งŒ์•ฝ ์™ผ์ชฝ ํ…Œ์ด๋ธ”์—๋Š” ์กด์žฌํ•˜์ง€๋งŒ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์—๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ‚ค๊ฐ’์ด ์žˆ๋‹ค๋ฉด NULL๊ฐ’์œผ๋กœ ๊ฐ’์ด ๋ฐ˜ํ™˜๋จ)

 

SELECT ๋ณ„์นญ1.์—ด ์ด๋ฆ„1, ๋ณ„์นญ2.์—ด ์ด๋ฆ„2
FROM ํ…Œ์ด๋ธ”๋ช…1 (AS) ๋ณ„์นญ1 LEFT (OUTER) JOIN ํ…Œ์ด๋ธ”๋ช…2 (AS) ๋ณ„์นญ2
ON ๋ณ„์นญ1.KEY=๋ณ„์นญ2.KEY;

 

2. RIGHT OUTER JOIN

 

์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์„ ๊ธฐ์ค€์œผ๋กœ ์กฐ์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, OUTER๋ฅผ ์ƒ๋žตํ•ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค

(๋งŒ์•ฝ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์—๋Š” ์กด์žฌํ•˜์ง€๋งŒ ์™ผ์ชฝ ํ…Œ์ด๋ธ”์—๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ‚ค๊ฐ’์ด ์žˆ๋‹ค๋ฉด NULL๊ฐ’์œผ๋กœ ๊ฐ’์ด ๋ฐ˜ํ™˜๋จ)

 

SELECT ๋ณ„์นญ1.์—ด ์ด๋ฆ„1, ๋ณ„์นญ2.์—ด ์ด๋ฆ„2
FROM ํ…Œ์ด๋ธ”๋ช…1 (AS) ๋ณ„์นญ1 RIGHT (OUTER) JOIN ํ…Œ์ด๋ธ”๋ช…2 (AS) ๋ณ„์นญ2
ON ๋ณ„์นญ1.KEY=๋ณ„์นญ2.KEY;

 

3. FULL OUTER JOIN

 

FULL OUTER JOIN ํ‚ค์›Œ๋“œ๋Š” ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์ด ๋ฐ˜ํ™˜๋œ๋‹ค

=> ์ฆ‰, LEFT JOIN๊ณผ RIGHT JOIN์„ ํ•ฉ์ณ๋†“์€ ํ˜•ํƒœ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Œ

 

SELECT ๋ณ„์นญ1.์—ด ์ด๋ฆ„1, ๋ณ„์นญ2.์—ด ์ด๋ฆ„2
FROM ํ…Œ์ด๋ธ”๋ช…1 (AS) ๋ณ„์นญ1 FULL (OUTER) JOIN ํ…Œ์ด๋ธ”๋ช…2 (AS) ๋ณ„์นญ2
ON ๋ณ„์นญ1.KEY=๋ณ„์นญ2.KEY;

 

 

CUSTOMERS
ORDERS
EMPLOYEE

 

1. CUSTOMERS์™€ ORDERS ํ…Œ์ด๋ธ”์„ ์ด์šฉํ•˜์—ฌ ๊ณ ๊ฐ์•„์ด๋””, ๊ณ ๊ฐ์ด๋ฆ„, ์ฃผ๋ฌธ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  ์ฃผ๋ฌธ์ด๋ ฅ์ด ์žˆ๋Š” ๊ณ ๊ฐ์€ 1, ์—†๋Š” ๊ณ ๊ฐ์€ 0์œผ๋กœ ํ‘œ์‹œํ•œ ํ›„ ๊ณ ๊ฐ์•„์ด๋””๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•˜๋ ค๋ฉด?

 

SELECT TMP1.CUST_ID, TMP1.CUST_NM, TMP2.ORDER_ID, 
CASE WHEN TMP2.CUST_ID IS NOT NULL THEN 1 ELSE 0 END AS ORDER_FLG
FROM CUSTOMERS TMP1 LEFT OUTER JOIN ORDERS TMP2
ON TMP1.CUST_ID = TMP2.CUST_ID
ORDER BY 1;

 

2. EMPLOYEE์™€ OREDERS, CUSTOMERS ํ…Œ์ด๋ธ”์„ ์ด์šฉํ•˜์—ฌ ์ง์›์•„์ด๋””, ์ด๋ฆ„, ํ•ด๋‹น ์ง์›์ด ๋งก์•˜๋˜ ์ฃผ๋ฌธ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  ํ•ด๋‹น ์ฃผ๋ฌธ๋ฒˆํ˜ธ์™€ ๊ณ ๊ฐ์•„์ด๋””๋ฅผ ๋งค์นญ์‹œ์ผœ ๊ณ ๊ฐ์ด๋ฆ„์„ ํ‘œ๊ธฐํ•˜๋ ค๋ฉด?

 

SELECT TMP1.EMP_ID, TMP1.NM, TMP2.ORDER_ID, TMP2.CUST_ID, TMP3.CUST_NM
FROM EMPLOYEE TMP1 LEFT OUTER JOIN ORDERS TMP2 ON TMP1.EMP_ID = TMP2.EMP_ID
     LEFT OUTER JOIN CUSTOMERS TMP3 ON TMP2.CUST_ID = TMP3.CUST_ID;
ORDER BY 1;

 

1. ํ…Œ์ด๋ธ”์„ ํ†ตํ•ฉํ•  ๋•Œ ๊ธฐ์ค€์ด ๋˜๋Š” ํ…Œ์ด๋ธ”์„ ๊ฐ€์žฅ ๋จผ์ € ๋‚˜ํƒ€๋‚ด๋ฉด ๋ฐ์ดํ„ฐ ๋ถ„์„์ด ์šฉ์ดํ•˜๋‹ค

2. LEFT OUTER JOIN์€ WHERE ์กฐ๊ฑด์ ˆ์— *= ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ณ , RIGHT OUTER JOIN์€ WHERE ์กฐ๊ฑด์ ˆ์— =* ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค

3. ACCESS, MY SQL ๋“ฑ ๋ช‡๋ช‡ DBMS์—์„œ๋Š” FULL OUTER JOIN ํ‚ค์›Œ๋“œ๊ฐ€ ์ง€์›๋˜์ง€ X

4. ํ…Œ์ด๋ธ” ๋Œ€์‹  SELECT ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค

=> ํ…Œ์ด๋ธ” ์ „์ฒด๋ฅผ ํ•ฉ์น  ์ˆ˜๋„ ์žˆ๊ณ  ํ…Œ์ด๋ธ” ์ผ๋ถ€๋งŒ ํ•ฉ์น  ์ˆ˜๋„ ์žˆ์Œ

ex. FROM EMPLOYEE TMP1 LEFT OUTER JOIN (SELECT ORDER_ID, CUST_ID FROM ORDERS) TMP2

5. ํ…Œ์ด๋ธ” ๋ณ„์นญ์€ TMP1, TMP2, TMP3 ๋“ฑ๊ณผ ๊ฐ™์ด ์ˆœ์„œ ์žˆ๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ

6. SELECT๋ฌธ์— ์ถœ๋ ฅํ•  ์—ด ์ด๋ฆ„์„ ์ ์„ ๋•Œ ์–ด๋Š ํ…Œ์ด๋ธ”์—์„œ ์ฐธ์กฐ๋˜๋Š” ์—ด ์ด๋ฆ„์ธ์ง€ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด ์ข‹์Œ

 

ํ–‰(Row) ํ•ฉ์น˜๊ธฐ

 

UNION ์—ฐ์‚ฐ์ž

 

1. UNION ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ

 

UNION์€ ๋‘ ๊ฐœ ์ด์ƒ์˜ SELECT๋ฌธ์˜ ํ–‰์„ ํ•ฉ์น˜๋Š” ์—ญํ• ์„ ํ•จ

 

=> ORDER BY์ ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ํ•ฉ์ณ์ง„ ํ›„ ์ „์ฒด์— ์ ์šฉ๋จ!

SELECT ์—ด ์ด๋ฆ„1, ์—ด ์ด๋ฆ„2 FROM ํ…Œ์ด๋ธ”๋ช…1 WHERE ์กฐ๊ฑด์ ˆ
UNION
SELECT ์—ด ์ด๋ฆ„1, ์—ด ์ด๋ฆ„2 FROM ํ…Œ์ด๋ธ”๋ช…2 WHERE ์กฐ๊ฑด์ ˆ
ORDER BY 1;

 

 

2. UNION ALL ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ

 

UNION ALL ์—ฐ์‚ฐ์ž๋Š” ๋‘ ๊ฐœ ์ด์ƒ์˜ SELECT๋ฌธ์˜ ํ–‰์„ ํ•ฉ์น˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค

 

=> UNION ์—ฐ์‚ฐ์ž์™€์˜ ์ฐจ์ด๋Š” UNION ALL์€ ์ค‘๋ณต์„ ํฌํ•จํ•œ ๋ชจ๋“  ๊ฐ’์„ ๋‚˜ํƒ€๋‚ธ๋‹ค๋Š” ์ !

SELECT ์—ด ์ด๋ฆ„1, ์—ด ์ด๋ฆ„2, FROM ํ…Œ์ด๋ธ”๋ช…1 WHERE ์กฐ๊ฑด์ ˆ
UNION ALL
SELECT ์—ด ์ด๋ฆ„1, ์—ด ์ด๋ฆ„2, FROM ํ…Œ์ด๋ธ”๋ช…2 WHERE ์กฐ๊ฑด์ ˆ
ORDER BY 1;

 

CUSTOMERS
ORDERS
EMPLOYEE

 

1. CUSTOMERS์™€ EMPLOYEE ํ…Œ์ด๋ธ”์„ ์ด์šฉํ•˜์—ฌ ์ง์›์ด๋ฆ„๊ณผ ๊ณ ๊ฐ์ด๋ฆ„์„ ํ•ฉ์ณ์„œ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ ค๋ฉด?

 

SELECT CUST_NM AS NM FROM CUSTOMERS
UNION
SELECT NM FROM EMPLOYEE
ORDER BY 1;

 

2. CUSTOMERS์™€ ORDERS ํ…Œ์ด๋ธ”์„ ์ด์šฉํ•˜์—ฌ ์ค‘๋ณต๊ฐ’์„ ํ—ˆ์šฉํ•œ ์ฑ„ ๊ณ ๊ฐ์•„์ด๋””๋ฅผ ํ•ฉ์ณ์„œ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ ค๋ฉด?

 

SELECT CUST_ID FROM CUSTOMERS
UNION ALL
SELECT CUST_ID FROM ORDERS
ORDER BY 1;
๋ฐ˜์‘ํ˜•