์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ ๋๋ ์กฐํํ๊ธฐ ์ํด DB์ ํต์ ํ ๋ DB ์๋ฒ๋ก ์ ๋ฌ๋๋ ๊ฒ์ SQL ๋ฟ์ด๋ค.
SQL์ ์ด๋ ํ(What) ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ธฐ ์ํ ์ธ์ด์ด์ง, ์ด๋ป๊ฒ(How) ๋ฐ์ดํฐ๋ฅผ ์ฝ์์ง๋ฅผ ํํํ๋ ์ธ์ด๋ ์๋๋ฏ๋ก ์๋ฐ์ ๊ฐ์ ์ธ์ด์ ๋น๊ตํ์ ๋ ์ ํ์ ์ผ๋ก ๋๊ปด์ง ์ ์๋ค.
๊ทธ๋์ ์ฟผ๋ฆฌ๊ฐ ๋น ๋ฅด๊ฒ ์ํ๋๊ฒ ํ๋ ค๋ฉด DB ์๋ฒ์์ ์ฟผ๋ฆฌ๊ฐ ์ด๋ป๊ฒ ์์ฒญ์ ์ฒ๋ฆฌํ ์ง ์์ธกํ ์ ์์ด์ผ ํ๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ํ๋ํด์ ์ฑ๋ฅ์ ๊ฐ์ ํ๋ค๋ ๊ฒ์ ์ฝ์ง ์์ง๋ง, DBMS์์๋ ๋ช์ญ ๋ช๋ฐฑ ๋ฐฐ์ ์ฑ๋ฅ ํ๋์ ํํ ์ผ์ด๋ค.
๋ฐ๋ผ์ SQL ์์ฑ ๋ฐฉ๋ฒ์ด๋ ๊ท์น์ ๋ฌผ๋ก , ๋ด๋ถ์ ์ธ ์ฒ๋ฆฌ ๋ฐฉ์(์ตํฐ๋ง์ด์ )์ ๋ํด ๊ณต๋ถํด์ผ ํ๋ค.
1. MySQL ์ฐ์ฐ์
(1) ๋ ์ง
๋ค๋ฅธ DBMS์์ ๋ ์ง ํ์
์ ๋น๊ตํ๊ฑฐ๋ INSERTํ๋ ค๋ฉด ๋ฌธ์์ด์ DATE ํ์
์ผ๋ก ๋ณํํ๋ ์ฝ๋๊ฐ ํ์ํ๋ค.
ํ์ง๋ง MySQL์์๋ ์ ํด์ง ํํ์ ๋ ์ง ํฌ๋งท์ผ๋ก ํ๊ธฐํ๋ฉด MySQL ์๋ฒ๊ฐ ์๋์ผ๋ก DATE๋ DATETIME ๊ฐ์ผ๋ก ๋ณํํ๊ธฐ ๋๋ฌธ์ ๋ณต์กํ๊ฒ STR_TO_DATE() ๊ฐ์ ํจ์๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋๋ค.
(2) ๋ถ๋ฆฌ์ธ
BOOL์ด๋ BOOLEAN์ด๋ผ๋ ํ์
์ด ์์ง๋ง ์ฌ์ค TINYINT ํ์
์ ๋ํ ๋์์ด์ผ ๋ฟ์ด๋ค.
BOOL ํ์
์ผ๋ก ์ปฌ๋ผ์ ์์ฑํด๋ ๊ฒฐ๊ตญ์๋ TINYINT๋ก ๋ช
์๋์ด ์๋ค.
๋ํ, MySQL์ C/C++ ์ธ์ด์์์ฒ๋ผ TRUE ๋๋ FALSE ๊ฐ์ ๋ถ๋ฆฌ์ธ ๊ฐ์ 1๊ณผ 0 ์ ์๋ก ๋งคํํด์ ์ฌ์ฉํ๋ค.
(3) ๋๋ฑ( Equal ) ๋น๊ต( =, <=> )
๋ค๋ฅธ DBMS์ ๋ง์ฐฌ๊ฐ์ง๋ก "=" ๊ธฐํธ๋ฅผ ์ฌ์ฉํด์ ๋น๊ต๋ฅผ ์ํํ ์ ์๋ค.
๊ทธ ์ธ์๋ MySQL์ NULL ๊ฐ์ ๋ํ ๋น๊ต๊น์ง ์ํํ ์ ์๋ "<=>" NULL-Safe ๋น๊ต ์ฐ์ฐ์๋ ์ ๊ณตํ๋ค.
(4) ๋ถ์ ( Not-Equal ) ๋น๊ต( <>, != )
๊ฐ์ง ์์์ ๋น๊ตํ๊ธฐ ์ํ ์ฐ์ฐ์๋ก "<>" ๋ฅผ ์ผ๋ฐ์ ์ผ๋ก ๋ง์ด ์ฌ์ฉํ๋ค.
๋ํ, "!=" ์ฐ์ฐ์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ฏ๋ก ๋ ์ค์ ํ๋๋ก ํต์ผํ์ฌ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ๋
์ฑ์ ์ข๋ค.
(5) AND(&&)์ OR(||) ์ฐ์ฐ์
์ผ๋ฐ์ ์ผ๋ก DBMS์์๋ ๋ถ๋ฆฌ์ธ ํํ์์ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐํฉํ๊ธฐ ์ํด AND๋ OR์ ์ฌ์ฉํ๋ค.
MySQL์์๋ AND๋ "&&", OR์ "||" ๊ณผ ๊ฐ์ ์ฐ์ฐ์๋ก ๋์ฒด ๊ฐ๋ฅํ๋ค.
ํ์ง๋ง, ์ค๋ผํด์์๋ "||"๋ฅผ ๋ถ๋ฆฌ์ธ ํํ์์ ๊ฒฐํฉ ์ฐ์ฐ์๊ฐ ์๋๋ผ ๋ฌธ์์ด์ ๊ฒฐํฉํ๋ ์ฐ์ฐ์๋ก ์ฌ์ฉํ๋ค.
๋ฐ๋ผ์, SQL ๊ฐ๋ ์ฑ์ ๋์ด๊ธฐ ์ํด์๋ ๋ค๋ฅธ ์ฉ๋๋ก ์ฌ์ฉ ๊ฐ๋ฅํ "&&"์ "||"๋ ์ฌ์ฉ์ ์์ ํ๋ ๊ฒ์ด ์ข๋ค.
๋ํ, ์ฃผ์ํด์ผ ํ ๋ถ๋ถ์ AND๊ฐ OR๋ณด๋ค ์ฐ์ฐ ์ฐ์ ์์๊ฐ ๋๋ค๋ ์ ์ด๋ค.
(6) ๋๋๊ธฐ( /, DIV )์ ๋๋จธ์ง( %, MOD ) ์ฐ์ฐ์
"/" ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ์์์ ๊น์ง ๋ชซ์ ๊ฐ์ ธ์ค๊ณ , DIV ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ชซ์ ์ ์ ๋ถ๋ถ๋ง ๊ฐ์ ธ์จ๋ค.
๋๋จธ์ง๋ฅผ ๊ฐ์ ธ์ค๋ "%"์ MOD ์ฐ์ฐ์๋ ๋๊ฐ์ ์ถ๋ ฅ๊ฐ์ ๊ฐ์ง๋ค.
(7) LIKE ์ฐ์ฐ์
REGEXP ์ฐ์ฐ์๋ ์ธ๋ฑ์ค๋ฅผ ์ ํ ์ฌ์ฉํ์ง ๋ชปํ๋ค๋ ๋จ์ ์ด ์์ง๋ง LIKE๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
LIKE ์ฐ์ฐ์๋ ์ ๊ท ํํ์์ ๊ฒ์ฌํ๋ ๊ฒ์ด ์๋๋ผ ์ด๋ค ์์ ๋ฌธ์์ด์ด ์๋์ง ์๋์ง ์ ๋๋ฅผ ํ๋ณํ๋ ์ฐ์ฐ์๋ค.
์ฌ์ฉํ ์ ์๋ ์์ผ๋ ์นด๋๋ ์๋์ ๊ฐ๋ค.
- %: 0 ๋๋ 1๊ฐ ์ด์์ ๋ชจ๋ ๋ฌธ์์ ์ผ์น(๋ฌธ์์ ๋ด์ฉ๊ณผ ๊ด๊ณ์์ด)
- _: ์ ํํ 1๊ฐ์ ๋ฌธ์์ ์ผ์น(๋ฌธ์์ ๋ด์ฉ๊ณผ ๊ด๊ณ์์ด)
LIKE ์ฐ์ฐ์๋ ์์ผ๋์นด๋ ๋ฌธ์์ธ "%", "_"๊ฐ ๊ฒ์์ด์ ๋ค์ชฝ์ ์๋ค๋ฉด ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ์ผ๋ก ์ฌ์ฉํ ์ ์์ง๋ง ์์ผ๋์นด๋๊ฐ ๊ฒ์์ด์ ์์ชฝ์ ์๋ค๋ฉด ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ์ฃผ์ํด์ ์ฌ์ฉํด์ผ ํ๋ค.
(8) BETWEEN ์ฐ์ฐ์
ํฌ๊ฑฐ๋ ๊ฐ๋ค์ ์๊ฑฐ๋ ๊ฐ๋ค๋ ๋ ๊ฐ์ ์ฐ์ฐ์๋ฅผ ํ๋๋ก ํฉ์น ์ฐ์ฐ์๋ค.
ํ์ง๋ง ์ฃผ์ํด์ผ ํ ์ ์ด ์๋ค. ์๋์์ ์ดํด๋ณด์.
1. SELECT * FROM dept_emp WHERE dept_no='d003' AND emp_no=10001;
2. SELECT * FROM dept_emp WHERE dept_no BETWEEN 'd003' AND 'd005' AND emp_no=10001;
dept_emp ํ
์ด๋ธ์๋ (dept_no, emp_no) ์ปฌ๋ผ์ผ๋ก ๊ตฌ์ฑ๋ PK๊ฐ ์กด์ฌํ๋ค๊ณ ๊ฐ์ ํ๋ค.
์ฒซ ๋ฒ์งธ ์ฟผ๋ฆฌ๋ dept_no์ emp_no ์กฐ๊ฑด ๋ชจ๋ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด ๋ฒ์๋ฅผ ์ค์ฌ์ฃผ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
ํ์ง๋ง, ๋ ๋ฒ์งธ ์ฟผ๋ฆฌ์์ ์ฌ์ฉํ BETWEEN ์ฐ์ฐ์ ๊ฐ์ ๊ฒฝ์ฐ ๋ฒ์๋ฅผ ์ฝ์ด์ผ ํ๋ฏ๋ก 'd003'๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ 'd005'๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๋ชจ๋ ์ธ๋ฑ์ค ๋ฒ์๋ฅผ ๊ฒ์ํด์ผ๋ง ํ๋ค. ์ฌ๊ธฐ์ emp_no=10001์ ์กฐ๊ฑด์ ๋น๊ต ๋ฒ์๋ฅผ ์ค์ด๋ ์ญํ ์ ํ์ง ๋ชปํ๋ค.
๊ฒฐ๊ตญ ๋ ๋ฒ์งธ ์ฟผ๋ฆฌ๋ dept_emp ํ
์ด๋ธ์ (dept_no, emp_no) ์ธ๋ฑ์ค์ ์๋นํ ๋ง์ ๋ ์ฝ๋๋ฅผ ์ฝ์ง๋ง ๊ฒฐ๊ตญ ๊ฐ์ ธ์ค๋ ๋ฐ์ดํฐ๋ 1๊ฑด๋ฟ์ด๋ค.
๋๋ฒ์งธ ์ฟผ๋ฆฌ๋ฅผ ์๋์ฒ๋ผ ๋ณ๊ฒฝํ๋ฉด emp_no=10001 ์กฐ๊ฑด๋ ์์ ๋ฒ์๋ฅผ ์ค์ด๋ ์ฉ๋๋ก ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ๋๋ก ํ ์ ์๋ค.
SELECT * FROM dept_emp
WHERE dept_no IN ('d003', 'd004', 'd005')
AND emp_no = 10001;
BETWEEN์ด ์ ํ์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ๊ฒ์ํด์ผ ํ๋ ๊ฒ๊ณผ๋ ๋ฌ๋ฆฌ IN์ ๋๋ฑ(Equal) ๋น๊ต๋ฅผ ์ฌ๋ฌ ๋ฒ ์ํํ๋ ๊ฒ๊ณผ ๊ฐ์ ํจ๊ณผ๊ฐ ์๊ธฐ ๋๋ฌธ์ dept_emp ํ ์ด๋ธ์ ์ธ๋ฑ์ค(dept_no, emp_no)๋ฅผ ์ต์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด๋ค.
ํด๋น ์์ ์ฒ๋ผ ์ฌ๋ฌ ์ปฌ๋ผ์ผ๋ก ์ธ๋ฑ์ค๊ฐ ๋ง๋ค์ด์ ธ ์์ ๋, ์ธ๋ฑ์ค ์์ชฝ์ ์๋ ์ปฌ๋ผ์ ์ ํ๋๊ฐ ๋จ์ด์ง ๋๋ IN์ผ๋ก ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ๊ฐ์ ํ ์๋ ์๋ค.
์ ๋ฆฌํ์๋ฉด,
BETWEEN ๋น๊ต๋ฅผ ์ฌ์ฉํ ์ฟผ๋ฆฌ์์๋ ๋ถ์ ๋ฒํธ๊ฐ 'd003'์ธ ๋ ์ฝ๋๋ก๋ถํฐ 'd005'์ธ ๋ ์ฝ๋์ ์ ์ฒด ๋ฒ์๋ฅผ ๋ค ๋น๊ตํด์ผ ํ์ง๋ง
IN์ ์ฌ์ฉํ ์ฟผ๋ฆฌ์์๋ ๋ถ์๋ฒํธ์ ์ฌ์ ๋ฒํธ๊ฐ (('d003', 10001), ('d004', 10001), ('d005', 10001)) ์กฐํฉ์ธ ๋ ์ฝ๋๋ง ๋น๊ตํด ๋ณด๋ฉด ๋๋ค.
MySQL 8.0๋ถํฐ๋ ์๋์ ๊ฐ์ด "IN(subquery)" ํํ๋ก ์์ฑํ๋ฉด ์ตํฐ๋ง์ด์ ๊ฐ ์ธ๋ฏธ ์กฐ์ธ ์ต์ ํ๋ฅผ ์ด์ฉํด ๋ ๋น ๋ฅธ ์ฟผ๋ฆฌ๋ก ๋ณํํด์ ์คํํ๋ค.
SELECT *
FROM dept_emp USE INDEX(PRIMARY)
WHERE dept_no IN (
SELECT dept_no
FROM departments
WHERE dept_no BETWEEN 'd003' AND 'd005')
AND emp_no=10001;
(9) IN ์ฐ์ฐ์
IN์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ๋ํด ๋๋ฑ ๋น๊ต ์ฐ์ฐ์ ์ํํ๋ ์ฐ์ฐ์๋ค.
๋ฒ์๋ก ๊ฒ์ํ๋ ๊ฒ์ด ์๋๋ผ ์ฌ๋ฌ ๋ฒ์ ๋๋ฑ ๋น๊ต๋ก ์คํํ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ๋๋ค.
IN ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ ๋ ๊ฐ์ง ์ผ์ด์ค๋ฅผ ์๊ฐํด ๋ณผ ์ ์๋ค.
- 1. ์์๊ฐ ์ฌ์ฉ๋ ๊ฒฝ์ฐ - IN (?, ?, ?)
- 2. ์๋ธ์ฟผ๋ฆฌ๊ฐ ์ฌ์ฉ๋ ๊ฒฝ์ฐ - IN (SELECT ... FROM ... )
1. ์์๊ฐ ์ฌ์ฉ๋ ๊ฒฝ์ฐ
IN ์ฐ์ฐ์์ ์์๊ฐ ์ฌ์ฉ๋ ๊ฒฝ์ฐ๋ ๋๋ฑ ๋น๊ต์ ๋์ผํ๊ฒ ์๋ํ๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์ฟผ๋ฆฌ๊ฐ ์ฒ๋ฆฌ๋ ๊ฒ์ด๋ค.
SELECT * FROM dept_emp
WHERE (dept_no, emp_no) IN (('d001', 10017), ('d002', 10144), ('d003', 10054));
์ ์์๋ IN ์ ์ ์์ซ๊ฐ์ด ๋จ์ ์ค์นผ๋ผ ๊ฐ์ด ์๋๋ผ ํํ์ด ์ฌ์ฉ๋๋ค. MySQL 8.0 ์ด์ ๋ฒ์ ๊น์ง๋ IN ์ ์ ํํ(๋ ์ฝ๋)์ ์ฌ์ฉํ๋ฉด ํญ์ ํ ํ ์ด๋ธ ์ค์บ์ ํ์๋ค. ๋ฐ๋ผ์ ์ด๋ฐ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ฉด ์ฑ๋ฅ์ ๋ฌธ์ ๊ฐ ์๊ฒจ์ ์ผ๋ถ๋ก ์ฟผ๋ฆฌ๋ฅผ ์ชผ๊ฐ์ด ์ฌ๋ฌ ๋ฒ ์คํํ๋ค.
ํ์ง๋ง, MySQL 8.0 ๋ฒ์ ๋ถํฐ๋ ์์ ์ฟผ๋ฆฌ์ ๊ฐ์ด IN ์ ์ ํํ์ ๊ทธ๋๋ก ๋์ดํด๋ ์ธ๋ฑ์ค๋ฅผ ์ต์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ๊ฐ์ ๋๋ค.
๋ฐ๋ผ์ ์์ ์ฟผ๋ฆฌ ๊ฐ์ ๊ฒฝ์ฐ dept_emp ํ
์ด๋ธ์ ํ๋ผ์ด๋จธ๋ฆฌ ํค๋ฅผ ์ด์ฉํ๋๋ฐ, dept_no ์ปฌ๋ผ(4๊ธ์*4๋ฐ์ดํธ)๊ณผ emp_no ์ปฌ๋ผ(4๋ฐ์ดํธ)์ ์ด์ฉํด ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ์ ์คํํ๋ค.
2. ์๋ธ์ฟผ๋ฆฌ๊ฐ ์ฌ์ฉ๋ ๊ฒฝ์ฐ
IN (subquery) ํํ์ ์กฐ๊ฑด์ด ์ฌ์ฉ๋ ์ฟผ๋ฆฌ๋ ์ต์ ํ๊ฐ ๋งค์ฐ ๊น๋ค๋กญ์ง๋ง, MySQL 8.0๋ถํฐ๋ ์ต์ ํ๊ฐ ๋ง์ด ์์ ํ๋์ด ์ตํฐ๋ง์ด์ ๊ฐ ์ธ๋ฏธ ์กฐ์ธ ์ต์ ํ๋ฅผ ์ด์ฉํ์ฌ ๋ ๋น ๋ฅธ ์ฟผ๋ฆฌ๋ก ๋ณํํด์ ์คํํ๋ค.
NOT_IN
NOT_IN์ ์คํ ๊ณํ์ ์ธ๋ฑ์ค ํ ์ค์บ์ผ๋ก ํ์๋๋๋ฐ, ๋๋ฑ์ด ์๋ ๋ถ์ ํ ๋น๊ต์ฌ์ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด ์ฒ๋ฆฌ ๋ฒ์๋ฅผ ์ค์ด๋ ์กฐ๊ฑด์ผ๋ก๋ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. NOT_IN ์ฐ์ฐ์๊ฐ ํ๋ผ์ด๋จธ๋ฆฌ ํค์ ๋น๊ต๋ ๋ ๊ฐ๋ ์ฟผ๋ฆฌ์ ์คํ๊ณํ์ ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ์ด ํ์๋๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ํ์ง๋ง ์ด๋ InnoDB ํ ์ด๋ธ์์ PK๊ฐ ํด๋ฌ์คํฐ๋ง ํค์ด๊ธฐ ๋๋ฌธ์ผ ๋ฟ ์ค์ IN๊ณผ ๊ฐ์ด ํจ์จ์ ์ผ๋ก ์คํ๋๋ค๋ ๊ฒ์ ์๋ฏธํ์ง๋ ์๋๋ค.
2. MySQL ๋ด์ฅ ํจ์
DBMS ์ข
๋ฅ์ ๊ด๊ณ์์ด ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ SQL ํจ์๋ ๋๋ถ๋ถ ๋์ผํ๊ฒ ์ ๊ณต๋๋ค. ํ์ง๋ง ํจ์ ์ด๋ฆ์ด๋ ์ฌ์ฉ๋ฒ์ ํ์ค์ด ์์ผ๋ฏ๋ก DBMS๋ณ๋ก ๊ฑฐ์ ํธํ๋์ง ์๋๋ค.
MySQL ํจ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ๋ด์ฅ ํจ์์ ์ฌ์ฉ์๊ฐ ์ง์ ์์ฑํด์ ์ถ๊ฐํ ์ ์๋ ์ฌ์ฉ์ ์ ์ํจ์(UDF, User Defined Function)๋ก ๊ตฌ๋ถ๋๋ค.
์ฌ์ฉ์ ์ ์ํจ์๋ C/C++ API๋ฅผ ์ด์ฉํด ์ฌ์ฉ์๊ฐ ์ํ๋ ๊ธฐ๋ฅ์ ์ง์ ํจ์๋ก ๋ง๋ค์ด ์ถ๊ฐํ ์ ์๋ค.
์ฌ์ฉ์ ์ ์ํจ์๋ ์คํ ์ด๋ ํ๋ก๊ทธ๋จ์ผ๋ก ์์ฑ๋๋ ํ๋ก์์ ๋ ์คํ ์ด๋ ํจ์์๋ ๋ค๋ฅธ ๊ฒ์ ์๊ณ ์์ด์ผ ํ๋ค.
(1) ๋ด์ฅ ํจ์ ์ข ๋ฅ ๊ฐ๋จ ์ ๋ฆฌ
- NULL ๊ฐ ๋น๊ต ๋ฐ ๋์ฒด (IFNULL, ISNULL)
- ํ์ฌ ์๊ฐ ์กฐํ (NOW, SYSDATE)
- SYSDATE()๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ํ๋ฆฌ์นด ์๋ฒ์์ ์์ ์ ์ผ๋ก ๋ณต์ ๋์ง ๋ชปํ๋ค.
- SYSDATE() ํจ์์ ๋น๊ต๋๋ ์ปฌ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ์ง ๋ชปํ๋ค.
- SYSDATE() ํจ์๊ฐ ํธ์ถ๋ ๋๋ง๋ค ๋ค๋ฅธ ๊ฐ์ ๋ฐํํ๋ฏ๋ก ์ฌ์ค ์ ์๊ฐ ์๋๋ค.
- SYSDATE()๋ ์ธ๋ฑ์ค๋ฅผ ์ค์บํ ๋๋ ๋งค๋ฒ ๋น๊ต๋๋ ๋ ์ฝ๋๋ง๋ค ํจ์๋ฅผ ์คํํด์ผ ํ์ง๋ง,
NOW()๋ ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ ์์ ์์ ์คํ๋๊ณ ๊ฐ์ ํ ๋น๋ฐ์์ ๊ทธ ๊ฐ์ SQL ๋ชจ๋ ๋ถ๋ถ์์ ์ฌ์ฉํ๊ธฐ์ ์ฟผ๋ฆฌ๊ฐ 1์๊ฐ ๋์ ์คํ๋๋๋ผ๋ ํญ์ ๊ฐ์ ๊ฐ์ ๋ณด์ฅํ๋ค.
- ๋ ์ง์ ์๊ฐ์ ํฌ๋งท (DATE_FORMAT, STR_TO_DATE)
- SQL์์ ํ์ค ํํ(๋ -์-์ผ ์:๋ถ:์ด)๋ก ์ ๋ ฅ๋ ๋ฌธ์์ด์ ํ์ํ ๊ฒฝ์ฐ ์๋์ผ๋ก DATETIME ํ์ ์ผ๋ก ๋ณํ๋์ด ์ฒ๋ฆฌ๋๋ค. ๋ค๋ฅธ ํํ๋ ๊ฐ๋ฅํ ๊ฒ์ด ๋ ์๊ธด ํ๋ค.
- ๋ ์ง์ ์๊ฐ์ ์ฐ์ฐ (DATE_ADD, DATE_SUB)
- ํ์์คํฌํ ์ฐ์ฐ (UNIX_TIMESTAMP, FROM_UNIXTIME)
- ๋ฌธ์์ด ์ฒ๋ฆฌ (RPAD, LPAD / RTRIM, LTRIM, TRIM)
- ๋ฌธ์์ด ๊ฒฐํฉ (CONCAT)
- GROUP BY ๋ฌธ์์ด ๊ฒฐํฉ (GROUP_CONCAT)
- COUNT()๋ MAX(), MIN(), AVG() ๋ฑ๊ณผ ๊ฐ์ ๊ทธ๋ฃน ํจ์ ์ค ํ๋๋ค. ์ฃผ๋ก GROUP BY์ ํจ๊ป ์ฌ์ฉํ๋ฉฐ, GROUP BY๊ฐ ์๋ SQL์์ ์ฌ์ฉํ๋ฉด ๋จ ํ๋์ ๊ฒฐ๊ณผ๊ฐ๋ง ๋ง๋ค์ด๋ธ๋ค.
- ๊ฐ์ ๋น๊ต์ ๋์ฒด (CASE WHEN ... THEN ... END)
- CASE WHEN์ ํจ์๊ฐ ์๋๋ผ SQL ๊ตฌ๋ฌธ์ด๋ฉฐ, ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ ๊ณตํ๋ SWITCH ๊ตฌ๋ฌธ๊ณผ ๊ฐ์ ์ญํ ์ ํ๋ค.
CASE๋ก ์์ํ๊ณ END๋ก ๋๋์ผ ํ๋ค. ๋ํ WHEN ... THEN ... ์ ํ์ํ ๋งํผ ๋ฐ๋ณตํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
- CASE WHEN์ ํจ์๊ฐ ์๋๋ผ SQL ๊ตฌ๋ฌธ์ด๋ฉฐ, ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ ๊ณตํ๋ SWITCH ๊ตฌ๋ฌธ๊ณผ ๊ฐ์ ์ญํ ์ ํ๋ค.
SELECT emp_no, first_name,
CASE gender WHEN 'M' THEN 'Man'
WHEN 'F' THEN 'Woman'
ELSE 'Unknown' END AS gender
FROM employees
LIMIT 10;
- ํ์ ์ ๋ณํ(CAST, CONVERT)
- ์ด์ง๊ฐ๊ณผ 16์ง์ ๋ฌธ์์ด (Hex String) ๋ณํ(HEX, UNHEX)
- ์ํธํ ๋ฐ ํด์ ํจ์ (MD5, SHA, SHA2)
- ์ฒ๋ฆฌ ๋๊ธฐ(SLEEP)
- ๋ฒค์น๋งํฌ(BENCHMARK)
- IP ์ฃผ์ ๋ณํ (INET_ATON, INET_NTOA)
๋ณต์กํ ๋ด์ฅํจ์๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ๊ฐ ๋ง์ง๋ ์์ผ๋ฏ๋ก ํ์ํ ๋ ์ฐพ์๋ณผ ์ ์์ ์ ๋๋ง ๊ณต๋ถํ๊ณ ์ ํ์๋ค.
'๐ข๏ธDatabase' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Redis ์๊ณ ์ฌ์ฉํ์! (0) | 2023.08.20 |
---|---|
[Real MySQL 8.0] ์ฟผ๋ฆฌ ์์ฑ ๋ฐ ์ต์ ํ - SELECT (0) | 2023.08.14 |
[Real MySQL 8.0] InnoDB ๋ฒํผ ํโข์ธ๋ ๋ก๊ทธ โข์ฒด์ธ์ง ๋ฒํผโข ๋ฆฌ๋ ๋ก๊ทธ (0) | 2023.08.07 |
[Real MySQL 8.0] InnoDB ์คํ ๋ฆฌ์ง ์์ง ์ํคํ ์ฒ (MVCC, ๋ฐ๋๋ฝ ๊ฐ์ง, ...) (0) | 2023.08.07 |
[Real MySQL 8.0] MySQL ์์ง ์ํคํ ์ฒ (0) | 2023.08.02 |