[SQL] WHERE, JOIN
Categories: Database
๐ ๊ฐ์ธ์ ์ธ ๊ณต๊ฐ์ผ๋ก ๊ณต๋ถ๋ฅผ ๊ธฐ๋กํ๊ณ ๋ณต์ตํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ธ๋ก๊ทธ์
๋๋ค.
์ ํํ์ง ์์ ์ ๋ณด๊ฐ ์์ ์ ์์ผ๋ ์ฐธ๊ณ ๋ฐ๋๋๋ค :๐ธ
[ํ๋ฆฐ ๋ด์ฉ์ ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์๋ฉด ๋ณต๋ฐ์ผ์ค๊ฑฐ์์]
WHERE์
WHERE
์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ
์ด๋ธ์์ ํน์ ์กฐ๊ฑด์ ๋ง๋ ํ๋ง ์ ํํ์ฌ ์กฐํํ ๋ ์ฌ์ฉ
์ํ๋ ๋ฐ์ดํฐ๋ง ๊ฒ์ํ์ฌ ์ถ์ถํจ์ผ๋ก์จ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถํ๋ฅผ ์ค์ผ ์ ์์
ํญ์ ๋ง์ง๋ง์ ์กด
์์), Users
ํ
์ด๋ธ์์ email
์ ๊ธธ์ด๊ฐ 17 ์ด์์ธ ์ฌ์ฉ์๋ง ์ ํํ๊ณ ์ถ์ ๋
1
SELECT * FROM Users WHERE CHAR_LENGTH(email) >= 17;
- : ๋ชจ๋ ์ปฌ๋ผ์ ๊ฐ์ ธ์ค๋ ๊ฒ.
์์) LoanRecords
ํ
์ด๋ธ์์ return_date
๊ฐ NULL
์ธ ๋์ถ ๊ธฐ๋ก์ return_date
๋ฅผ ํ์ฌ ๋ ์ง๋ก ์
๋ฐ์ดํธ
1
2
3
UPDATE LoanRecords
SET return_date = CURDATE()
WHERE return_date IS NULL;
- ๋น๊ต ์ฐ์ฐ์:
-
<>
๋๋!=
: ๊ฐ์ด ๋ค๋ฆ1 2
SELECT*FROM users WHERE username <> 'kimlucky'
-
>=
: ๊ฐ์ด ํฌ๊ฑฐ๋ ๊ฐ์
-
- IN ์ฐ์ฐ์:
IN
: ์ฃผ์ด์ง ๋ฆฌ์คํธ ์ค ํ๋๋ผ๋ ์ผ์นํ ๋- ์:
SELECT * FROM Books WHERE publisher_id IN (1, 2, 3);
- LIKE ์ฐ์ฐ์:
%
: 0๊ฐ ์ด์์ ๋ฌธ์์ ์ผ์น_
: ํ ๊ฐ์ ๋ฌธ์์ ์ผ์น- ์:
SELECT * FROM Authors WHERE name LIKE 'J%';
- J๊ฐ ์ฒซ๊ธ์์ผ๋
- **
select** * **from** authors **where** name **like** **'%J'**;
- J๊ธ์๊ฐ ๋ง์ง๋ง ๊ธ์์ผ๋
- BETWEEN ์ฐ์ฐ์:
- ๊ฐ์ด ์ง์ ๋ ๋ ๊ฐ ์ฌ์ด์ ์์ด์ผ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
-
์:
SELECT * FROM Books WHERE publication_date BETWEEN '2020-01-01' AND '2020-05-31';
- between A and B ๋ A ์ด์ B ์ดํ๋ก B๋ฅผ ํฌํจ
- ํ์ง๋ง ๋ ์ง ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๊ฒฝ์ฐ์๋ ์๋ถ์ด ๋ฐ์ดํฐ๊น์ง ์๊ฐํ๊ธฐ
- ๋ง์ฝ ๋ ์ง ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋๋ฐ ์๋ถ์ด๊ฐ ์์ด ์ง๊ธ์ฒ๋ผ ๋ ์ง๋ง ์ด์ฉํ๋ค๋ฉด 00์ 00๋ถ 00์ด๋ก ์๋์ผ๋ก ์ธ์๋จ
- ์ฆ โ2020-07-15โ ๋ โ2020-07-15 00:00:00โ ๋ก ์ปดํจํฐ๊ฐ ์ธ์ํ๋ค๋ ์๋ฏธ
- ๊ทธ๋์ 14์ผ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ ค๋ฉด โ2020-07-14โ ๋ 14์ผ์์ 1์ด๋ผ๋ ์ง๋๋ ์๊ฐ โ2020-07-14 00:00:00โ ๋ฅผ ์ด๊ณผํ๊ธฐ ๋๋ฌธ์ โ2020-07-15โ ๋ฅผ ์ด์ฉํ๋ ๊ฒ
IS NULL
์ฐ์ฐ์:- ํด๋น ์ด์ ๊ฐ์ด
NULL
์ธ ํ์ ์ ํ - ์:
SELECT * FROM LoanRecords WHERE return_date IS NULL;
- ํด๋น ์ด์ ๊ฐ์ด
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฌธ์์ด์ ๋น๊ตํ ์ผ์ ์์, ์ฐ๋ฆฌ๊ฐ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ก ๊ฐ์ ธ์์ ๋ฌธ์๋ฅผ ๋น๊ตํจ.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋น์ธ์ ์ ๊ทผ๋ ์ต์ํ ํ๋ ๊ฒ์ด ์ข์.
FUCTION
๋จ์ผํ ํจ์
๋จ์ผํ ํจ์๋ ํ๋์ ์ ๋ ฅ ํ(row)์ ๋ํด ํ๋์ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐํ
์ด ํจ์๋ค์ ๋ฌธ์, ์ซ์, ๋ ์ง ๋ฐ ๊ธฐํ ๋ฐ์ดํฐ ์ ํ์ ์กฐ์ํ์ฌ ํ ๋ณ๋ก ๊ฒฐ๊ณผ ์ ๊ณต
์ฃผ์ ๋จ์ผํ ํจ์ ๋ถ๋ฅ
- ๋ฌธ์ ํจ์:
UPPER()
,LOWER()
,LENGTH()
,SUBSTRING()
,CONCAT()
TRIM()
,REPLACE()
,REVERSE()
,LPAD()
,RPAD()
- ์ซ์ ํจ์ - ์ฐ์ฐ์ ๋ฆฌ์์ค๊ฐ ๋ง์ด ๋์ ์ ์์..> ์๋ฐ๋ก ์ธ ์ ์๋์ง ๊ณ ๋ ค
ROUND()
: ๋ฐ์ฌ๋ฆผ,CEIL():์ฌ๋ฆผ, FLOOR()
:๋ด๋ฆผ,ABS()
,SIGN()
MOD()
,POW()
: ์ ๊ณฑ,SQRT()
,EXP()
,LOG()
- ๋ ์ง ํจ์:
DATE_ADD()
,DATE_SUB()
,DATEDIFF():๋ ๋ ์ง ์ฐจ
,DAY()
,MONTH()
,YEAR()
CURDATE():ํ์ฌ ๋ ์ง
,CURTIME()
,NOW()
- ๋ณํ ํจ์:
CAST()
,CONVERT()
- ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ ํ์ ๋ค๋ฅธ ํ์์ผ๋ก ๋ณํ
- ์กฐ๊ฑด ํจ์:
IF()
,CASE
- NULL ์ฒ๋ฆฌ ํจ์:โจโจ
COALESCE()
,IFNULL()
,NULLIF()
ํจ์ ์ฌ์ฉ ์์
-
๋ฌธ์ ํจ์ ์ฌ์ฉ ์์
Users
ํ ์ด๋ธ์์ ์ฌ์ฉ์ ์ด๋ฆ์ ๋๋ฌธ์๋ก ๋ณํํ๊ณ ์ด๋ฉ์ผ ์ฃผ์์ ๊ธธ์ด๋ฅผ ๊ณ์ฐ1 2 3 4 5
SELECT user_id, UPPER(username) AS UsernameUpper, LENGTH(email) AS EmailLength FROM Users;
-
์ซ์ ํจ์ ์ฌ์ฉ ์์
LoanRecords ํ ์ด๋ธ์์ ๋์ถ ์ผ์ ๊ณ์ฐ (๋์ถ์ผ๋ถํฐ ๋ฐํ์ผ๊น์ง).
๋ฐํ์ผ์ด NULL์ด๋ฉด ๋์ถ ์ค์ผ๋ก ๊ฐ์ฃผํ๊ณ ํ์ฌ ๋ ์ง๊น์ง์ ์ผ์๋ฅผ ๊ณ์ฐ
1 2 3 4 5 6
SELECT record_id, DATEDIFF(IFNULL(return_date, CURDATE()), loan_date) AS LoanDays FROM LoanRecords; //๋๋ค ๋์ด์๋๋ผ๋ฉด return_date ๋ฐํ, ๋ฐ๋ฉ์ํ์ฌ๋์ curdate()๋ก:์ค๋๋ ์ง ๋ฐํ
1 2 3 4 5 6 7 8
SELECT record_id, -- ๋์ถ ๊ธฐ๋ก์ ID๋ฅผ ์ ํ-> ์ด๋ ๊ฐ ํ(๋์ถ ๊ธฐ๋ก)์ ๊ณ ์ ํ๊ฒ ์๋ณ DATEDIFF( -- ๋ ๋ ์ง ๊ฐ์ ์ฐจ์ด๋ฅผ ์ผ ๋จ์๋ก ๊ณ์ฐํ๋ ํจ์ IFNULL(return_date, CURDATE()), -- IFNULL ํจ์๋ ์ฒซ ๋ฒ์งธ ์ธ์๊ฐ NULL์ธ ๊ฒฝ์ฐ ๋ ๋ฒ์งธ ์ธ์๋ฅผ ๋ฐํ. -- ์ฌ๊ธฐ์๋ return_date๊ฐ NULL์ธ ๊ฒฝ์ฐ, ์ฆ ์์ง ๋ฐํ๋์ง ์์ ๊ฒฝ์ฐ ํ์ฌ ๋ ์ง(CURDATE())๋ฅผ ์ฌ์ฉ loan_date -- ๋์ถ ์์ ๋ ์ง, IFNULL์์ ๋ฐํ๋ ๋ ์ง์ ๋น๊ตํ์ฌ ๋์ถ ๊ธฐ๊ฐ์ ๊ณ์ฐ. ) AS LoanDays -- ๊ณ์ฐ๋ ๋์ถ ๊ธฐ๊ฐ์ 'LoanDays'๋ผ๋ ์ด๋ฆ์ ์ด๋ก ๊ฒฐ๊ณผ์ ํ์. FROM LoanRecords; -- LoanRecords ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ
-
๋ ์ง ํจ์ ์ฌ์ฉ ์์
Books ํ ์ด๋ธ์์ ์ถํ์ผ๋ก๋ถํฐ ์ค๋๊น์ง ๊ฒฝ๊ณผํ ์๊ฐ(์ ๊ธฐ์ค)์ ๊ณ์ฐ
1 2 3 4 5
SELECT book_id, title, TIMESTAMPDIFF(MONTH, publication_date, CURDATE()) AS MonthsSincePublication FROM Books;
1 2 3 4 5 6 7 8 9
SELECT book_id, -- ์ฑ ์ ID๋ฅผ ์ ํ-์ฑ ์ ๊ณ ์ ํ๊ฒ ์๋ณ title, -- ์ฑ ์ ์ ๋ชฉ์ ์ ํ TIMESTAMPDIFF( -- ๋ ๋ ์ง ๊ฐ์ ์ฐจ์ด๋ฅผ ๋ฐํํ๋ ํจ์ MONTH, -- ๊ฒฐ๊ณผ๋ฅผ '๊ฐ์'๋ก ๋ฐํํ๋๋ก ์ค์ publication_date, -- ์ถํ ๋ ์ง CURDATE() -- ํ์ฌ ๋ ์ง, ํ์ฌ ๋ ์ง์ ์ถํ ๋ ์ง ์ฌ์ด์ ์ฐจ์ด๋ฅผ ๊ณ์ฐ ) AS MonthsSincePublication -- ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๋ฅผ 'MonthsSincePublication'๋ผ๋ ์ด๋ฆ์ ์ด๋ก ํ์ FROM Books; -- Books ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ
์๊ธฐ์ฝ๋๋ฅผ datediff๋ก ๋ฐ๊ฟ์ฐ๋ฉด
-
๋ณํ ํจ์ ์ฌ์ฉ ์์
Book_Authors ํ ์ด๋ธ์์ ๋์ ID๋ฅผ ๋ฌธ์์ด๋ก ๋ณํ
1 2 3 4
SELECT book_id, CAST(book_id AS CHAR) AS BookIDString FROM Book_Authors;
1 2 3 4
SELECT book_id, CAST(book_id AS CHAR) AS BookIDString -- 'book_id' ํ๋๋ฅผ ๋ฌธ์์ด(CHAR)๋ก ๋ณํ FROM Book_Authors;
-
์กฐ๊ฑด ํจ์ ์ฌ์ฉ ์์
LoanRecords ํ ์ด๋ธ์์ ๊ฐ ๋์ถ ๊ธฐ๋ก์ ๋ํด ๋ฐํ์ผ์ด ์๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ ์ํ ๋ฉ์์ง๋ฅผ ์ ๊ณต
1 2 3 4 5 6 7
SELECT record_id, CASE WHEN return_date IS NULL THEN 'Not Returned' ELSE 'Returned' END AS ReturnStatus FROM LoanRecords;
1 2 3 4 5 6 7
SELECT record_id, CASE WHEN return_date IS NULL THEN 'Not Returned' -- return_date๊ฐ NULL์ธ ๊ฒฝ์ฐ, ์ฆ ๋์ถ์ด ์์ง ๋ฐํ๋์ง ์์๋ค๋ฉด 'Not Returned'์ ๊ฒฐ๊ณผ๋ก ๋ฐํ ELSE 'Returned' -- return_date๊ฐ NULL์ด ์๋ ๊ฒฝ์ฐ, ์ฆ ๋์ถ์ด ๋ฐํ๋์๋ค๋ฉด 'Returned'์ ๊ฒฐ๊ณผ๋ก ๋ฐํ END AS ReturnStatus FROM LoanRecords;
NULL ์ฒ๋ฆฌ ํจ์ ์ฌ์ฉ ์์
LoanRecords ํ ์ด๋ธ์์ ๋ฐํ์ผ์ด NULL์ธ ๊ฒฝ์ฐ, โNot Returnedโ๋ก ํ์ํฉ๋๋ค.
1
2
3
4
SELECT
record_id,
COALESCE(return_date, 'Not Returned') AS ReturnDateChecked
FROM LoanRecords;
1
2
3
4
SELECT
record_id,
COALESCE(return_date, 'Not Returned') AS ReturnDateChecked
FROM LoanRecords;
์ซ์ ํจ์(Numeric Functions)
์ฃผ์ ์ซ์ ํจ์
ROUND(number, decimal_places)
- ์ง์ ๋ ์์์ ์๋ฆฟ์๋ก ์ซ์๋ฅผ ๋ฐ์ฌ๋ฆผ. ์์์ ์๋ฆฟ์ ์๋ต ์ ์ ์๋ก ๋ฐ์ฌ๋ฆผ.TRUNCATE(number, decimal_places)
- ์ซ์๋ฅผ ์ง์ ๋ ์์์ ์๋ฆฟ์๋ก ์ ์ญ. MySQL์์๋TRUNC
๋์TRUNCATE
์ฌ์ฉ.MOD(number1, number2)
- ์ฒซ ๋ฒ์งธ ์ซ์๋ฅผ ๋ ๋ฒ์งธ ์ซ์๋ก ๋๋ ๋๋จธ์ง๋ฅผ ๋ฐํ. (JAVA์์ % ์ ๊ฐ์ ๊ธฐ๋ฅ)CEIL(number)
- ์ซ์๋ฅผ ๊ฐ์ฅ ๊ฐ๊น์ด ํฐ ์ ์๋ก ์ฌ๋ฆผ.FLOOR(number)
- ์ซ์๋ฅผ ๊ฐ์ฅ ๊ฐ๊น์ด ์์ ์ ์๋ก ๋ด๋ฆผ.POWER(number, exponent)
- ์ซ์๋ฅผ ์ง์ ๋ ๊ฑฐ๋ญ์ ๊ณฑ์ผ๋ก ๊ณ์ฐ.ABS(number)
- ์ซ์์ ์ ๋๊ฐ์ ๋ฐํ.SIGN(number)
- ์ซ์์ ๋ถํธ๋ฅผ ๋ฐํํฉ๋๋ค(์์๋ 1, ์์๋ -1, 0์ 0).SQRT(number)
- ์ซ์์ ์ ๊ณฑ๊ทผ์ ๋ฐํ.LOG10(number)
- ์ซ์์ ์์ฉ๋ก๊ทธ(๋ฐ์ด 10) ๊ฐ์ ๋ฐํ.LOG(base, number)
ํ์์ MySQL์์ ์ง์ํ์ง ์์ต๋๋ค.EXP(number)
- e(์์ฐ๋ก๊ทธ์ ๋ฐ)๋ฅผ ์ง์ ๋ ๊ฐ์ผ๋ก ๊ฑฐ๋ญ์ ๊ณฑ.SIN(number)
,COS(number)
,TAN(number)
- ๊ฐ๊ฐ ์ซ์์ ์ฌ์ธ, ์ฝ์ฌ์ธ, ํ์ ํธ ๊ฐ์ ๊ณ์ฐ.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
record_id,
loan_amount,
ROUND(loan_amount, 2) AS rounded_amount,
TRUNCATE(loan_amount, 2) AS truncated_amount,
CEIL(loan_amount) AS ceiling_amount,
FLOOR(loan_amount) AS floor_amount,
MOD(record_id, 2) AS is_even,
SIGN(loan_amount) AS sign_of_amount,
SQRT(loan_amount) AS sqrt_of_amount,
EXP(loan_amount) AS exp_of_amount,
SIN(loan_amount) AS sin_of_amount,
COS(loan_amount) AS cos_of_amount,
TAN(loan_amount) AS tan_of_amount
FROM
LoanRecords;
๋ ์ง ํจ์(Date Functions)
์ฃผ์ ๋ ์ง ํจ์
DATE_ADD(date, INTERVAL expr type)
- ๋ ์ง์ ์ง์ ๋ ๊ธฐ๊ฐ์ ๋ํจ. ์ฌ๊ธฐ์ type์ YEAR, MONTH, DAY ๋ฑ์ด ๊ฐ๋ฅLAST_DAY(date)
- ์ง์ ๋ ๋ ์ง๊ฐ ์ํ ๋ฌ์ ๋ง์ง๋ง ๋ ์ง๋ฅผ ๋ฐํDAYNAME(date)
- ์ง์ ๋ ๋ ์ง์ ์์ผ ์ด๋ฆ์ ๋ฐํDATEDIFF(date1, date2)
- ๋ ๋ ์ง ์ฌ์ด์ ์ผ์ ์ฐจ์ด๋ฅผ ๋ฐํCONVERT_TZ(dt, from_tz, to_tz)
- ๋ ์ง์ ์๊ฐ์ ํ ์๊ฐ๋์์ ๋ค๋ฅธ ์๊ฐ๋๋ก ๋ณํCURRENT_TIMESTAMP
- ํ์ฌ ์์คํ ํ์์คํฌํ๋ฅผ ๋ฐํDATE_FORMAT(date, format)
- ๋ ์ง๋ฅผ ์ง์ ๋ ํ์์ผ๋ก ํ์ํ
๋ ์ง ํจ์ ์ฌ์ฉ ์์
1
2
3
4
5
6
7
8
9
10
SELECT
record_id,
loan_date,
DATE_ADD(loan_date, INTERVAL 3 MONTH) AS loan_date_plus_3_months,
LAST_DAY(loan_date) AS last_day_of_month,
DAYNAME(DATE_ADD(loan_date, INTERVAL 1 DAY)) AS next_day_name,
DATEDIFF(CURRENT_DATE, loan_date) AS days_since_loan,
DATE_FORMAT(loan_date, '%Y-%m') AS formatted_loan_date
FROM
LoanRecords;
๊ฐ ๋์ถ ๊ธฐ๋ก์ loan_date์ ๋ํด 3๊ฐ์ ํ์ ๋ ์ง, ํด๋น ์์ ๋ง์ง๋ง ๋ , ๋ค์ ๋ ์ ์์ผ, ์ค๋๊ณผ ๋์ถ ๋ ์ง ์ฌ์ด์ ์ผ์ ์ฐจ์ด, ๊ทธ๋ฆฌ๊ณ ํ์ํ๋ ๋ ์ง๋ฅผ ๊ณ์ฐํ๊ณ ๋ฐํ
-
์ฝ๋ํ์ด
1 2 3 4 5 6 7 8 9 10 11
SELECT record_id, -- ๊ฐ ๋์ถ ๊ธฐ๋ก์ ๊ณ ์ ์๋ณ์๋ฅผ ์ ํ loan_date, -- ๋์ถ ์์ ๋ ์ง๋ฅผ ์ ํ **DATE_ADD**(loan_date, INTERVAL 3 MONTH) AS loan_date_plus_3_months, -- ๋์ถ ์์ ๋ ์ง์์ 3๊ฐ์์ ๋ํ ๋ ์ง๋ฅผ ๊ณ์ฐ **LAST_DAY**(loan_date) AS last_day_of_month, -- ๋์ถ ์์ ๋ ์ง๊ฐ ์ํ ๋ฌ์ ๋ง์ง๋ง ๋ ์ง๋ฅผ ๊ณ์ฐ **DAYNAME**(DATE_ADD(loan_date, INTERVAL 1 DAY)) AS next_day_name, -- ๋์ถ ์์ ๋ ์ง ๋ค์ ๋ ์ ์์ผ ์ด๋ฆ์ ๋ฐํ **DATEDIFF**(CURRENT_DATE, loan_date) AS days_since_loan, -- ์ค๋ ๋ ์ง์ ๋์ถ ์์ ๋ ์ง ์ฌ์ด์ ์ผ์ ์ฐจ์ด๋ฅผ ๊ณ์ฐ **DATE_FORMAT**(loan_date, **'%Y-%m'**) AS formatted_loan_date -- ๋์ถ ์์ ๋ ์ง๋ฅผ '๋ -์' ํ์์ผ๋ก ํฌ๋งท FROM LoanRecords; -- LoanRecords ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ
๋ณํ ํจ์(Conversion Functions)
๋ณํ ํจ์๋ ๋ฐ์ดํฐ ์ ํ์ ๋ณํํ๊ฑฐ๋ ๋ค๋ฅธ ํ์์ผ๋ก ํํํ๋ ๋ฐ ์ฌ์ฉ
์ด ํจ์๋ค์ ๋ฌธ์์ด์ ์ซ์ ๋๋ ๋ ์ง๋ก ๋ณํํ๊ฑฐ๋ ์ซ์ ๋ฐ ๋ ์ง๋ฅผ ๋ค๋ฅธ ํ์์ ๋ฌธ์์ด๋ก ๋ณํ
์ฃผ์ ๋ณํ ํจ์
CAST(expression AS type)
- ํํ์์ ์ง์ ๋ ๋ฐ์ดํฐ ์ ํ์ผ๋ก ๋ณํCONVERT(expression, type)
- ํํ์์ ๋ค๋ฅธ ์ ํ์ผ๋ก ๋ณํ,CAST
์ ์ ์ฌํ์ง๋ง ๊ตฌ๋ฌธ์ด ๋ค๋ฆ
๋ณํ ํจ์ ์ฌ์ฉ ์์
1
2
3
4
5
6
7
8
SELECT
record_id,
loan_date,
CAST(loan_date AS CHAR) AS loan_date_char,
loan_amount,
CONVERT(loan_amount, CHAR) AS loan_amount_char
FROM
LoanRecords;
NULL ๊ด๋ จ ํจ์(Null Functions)
MySQL์์๋ NULL ๊ฐ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํจ์
NULL ๊ฐ์ ๊ธฐ๋ณธ ๊ฐ์ผ๋ก ๋์ฒดํ๊ฑฐ๋
์ฌ๋ฌ ํํ์ ์ค NULL์ด ์๋ ์ฒซ ๋ฒ์งธ ๊ฐ์ ์ ํํ๋ ๋ฑ NULL ๊ฐ์ ๋ํ ์์ ์ ์ํ
์ฃผ์ NULL ๊ด๋ จ ํจ์
IFNULL(expression1, expression2)
- expression1์ด NULL์ธ ๊ฒฝ์ฐ expression2๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด expression1์ ๋ฐํํฉ๋๋ค.COALESCE(expression1, expression2, ...)
- ์ธ์ ๋ชฉ๋ก(์ฌ๋ฌ๊ฐ ๋ค์ด์ฌ ์ ์์)์์ ์ฒซ ๋ฒ์งธ NULL์ด ์๋ ๊ฐ์ ๋ฐํ, ๋ชจ๋ ์ธ์๊ฐ NULL์ด๋ฉด NULL์ ๋ฐํํฉ๋๋ค.NULLIF(expression1, expression2)
- expression1๊ณผ expression2๊ฐ ๊ฐ์ผ๋ฉด NULL์ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด expression1์ ๋ฐํ
NULL ๊ด๋ จ ํจ์ ์ฌ์ฉ ์์
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-- IFNULL ์ฌ์ฉ ์์
SELECT
record_id,
IFNULL(return_date, 'Not Returned Yet') AS return_status
FROM
LoanRecords;
-- COALESCE ์ฌ์ฉ ์์
SELECT
record_id,
COALESCE(return_date, loan_date, CURRENT_DATE) AS effective_date
FROM
LoanRecords;
-- NULLIF ์ฌ์ฉ ์์
SELECT
user_id,
email,
NULLIF(email, '') AS valid_email -- Treat empty string as NULL
FROM
Users;
LoanRecords ํ ์ด๋ธ์์ ๋ฐํ์ผ์ด NULL์ธ ๊ฒฝ์ฐ, โNot Returnedโ๋ก ํ์
1
2
3
4
SELECT
record_id,
COALESCE(return_date, 'Not Returned') AS ReturnDateChecked
FROM LoanRecords;
1
2
3
4
SELECT
record_id, -- ๋์ถ ๊ธฐ๋ก์ ID๋ฅผ ์ ํ
COALESCE(return_date, 'Not Returned') AS ReturnDateChecked '-- COALESCE ํจ์๋ฅผ ์ฌ์ฉํ์ฌ return_date ์ด์ ๊ฒ์ฌํฉ๋๋ค.
FROM LoanRecords; -- LoanRecords ํ
์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ
์ค๋ฌด ํ์ฉ ์์
-
์์ต ๊ณ์ฐ:
IFNULL
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ง์์ ์ปค๋ฏธ์ ๋น์จ์ด NULL์ธ ๊ฒฝ์ฐ 0์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์๊ธ์ ์ปค๋ฏธ์ ์ ๋ํ์ฌ ์ด ์์ต์ ๊ณ์ฐ1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
CREATE TABLE Employees ( employee_id INT AUTO_INCREMENT PRIMARY KEY, first_name VARCHAR(255) NOT NULL, salary DECIMAL(10, 2), commission_pct DECIMAL(10, 2) -- ์ปค๋ฏธ์ ๋น์จ; ๊ธ์ฌ์ ๋ํ ๋ฐฑ๋ถ์จ๋ก ํ์ ); INSERT INTO Employees (first_name, salary, commission_pct) VALUES ('John', 50000, 0.05), ('Jane', 60000, 0.10), ('Doe', 55000, NULL), ('Alice', 70000, 0.15), ('Bob', 40000, NULL); SELECT employee_id, -- ์ง์์ ๊ณ ์ ID๋ฅผ ์ ํํฉ๋๋ค. first_name, -- ์ง์์ ์ด๋ฆ์ ์ ํํฉ๋๋ค. salary, -- ์ง์์ ๊ธฐ๋ณธ ๊ธ์ฌ๋ฅผ ์ ํํฉ๋๋ค. IFNULL(commission_pct, 0) * salary AS commission, -- ๊ณ์ฐ, ์ปค๋ฏธ์ ๋น์จ์ด NULL์ธ ๊ฒฝ์ฐ 0์ ์ฌ์ฉ. salary + (IFNULL(commission_pct, 0) * salary) AS total_income -- ์ด ์์ ์ ๊ณ์ฐํฉ๋๋ค. ๊ธฐ๋ณธ ๊ธ์ฌ์ ์ปค๋ฏธ์ ์ ๋ํฉ๋๋ค. FROM Employees; -- Employees ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ
-
์ฃผ์ ์ ๋ณด ์ฒ๋ฆฌ:
COALESCE
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฃผ๋ฌธ์ ๋ฐฐ์ก ์ฃผ์๊ฐ ์๋ ๊ฒฝ์ฐ ์ฒญ๊ตฌ ์ฃผ์๋ฅผ ์ฌ์ฉํ๊ณ , ๊ทธ๊ฒ๋ ์๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ์ฃผ์๋ฅผ ์ ๊ณตํ ์ ์๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE TABLE Orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
customer_id INT,
shipping_address VARCHAR(255),
billing_address VARCHAR(255)
);
INSERT INTO Orders (customer_id, shipping_address, billing_address) VALUES
(1, '1234 Elm St, YourCity, YS', NULL),
(2, NULL, '4321 Pine St, MyCity, MS'),
(3, '7890 Maple St, OurCity, OS', '7890 Maple St, OurCity, OS'),
(4, NULL, NULL);
SELECT
order_id, -- ์ฃผ๋ฌธ ID๋ฅผ ์ ํ
customer_id, -- ๊ณ ๊ฐ ID๋ฅผ ์ ํ
COALESCE(shipping_address, billing_address, 'No Address Provided') AS address -- ๋ฐฐ์ก ์ฃผ์์ ์ฒญ๊ตฌ ์ฃผ์ ์ค ์ฒซ ๋ฒ์งธ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ์ฃผ์๋ฅผ ์ฌ์ฉํ๋ค.
FROM
Orders; -- Orders ํ
์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ
- ํน์ ๊ฐ์ผ๋ก ๋๋๊ธฐ ์ฐ์ฐ ์ํ: ๋๋์
์์ ๋ถ๋ชจ๊ฐ 0์ด ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด
NULLIF
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ๋ชจ๊ฐ 0์ธ ๊ฒฝ์ฐ NULL์ ๋ฐํํ๋๋ก ํ ์ ์๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE TABLE OrderItems (
product_id INT,
product_name VARCHAR(255),
total_price DECIMAL(10, 2),
total_quantity INT
);
INSERT INTO OrderItems (product_id, product_name, total_price, total_quantity) VALUES
(1, 'Widget A', 100.00, 10),
(2, 'Widget B', 150.00, 5),
(3, 'Widget C', 200.00, 0), -- ์ด ๊ฒฝ์ฐ ํญ๋ชฉ๋น ํ๊ท ๊ฐ๊ฒฉ์ ๊ณ์ฐ๋์ง ์๋๋ค.
(4, 'Widget D', 250.00, 25);
SELECT
product_id, -- ์ ํ ID๋ฅผ ์ ํ
product_name, -- ์ ํ ์ด๋ฆ์ ์ ํ
total_price / NULLIF(total_quantity, 0) AS average_price_per_item -- ์ด ๊ฐ๊ฒฉ์ ์ด ์๋์ผ๋ก ๋๋์ด ํญ๋ชฉ๋น ํ๊ท ๊ฐ๊ฒฉ์ ๊ณ์ฐ
FROM
OrderItems; -- OrderItems ํ
์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ
๋จ์ผํ CASE ํํ์
MySQL์์ ๋จ์ผํ CASE ํํ์์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฐ์ ๋ฐํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ ผ๋ฆฌ ๊ตฌ์กฐ
์ด ๊ตฌ์กฐ๋ ์กฐ๊ฑด์ ๋ ผ๋ฆฌ๋ฅผ ์ฟผ๋ฆฌ์ ํตํฉํ์ฌ ๋ณต์กํ ๋ฐ์ดํฐ ์ง์๋ฅผ ๋จ์ํํ๊ณ , ๋์ ๊ฒฐ๊ณผ๋ฅผ ์์ฑ
CASE ํํ์์ ๋ ๊ฐ์ง ํํ๋ก ์ฌ์ฉ : Simple CASE Expression๊ณผ Searched CASE Expression.
Simple CASE Expression
Simple CASE Expression์ ์ ๋ ฅ ๊ฐ์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ฐ๋ฅํ ๊ฒฐ๊ณผ ์ค ํ๋๋ฅผ ๋ฐํ
1
2
3
4
5
6
CASE
WHEN value1 LIKE input_expression THEN result1
WHEN value2 LIKE input_expression THEN result2
...
ELSE default_result
END
Searched CASE Expression
Searched CASE Expression์ ํ๋ ์ด์์ ์กฐ๊ฑด์ ํ๊ฐํ์ฌ ํด๋นํ๋ ์ฒซ ๋ฒ์งธ ์กฐ๊ฑด์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ
1
2
3
4
5
6
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END
์ฌ์ฉ ์์
Simple CASE Expression ์์
Users ํ ์ด๋ธ์์ ์ฌ์ฉ์์ ์ด๋ฉ์ผ ๋๋ฉ์ธ์ ๋ฐ๋ผ ์ฌ์ฉ์ ์ ํ์ ๋ถ๋ฅํ๋ ์์
1
2
3
4
5
6
7
8
9
10
SELECT
user_id, -- ์ฌ์ฉ์์ ๊ณ ์ ID๋ฅผ ์ ํ
email, -- ์ฌ์ฉ์์ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ์ ํ
CASE
WHEN email LIKE '%@example.com' THEN 'Corporate' -- ์ด๋ฉ์ผ ์ฃผ์๊ฐ '@example.com'์ผ๋ก ๋๋๋ฉด 'Corporate'๋ก ๋ถ๋ฅํฉ๋๋ค.
WHEN email LIKE '%@gmail.com' THEN 'Personal' -- ์ด๋ฉ์ผ ์ฃผ์๊ฐ '@gmail.com'์ผ๋ก ๋๋๋ฉด 'Personal'๋ก ๋ถ๋ฅ
ELSE 'Other' -- ์์ ๊ฒฝ์ฐ์ ํด๋นํ์ง ์์ผ๋ฉด 'Other'๋ก ๋ถ๋ฅ
END AS user_type -- ๋ถ๋ฅ๋ ์ฌ์ฉ์ ์ ํ์ 'user_type'์ด๋ผ๋ ์๋ก์ด ์ด๋ก ํ์
FROM
Users; -- Users ํ
์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ
Searched CASE Expression ์์
LoanRecords
ํ
์ด๋ธ์์ ๋์ถ ๊ธฐ๋ก์ ์ํ๋ฅผ ํ๊ฐํ์ฌ ์ํ์ ๋ฐ๋ผ ๋ฉ์์ง๋ฅผ ๋ฐํํ๋ ์์
1
2
3
4
5
6
7
8
9
10
11
SELECT
record_id, -- ๋์ถ ๊ธฐ๋ก์ ๊ณ ์ ์๋ณ์๋ฅผ ์ ํ
loan_date, -- ๋์ถ ์์ ๋ ์ง๋ฅผ ์ ํ
return_date, -- ๋์ถ ๋ฐํ ๋ ์ง๋ฅผ ์ ํ
CASE
WHEN return_date IS NULL THEN 'Not Returned Yet' -- ๋ฐํ ๋ ์ง๊ฐ NULL์ธ ๊ฒฝ์ฐ, ๋์ถ์ด ์์ง ๋ฐํ๋์ง ์์์์ ๋ํ๋ธ๋ค
WHEN DATEDIFF(loan_date, return_date) < -13 THEN 'Overdue' -- ๋ฐํ ๋ ์ง๋ก๋ถํฐ ํ์ฌ๊น์ง์ ์ผ์๊ฐ 14์ผ์ ์ด๊ณผํ๋ ๊ฒฝ์ฐ, ๋์ถ์ด ์ฐ์ฒด๋์์์ ๋ํ๋ธ๋ค
ELSE 'Returned On Time' -- ์์ ์กฐ๊ฑด์ ํด๋นํ์ง ์๋ ๊ฒฝ์ฐ, ๋์ถ์ด ์ ์๊ฐ์ ๋ฐํ๋์๋ค
END AS loan_status -- ๋์ถ์ ์ํ๋ฅผ 'loan_status'๋ผ๋ ์ด๋ฆ์ ์ด๋ก ํ์
FROM
LoanRecords; -- LoanRecords ํ
์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ
Simple CASE๋ ๋ช ์์ ์ธ ๊ฐ์ ๋น๊ตํ๋ ๋ฐ๋ฉด,
Searched CASE๋ ์กฐ๊ฑด์์ ํ๊ฐํ์ฌ ๋ณด๋ค ๋์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ ์ ์์.
์ด๋ฅผ ํตํด ๋ฐ์ดํฐ ๋ถ์ ๋ฐ ๋ณด๊ณ ์ ์์ฑ ๊ณผ์ ์์ ์ ์ฐ์ฑ์ ํฌ๊ฒ ํฅ์ ๊ฐ๋ฅ.
JOIN โจโจโจโจโจโจ๊ฐ์ฅ ์ค์!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
posts์์ follows๋ฅผ ์๋ก ์กฐ์ธ ํ ์ ์๋์ง (๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ ์ฌ ์ ์๋์ง ) โ๊ฐ๋ฅ.
๊ทธ๋ ์ง๋ง ๋ฐฉ์์ด ๋ณต์ก.
ANSI ํ์ค ์กฐ์ธ (ANSI Standard Joins)
ANSI ํ์ค ์กฐ์ธ์ SQL์์ ํ ์ด๋ธ ๊ฐ์ ์ฐ๊ฒฐ์ ์ ์ํ๋ ๋ฐฉ๋ฒ ์ค ํ๋
ANSI(SQL ํ์ค์ ๊ฐ๋ฐํ ๊ธฐ๊ตฌ)์์ ์ ์ํ ํ์คํ ๋ ํ์
ANSI ํ์ค ์กฐ์ธ์ ๊ฐ๋ ์ฑ์ด ์ข๊ณ , ์ผ๊ด์ฑ์ ์ ์งํ ์ ์๋ ๋ฐฉ์์ผ๋ก ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ฅผ ํํ ๊ฐ๋ฅ
ANSI ์กฐ์ธ์ ์ข ๋ฅโจโจ -
- INNER JOIN: ๋ ํ ์ด๋ธ ๊ฐ์ ์ผ์นํ๋ ํ๋ง ๊ฒฐ๊ณผ์ ํฌํจ
- LEFT OUTER JOIN: ์ผ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ํ์ ๊ฒฐ๊ณผ์ ํฌํจํ๊ณ , ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์์ ์ผ์นํ๋ ํ์ด ์๋ ๊ฒฝ์ฐ NULL ๊ฐ์ ์ฌ์ฉ
- RIGHT OUTER JOIN: ์ค๋ฅธ์ชฝ ํ
์ด๋ธ์ ๋ชจ๋ ํ์ ๊ฒฐ๊ณผ์ ํฌํจํ๊ณ , ์ผ์ชฝ ํ
์ด๋ธ์์ ์ผ์นํ๋ ํ์ด ์๋ ๊ฒฝ์ฐ NULL ๊ฐ์ ์ฌ์ฉ
- ๊ธฐ์ค์ด LEFT์ธ์ง Right์ธ์ง ,
- FULL OUTER JOIN: ๋ ํ ์ด๋ธ์ ๋ชจ๋ ํ์ ๊ฒฐ๊ณผ์ ํฌํจํ๊ณ , ์ผ์นํ๋ ํ์ด ์๋ ๊ฒฝ์ฐ NULL ๊ฐ์ ์ฌ์ฉํ๋ค.
ANSI ์กฐ์ธ์ ๊ตฌ๋ฌธ
1
2
3
4
5
6
7
8
9
SELECT
column1, column2, ...
FROM
table1
JOIN type
table2
ON
table1.column = table2.column;
ON์ ๊ผญ ์์ด์ผ ํจ, ๊ด๊ณ๋ฅผ ๋ฃ์ด์ฃผ๋ ๊ณณ= ๊ธฐ๋ณธ ํค์ธ์ง ์ฐธ์กฐ ํค์ธ์ง ์ ์ด์ผ ํจ.
์์
1
2
3
4
5
6
7
8
SELECT
Books.book_id, Books.title, Publishers.name //๋ค๋ฅธํ
์ด๋ธ์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ด - ์กฐ์ธํด์ค์ผํจ.
FROM
Books
INNER JOIN
Publishers
ON
Books.publisher_id = Publishers.publisher_id; //์ธ๋ํค์ ๊ธฐ๋ณธํค๊ฐ ๋ค์ด๊ฐ์ผ ํจ.
PUBLISHER์ ์ง์ฐ๋ฉด ๊ธฐ๋ณธํค๋ NULL์ด ๋ ์ ์์ด์ ์ถํ์ฌ๊ฐ ์๋ ํ์ ๋์ค์ง ์์
INNER JOIN์ ์ฐ๊ฒฐ๋ ๋ฐ์ดํฐ๋ง ๋์ด.
-
๊ฒฐ๊ณผ
<
>
- MySQL INNER JOIN:
- ๋ ํ
์ด๋ธ ๊ฐ์ ์ผ์นํ๋ ํ๋ง ๊ฒฐ๊ณผ์ ํฌํจํฉ๋๋ค.
- ๋ ํ
์ด๋ธ ๊ฐ์ ์ผ์นํ๋ ํ๋ง ๊ฒฐ๊ณผ์ ํฌํจํฉ๋๋ค.
- MySQL OUTER JOIN:
- ๊ฒฐ๊ณผ์ ๋ ํ
์ด๋ธ ์ค ํ๋์ ๋ชจ๋ ํ์ ํฌํจํ๋ฉฐ,
- ์ผ์นํ๋ ํ์ด ์๋ ๊ฒฝ์ฐ NULL ๊ฐ์ ์ฌ์ฉ
- OUTER JOIN์ LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN์ผ๋ก ๋๋ฉ๋๋ค.
- ๊ฒฐ๊ณผ์ ๋ ํ
์ด๋ธ ์ค ํ๋์ ๋ชจ๋ ํ์ ํฌํจํ๋ฉฐ,
MySQL INNER JOIN
์๋ฅผ ๋ค์ด, Books ํ ์ด๋ธ๊ณผ Authors ๋ฐ Book_Authors ํ ์ด๋ธ์ ์ฌ์ฉํ์ฌ ๊ฐ ๋์์ ์ ์ ์ ๋ณด๋ฅผ ์ป๊ณ ์ถ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์๋ค
1
2
3
4
5
6
7
8
9
10
11
12
SELECT
Books.title, Authors.name
FROM
Books
INNER JOIN
Book_Authors
ON
Books.book_id = Book_Authors.book_id
INNER JOIN
Authors
ON
Book_Authors.author_id = Authors.author_id;
์๋ก ํ์ ์ถ๊ฐํ ๊ฒฝ์ฐ ์ฐ๊ฒฐ์ด ์๋จ.
๊ทธ๋ด๊ฒฝ์ฐ books., authors.๋ก ๋ถ๋ฌ์์ผ
MySQL LEFT OUTER JOIN
1
2
3
4
5
6
7
8
9
10
11
12
SELECT
Books.title, Authors.name
FROM
Books
LEFT JOIN
Book_Authors
ON
Books.book_id = Book_Authors.book_id
LEFT JOIN
Authors
ON
Book_Authors.author_id = Authors.author_id;
-
์์ ๋ฌธ์
Q. loanrecords.record_id, loanrecords.loan_date ,loanrecords.return_date, users.username , books์ title, author์ name ์ ์กฐ์ธํด์ ๋ถ๋ฌ์ค๊ณ ์ถ์ ๋
Q. ์๋ฆฌ์ค๊ฐ ๋น๋ ธ๋ ์ฑ ์ column ๋ค ๊ฐ์ ธ์ค๊ธฐ
[๊ฐ์ฌ๋ ํ์ด]
Q. ๋์ถ๊ธฐ๋ก์ด ์๋ USER์ ์ด๋ฆ๊ณผ ์ฑ ์ ์ด๋ฆ์ ์ถ๋ ฅํ์ธ์, BUT ๋์ถ ๊ธฐ๋ก์ด ์๋ USER๋ ๋ชจ๋ ์ถ๋ ฅ๋์ด์ผ ํจ.
๋ ์ค์ ํ๋๋ผ๋ left๋ฅผ ์ง์ฐ๊ฒ ๋๋ฉด null๊ฐ์ด ๋์ค์ง ์๊ฒ ๋จ.
์ดํด๊ฐ ์๋๋ฉด ์๋์ฒ๋ผ ์ด๋ผ๋ ๊ตฌํํ๊ณ ์ดํดํ๊ธฐ
NATURAL JOIN ๊ตฌ๋ฌธ
1
2
3
4
5
6
SELECT
column1, column2, ...
FROM
table1
NATURAL JOIN
table2;
NATURAL JOIN ์์
USING ์
USING ์ ์ ๋ ํ ์ด๋ธ ๊ฐ์ JOIN์ ์ํํ ๋, ๋ช ์์ ์ผ๋ก ์ผ์นํ๋ ์ปฌ๋ผ ์ด๋ฆ์ ์ง์ ํ์ฌ JOIN์ ์ํํฉ๋๋ค. ์ด ๋ ์ง์ ๋ ์ปฌ๋ผ์ ๊ฒฐ๊ณผ ์งํฉ์์ ์ค๋ณต์ผ๋ก ํ์๋์ง ์์ต๋๋ค.
USING ์ ๊ตฌ๋ฌธ
1
2
3
4
5
6
7
SELECT
column1, column2, ...
FROM
table1
JOIN
table2
USING (column_name);
NATURAL๊ณผ USING์ INNER์ ๋น์ทํ๋ฐ ์ ์ฌ์ฉํ์ง ์์..
Leave a comment