๐ ํจ์ ๋ถ๋ฅ
โ ์ง๊ณ ํจ์(Aggregate Functions)
โ ๋ฌธ์์ด ํจ์(String Functions)
โ ์ํ ํจ์(Numeric Functions)
โ ๋ ์ง ๋ฐ ์๊ฐ ํจ์(Date & Time Functions)
โ ์ ์ด ํ๋ฆ ํจ์(Control Flow Functions)
โ ์๋์ฐ ํจ์(Window Functions)
โ ๊ธฐํ ์ ์ฉํ ํจ์(Other Functions)
/*
select ๊ตฌ๋ฌธ ๊ตฌ์กฐ
select ์ปฌ๋ผ๋ช
|| * || ์์๊ฐ || ์ฐ์ฐ || ๋จ์ผํํจ์
from ํ
์ด๋ธ๋ช
where ์กฐ๊ฑด๋ฌธ => ๋ ์ฝ๋์ ์ ํ
group by => ๊ทธ๋ฃนํ์ ๊ธฐ์ค์ด ๋๋ ์ปฌ๋ผ
having ์กฐ๊ฑด๋ฌธ -> ๊ทธ๋ฃนํจ์ ์กฐ๊ฑด๋ฌธ
order by ์ปฌ๋ผ๋ช
|| ๋ณ๋ช
|| ์กฐํ๋๋ ์ปฌ๋ผ์ ์์
*/
๐ MariaDB ์ฃผ์ ํจ์ ์ ๋ฆฌ
โ 1. ์ง๊ณ ํจ์ (Aggregate Functions)
์ฌ๋ฌ ํ์ ๊ทธ๋ฃนํํ์ฌ ํ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ํจ์
ํจ์ | ์ค๋ช | ์์ |
---|---|---|
COUNT(column) |
ํ ๊ฐ์ ๋ฐํ | SELECT COUNT(*) FROM employees; |
SUM(column) |
ํฉ๊ณ ๊ณ์ฐ | SELECT SUM(salary) FROM employees; |
AVG(column) |
ํ๊ท ๊ณ์ฐ | SELECT AVG(salary) FROM employees; |
MAX(column) |
์ต๋๊ฐ ๋ฐํ | SELECT MAX(salary) FROM employees; |
MIN(column) |
์ต์๊ฐ ๋ฐํ | SELECT MIN(salary) FROM employees; |
GROUP_CONCAT(column) |
๊ทธ๋ฃน ๋ด ๋ฌธ์์ด ์ฐ๊ฒฐ | SELECT GROUP_CONCAT(name) FROM employees GROUP BY department; |
STDDEV(column) |
ํ์คํธ์ฐจ ๊ณ์ฐ | SELECT round(stddev(kor+math+eng),2) |
VARIANCE(column) |
๋ถ์ฐ ๊ณ์ฐ | SELECT varinace(kor+math+eng) |
Having(์กฐ๊ฑด๊ฐ) |
**GROUP BY์ WHERE์ ๋์ ์ฐ๋ ์กฐ๊ฑด๋ฌธ | HAVING AVG(height)>=170 |
๐ 1. ๋ฌธ์์ด ํจ์ ์ฃผ์ ๋ช ๋ น์ด
โ
group by(์ปฌ๋ผ๋ช
)
โ
- ๊ทธ๋ฃน ํจ์: ์ฌ๋ฌ๊ฐ์ ํ์ ์ ๋ณด ์ด์ฉํ์ฌ ๊ฒฐ๊ณผ ๋ฆฌํด ํจ์
/*
๊ทธ๋ฃน ํจ์: ์ฌ๋ฌ๊ฐ์ ํ์ ์ ๋ณด ์ด์ฉํ์ฌ ๊ฒฐ๊ณผ ๋ฆฌํด ํจ์
select ์ปฌ๋ผ๋ช
\* from ํ
์ด๋ธ๋ช
[where ์กฐ๊ฑด๋ฌธ]
[group by ์ปฌ๋ผ๋ช
] => ๋ ์ฝ๋๋ฅผ ๊ทธ๋ฃนํ ํ๊ธฐ ์ํ ๊ธฐ์ค ์ปฌ๋ผ
group by ๊ตฌ๋ฌธ์ด ์๋ ๊ฒฝ์ฐ ๋ชจ๋ ๋ ์ฝ๋๊ฐ ํ๋์
๊ทธ๋ฃน์ผ๋ก ์ฒ๋ฆฌ
[havin ์กฐ๊ฑด๋ฌธ]
[order by ์ปฌ๋ผ๋ช
|| ๋ณ๋ช
|| ์ปฌ๋ผ์์ [asc|desc]]
*/
-- ํ๋
๋ณ ์ ์ฒด ์ธ์์์ ์ง๋๊ต์๋ฅผ ๋ฐฐ์ ๋ฐ์ ํ์์ ์ธ์์ ์กฐํํ๊ธฐ
SELECT grade'ํ๋
', COUNT(*)'์ ์ฒด์ธ์์',COUNT(profno)'์ง๋๊ต์๋ฐฐ์ '
FROM student
GROUP BY grade
-- ํ๊ณผ๋ณ ์ ์ฒด ์ธ์์์ ์ง๋๊ต์๋ฅผ ๋ฐฐ์ ๋ฐ์ ํ์์ ์ธ์์ ์กฐํํ๊ธฐ
SELECT major1'ํ๊ณผ', COUNT(*)'์ ์ฒด์ธ์์',COUNT(profno)'์ง๋๊ต์'
FROM student
GROUP BY major1;
-- ์ง๋๊ต์๊ฐ ๋ฐฐ์ ๋์ง ์์ ํ๋
์ ์ ์ฒด ์ธ์์๋ฅผ ์ถ๋ ฅํ์
SELECT grade'ํ๋
',COUNT(*)'์ ์ฒด์ธ์์'
FROM student
GROUP BY grade
HAVING COUNT(profno) = 0;
โ
SUM(์ปฌ๋ผ)
โ ํฉ ๋ฆฌํด
-- ํฉ๊ณ : sum, ํ๊ท avg
-- ๊ต์๋ค์ ๊ธ์ฌ ํฉ๊ณ์ ๋ณด๋์ค ํฉ๊ณ ์ถ๋ ฅํ๊ธฐ
SELECT SUM(salary), SUM(bonus)
FROM professor
โ
avg(์ปฌ๋ผ), avg(ifnull(์ปฌ๋ผ,'0')
โ ํ๊ท ๊ฐ ๋ฆฌํด
-- ๊ต์๋ค์ ๊ธ์ฌ ํ๊ท ๊ณผ ๋ณด๋์ค ํ๊ท ์ถ๋ ฅํ๊ธฐ
-- ํ๊ท avg
-- avg(bonus) : bonus๋ฅผ ๋ฐ๋ ๊ต์๋ค์ ํ๊ท null๊ฐ์ ์ ์ธํ ์ฑ๋ก ์ฐ์ฐ
-- avg(ifnull(bonus,0) : bonus๊ฐ์ด null์ธ ๊ฒฝ์ฐ 0์ ํ์ฐํ์ฌ ํ๊ท ์ฒ๋ฆฌ
SELECT COUNT(*), SUM(salary), SUM(bonus),AVG(salary),AVG(ifnull(bonus,0))
FROM professor
-- ๋ฌธ์
-- ๊ต์์ ๋ถ์์ฝ๋, ๋ถ์๋ณ ์ธ์์, ๊ธ์ฌํฉ๊ณ ,๋ณด๋์ค ํฉ๊ณ
-- ๊ธ์ฌํ๊ท , ๋ณด๋์คํ๊ท ์ถ๋ ฅํ๊ธฐ
-- ๋จ ๋ณด๋์ค๊ฐ ์๋ ๊ต์๋ ํ๊ท ์ ํฌํจ๋๋๋ก ํ๋ค
SELECT deptno'๋ถ์์ฝ๋',COUNT(deptno)'๋ถ์๋ณ์ธ์์', sum(salary)'๊ธ์ฌํฉ๊ณ', sum(bonus)'๋ณด๋์คํฉ๊ณ', AVG(IFNULL(bonus,0))
FROM professor
GROUP BY deptno
ORDER BY deptno desc;
โ
COUNT(column)
โ ๋ ์ฝ๋ ๊ฑด์ ๋ฆฌํด
-- count() : ๋ ์ฝ๋์ ๊ฑด์ ๋ฆฌํด, null ๊ฐ์ ๊ฑด์์์ ์ ์ธ๋จ
-- ๊ต์์ ์ ์ฒด ์ธ์์, ๋ณด๋์ค๋ฅผ ๋ฐ๋ ์ธ์ ์ ์กฐํํ๊ธฐ
-- COUNT(*) : ๋ ์ฝ๋ ์
-- COUNT(bonus) : bonus์ ๊ฐ์ด null์ด ์๋ ๋ ์ฝ๋ ์
SELECT COUNT(*), COUNT(bonus) FROM professor
-- ํ์์ ์ ์ฒด ์ธ์ ์์ ์ง๋๊ต์๋ฅผ ๋ฐฐ์ ๋ฐ์ ํ์์ ์ธ์์๋ฅผ ์กฐํํ๊ธฐ
SELECT COUNT(*)'์ ์ฒด์ธ์์', COUNT(profno)'์ง๋๊ต์'
FROM student;
-- ํ์ ์ค ์ ๊ณต 1ํ๊ณผ๊ฐ 101์ธ ํ๊ณผ์ ์ํ ํ์์ ์ธ์์ ์กฐํํ๊ธฐ
SELECT COUNT(*)'101๋ฒ ํ๊ณผ์ ์ํ ํ์์ ์ธ์์'
FROM student
WHERE major1 = 101;
-- 1ํ๋
ํ์์ ์ ์ฒด ์ธ์์์ ์ง๋๊ต์๋ฅผ
-- ๋ฐฐ์ ๋ฐ์ ํ์์ ์ธ์์ ์กฐํํ๊ธฐ
SELECT COUNT(*)'1ํ๋
์ ์ฒด์ธ์์',COUNT(profno)'์ง๋๊ต์๋ฐฐ์ '
FROM student
WHERE grade = 1;
โ
Max(column), Min(column)
โ ์ต๋๊ฐ, ์ต์๊ฐ
/*
์ต์๊ฐ, ์ต๋๊ฐ : min, max
*/
-- ์ ๊ณต 1ํ๊ณผ๋ณ ๊ฐ์ฅ ํค๊ฐ ํฐํ์์ ํฐํค๊ฐ๊ณผ, ์์ํค๊ฐ ์ถ๋ ฅํ๊ธฐ
SELECT major1, MAX(height), MIN(height)
FROM student
GROUP BY major1
-- ๊ต์ ์ค ๊ธ์ฌ๋ฅผ ๊ฐ์ฅ ๋ง์ด ๋ฐ๋ ๊ธ์ฌ ์ถ๋ ฅํ๊ธฐ
SELECT MAX(salary), MIN(salary)
FROM professor
โ
stddev(column), variance(column)
โํ์คํธ์ฐจ, ๋ถ์ฐ
/*
ํ์คํธ์ฐจ : stddev
๋ถ์ฐ : variance
*/
-- ๊ต์๋ค์ ํ๊ท ๊ธ์ฌ, ๊ธ์ฌ์ ํ์คํธ์ฐจ, ๋ถ์ฐ ์ถ๋ ฅํ๊ธฐ
SELECT AVG(salary), stddev(salary), variance(salary)
FROM professor
-- ํ์์ ์ ์ํ
์ด๋ธ(score)์์ ํฉ๊ณ, ํ๊ท , ํฉ๊ผํ์คํธ์ฐจ, ํฉ๊ณ๋ถ์ฐ ์กฐํํ๊ธฐ
SELECT SUM(kor+math+eng), AVG(kor+math+eng), round(stddev(kor+math+eng),2), variance(kor+math+eng)
FROM score
โ
HAVING(์กฐ๊ฑด) = ์กฐ๊ฑด๊ฐ
โ GROUP BY์ WHERE์ ๋์ ์ฐ๋ ์กฐ๊ฑด๋ฌธ
-- ์ง๋๊ต์๊ฐ ๋ฐฐ์ ๋์ง ์์ ํ๋
์ ์ ์ฒด ์ธ์์๋ฅผ ์ถ๋ ฅํ์
SELECT grade'ํ๋
',COUNT(*)'์ ์ฒด์ธ์์'
FROM student
GROUP BY grade
HAVING COUNT(profno) = 0;
-- having : groupo ์กฐ๊ฑด
-- ํ๊ณผ๋ณ ๊ฐ์ฅ ํค๊ฐ ํฐํ์์ ํค์, ๊ฐ์ฅ ์์ ํ์์ ํค, ํ๊ณผ๋ณํ๊ท ํค๋ฅผ ์ถ๋ ฅํ๊ธฐ
SELECT major1, MAX(height), MIN(height), AVG(height)
FROM student
GROUP BY major1
HAVING AVG(height)>=170
-- ๊ต์ํ
์ด๋ธ์์ ํ๊ณผ๋ณ ํ๊ท ๊ธ์ฌ๊ฐ
-- 350์ด์์ธ ๋ถ์์ ์ฝ๋์ ํธ๊ท ๊ธ์ฌ ์ถ๋ ฅํ๊ธฐ
SELECT deptno, AVG(salary)
FROM professor
GROUP BY deptno
HAVING AVG(salary)>=350
HAVING
์ GROUP BY๊ฐ ์์ด๋ ์ง๊ณํจ์์ ํจ๊ป ๋จ๋
์ฌ์ฉ ๊ฐ๋ฅ.
SELECT COUNT(*) FROM student HAVING COUNT(*) > 10;
๐ฅ ๊ฒฐ๋ก (์ ๋ฆฌ)
โ
์์ฉ์ฌํ
-- ์ฃผ๋ฏผ๋ฒํธ ๊ธฐ์ค์ผ๋ก ๋จ, ์ฌํ์์ ์ต๋ํค, ์ต์ํค, ํ๊ท ํค ์กฐํํ๊ธฐ
SELECT SUBSTR(jumin,7,1)'์ฑ๋ณ',MAX(height)'์ต๋ํค',MIN(height)'์ต์ํค',AVG(height)'ํ๊ท ํค'
FROM student
group BY SUBSTR(jumin,7,1)
SELECT if(SUBSTR(jumin,7,1)IN(1,3),"๋จํ์","์ฌํ์")์ฑ๋ณ,
MAX(height)์ต๋ํค,MIN(height)์ต์ํค,
AVG(height)ํ๊ท ํค
FROM student
group BY ์ฑ๋ณ
-- ๋ค๋ฅธ ๋ฐฉ์๋ ๊ฐ๋ฅ
SELECT if(SUBSTR(jumin,7,1)IN(1,3),"๋จํ์","์ฌํ์")์ฑ๋ณ,
MAX(height)์ต๋ํค,MIN(height)์ต์ํค,
AVG(height)ํ๊ท ํค
FROM student
group BY if(SUBSTR(jumin,7,1)IN(1,3),"๋จํ์","์ฌํ์")
-- ํ์์ ์์ผ์ ์๋ณ ์ธ์์ ์ถ๋ ฅํ๊ธฐ
SELECT SUBSTR(birthday,6,2)์๋ณ,COUNT(*)์ธ์์
FROM student
GROUP BY SUBSTR(birthday,6,2)
SELECT concat(month(birthday),"์")์๋ณ,COUNT(*)์ธ์์
FROM student
GROUP BY month(birthday)
SELECT CONCAT(count(*)+"",'๊ฑด์')'์ ์ฒด',
SUM(if(MONTH(birthday)=1,1,0)) '1์',
SUM(if(MONTH(birthday)=2,1,0)) '2์',
SUM(if(MONTH(birthday)=3,1,0)) '3์',
SUM(if(MONTH(birthday)=4,1,0)) '4์',
SUM(if(MONTH(birthday)=5,1,0)) '5์',
SUM(if(MONTH(birthday)=6,1,0)) '6์',
SUM(if(MONTH(birthday)=7,1,0)) '7์',
SUM(if(MONTH(birthday)=8,1,0)) '8์',
SUM(if(MONTH(birthday)=9,1,0)) '9์',
SUM(if(MONTH(birthday)=10,1,0)) '10์',
SUM(if(MONTH(birthday)=11,1,0)) '11์',
SUM(if(MONTH(birthday)=12,1,0)) '12์'
FROM student
SELECT NAME, birthday,
if(MONTH(birthday)=1,1,0) '1์',
if(MONTH(birthday)=2,1,0) '2์',
if(MONTH(birthday)=3,1,0) '3์',
if(MONTH(birthday)=4,1,0) '4์',
if(MONTH(birthday)=5,1,0) '5์',
if(MONTH(birthday)=6,1,0) '6์',
if(MONTH(birthday)=7,1,0) '7์',
if(MONTH(birthday)=8,1,0) '8์',
if(MONTH(birthday)=9,1,0) '9์',
if(MONTH(birthday)=10,1,0) '10์',
if(MONTH(birthday)=11,1,0) '11์',
if(MONTH(birthday)=12,1,0) '12์'
FROM student
-- ํ์์ ์์ผ์ ์๋ณ ์ธ์์ ์ถ๋ ฅํ๊ธฐ
SELECT SUBSTR(birthday,6,2)์๋ณ,COUNT(*)์ธ์์
FROM student
GROUP BY SUBSTR(birthday,6,2)
SELECT concat(month(birthday),"์")์๋ณ,COUNT(*)์ธ์์
FROM student
GROUP BY month(birthday)
โ
GROUP_CONCAT(column)
๊ธฐ๋ณธ ๊ฐ๋
GROUP BY
์ ํจ๊ป ์ฌ์ฉํด์ ๊ฐ์ ๊ทธ๋ฃน์ ๋ฐ์ดํฐ๋ฅผ ํ๋์ ๋ฌธ์์ด๋ก ํฉ์น ๋ ์ฌ์ฉํด!- ์ฌ๋ฌ ๊ฐ์ ํ์ ์ผํ(
,
)๋ ๋ค๋ฅธ ๊ตฌ๋ถ์๋ก ์ฐ๊ฒฐํ ์ ์์ด. COUNT()
,SUM()
๊ฐ์ ๊ทธ๋ฃน ํจ์์ ํจ๊ป ์ฌ์ฉ ๊ฐ๋ฅ!
-- ๋ฌธ์์ด ์ฐ๊ฒฐ ํจ์ : concat
-- ๊ต์์ ์ด๋ฆ๊ณผ ์ง๊ธ์์ฐ๊ฒฐํ์ฌ ์กฐํํ๊ธฐ
SELECT CONCAT(NAME,POSITION,'๋') ๊ต์๋ช
FROM professor;
SELECT grade, GROUP_CONCAT(NAME, '!!!')
FROM student
GROUP BY grade;
โ 2. ๋ฌธ์์ด ํจ์ (String Functions)
๋ฌธ์์ด์ ๋ค๋ฃจ๋ ํจ์
ํจ์ | ์ค๋ช | ์์ |
---|---|---|
CONCAT(s1, s2, โฆ) |
๋ฌธ์์ด ์ฐ๊ฒฐ | SELECT CONCAT('Hello', ' ', 'World'); |
SUBSTRING(str, start, length) |
๋ถ๋ถ ๋ฌธ์์ด ์ถ์ถ | SELECT SUBSTRING('MariaDB', 1, 5); โ Maria |
LENGTH(str) |
๋ฌธ์์ด ๊ธธ์ด ๋ฐํ | SELECT LENGTH('MariaDB'); โ 7 |
LOWER(str) , UPPER(str) |
์๋ฌธ์/๋๋ฌธ์๋ก ๋ณํ | SELECT UPPER('maria'); โ MARIA |
trim({LEADING|TRAILING|BOTH} ๋ณ๊ฒฝํ ๋ฌธ์์ด from ๋ฌธ์์ด) |
์๋ค ๊ณต๋ฐฑ ์ ๊ฑฐ | SELECT TRIM(' Hello '); โ Hello |
Replace(์ปฌ๋ผ๋ช
, '๋ฌธ์1', '๋ฌธ์2'); |
๋ฌธ์์ด ์นํ | SELECT REPLACE('Hello World', 'World', 'MariaDB'); |
instr(str, ',') |
๋ฌธ์์ด ์์น๊ฐ | SELECT tel, INSTR(tel,')'); |
Lpad, rpad(์ปฌ๋ผ, ์ ์ฒด์๋ฆฌ์, ์ถ๊ฐ๋ฌธ์) |
๋ฌธ์ ์ถ๊ฐ ํจ์ | `SELECT RPAD(studno, 10, โ*โ), LPAD(NAME, 10, โ#โ) |
FROM student;` | ย | ย |
find_in_set(๋ฌธ์์ด, ',๋ก ๋๋์ด์ง ๋ฌธ์์ด ๊ทธ๋ฃน') |
๊ทธ๋ฃน ์์น ๋ฆฌํด ํจ์ | SELECT find_in_set('y','x,y,z') - - 2 |
๐ 1. ๋ฌธ์์ด ํจ์ ์ฃผ์ ๋ช ๋ น์ด
โ
CONCAT(ํ
์ด๋ธ๋ช
, ํ
์ด๋ธ๋ช
, '')
โ ๋ฌธ์์ด์ ์ฐ๊ฒฐ์ ํ๋ฒ์ ์ถ์ถ
-- ๋ฌธ์์ด ์ฐ๊ฒฐ ํจ์ : concat
-- ๊ต์์ ์ด๋ฆ๊ณผ ์ง๊ธ์์ฐ๊ฒฐํ์ฌ ์กฐํํ๊ธฐ
SELECT CONCAT(NAME,POSITION,'๋') ๊ต์๋ช
FROM professor;
-- ํ์ ์ ๋ณด๋ฅผ ํ๊ธธ๋ 1ํ๋
150cm 50kg ํํ๋ก ํ์ ์ ๋ณด ์ถ๋ ฅํ๊ธฐ
-- ํ๋
์์ผ๋ก ์ ๋ ฌํ๊ธฐ
SELECT concat(NAME,' ',grade,'ํ๋
',height,'cm ',weight,'kg ')
FROM student
ORDER BY grade asc;
โ
SUBSTR(ํ
์ด๋ธ๋ช
, 1,2)
โ ์ํ๋ ๊ธ์ ์ ์ถ์ถํด ์กฐํํ๊ธฐ
-- ๋ถ๋ถ ๋ฌธ์์ด : substr
-- substr(์ปฌ๋ผ๋ช
/ ๋ฌธ์์ด, ์์์ธ๋ฑ์ค, ๊ธ์์)
-- substr(์ปฌ๋ผ๋ช
/๋ฌธ์์ด, ์์์ธ๋ฑ์ค) : ์์ ์ธ๋ฑ์ค ๋ถํฐ ๋ฌธ์์ด ๋๊น์ง
-- left ( ์ปฌ๋ผ๋ช
/ ๋ฌธ์์ด, ๊ธ์์) : ์ผ์ชฝ๋ถํฐ ๊ธ์์๋งํผ ๋ถ๋ถ๋ฌธ์์ด๋ก ๋ฆฌํด
-- right (์ปฌ๋ผ๋ช
/ ๋ฌธ์์ด, ๊ธ์์) : ์ค๋ฅธ์ชฝ๋ถํฐ ๊ธ์์๋งํผ ๋ถ๋ถ๋ฌธ์์ด๋ก ๋ฆฌํด
-- ํ์์ ์ด๋ฆ 2์๋ง ์กฐํํ๊ธฐ
SELECT NAME, LEFT(NAME,2),RIGHT(NAME,2),SUBSTR(NAME,1,2),SUBSTR(NAME,2)
FROM student
-- ํ์ ์ค ์์ผ์ด 3์์ธ ํ์์ ์ด๋ฆ, ์๋
์์ผ ์กฐํํ๊ธฐ
-- ์์ผ์ ์ฃผ๋ฏผ๋ฒํธ ๊ธฐ์ค์ผ๋ก ํ๋ค
SELECT NAME, LEFT(jumin, 6) ์๋
์์ผ
from student
WHERE substr(jumin,3,2)=03;
-- 2. ํ์์ ์ด๋ฆ ํ๋
์๋
์์ผ์ ์กฐํํ๊ธฐ
-- ๋จ ์๋
์์ผ์ ์ฃผ๋ฏผ๋ฒํธ ๊ธฐ์ค์ด๊ณ , ํ์์ 99๋
99์99์ผ๋ก
-- ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ์ฌ ์ถ๋ ฅํ๊ธฐ
SELECT NAME ์ด๋ฃธ, grade ํ๋
, concat(substr(jumin,1,2),'๋
',substr(jumin,3,2),'์',substr(jumin,5,2),'์ผ')
FROM student
ORDER BY SUBSTR(JUMIN,3,2);
โ
LENGTH(ํ
์ด๋ธ๋ช
);
โ ๋ฌธ์์ด ๊ธธ์ด ๋ฐํ
-- ๋ฌธ์์ด ๊ธธ์ด ํจ์ : length, char_length
-- length : ์ ์ฅ๋ ๋ฐ์ดํธ ์ ๋ฐํ
-- ์ค๋ผํด (lENGTHb)
-- char_ Length : ๋ฌธ์์ด์ ๊ธธ์ด ๋ฐํ
-- ์ค๋ผํด (length)
-- ํ์์ ์ด๋ฆ, ์์ด๋, ์ด๋ฆ ๊ธ์์, ์ด๋ฆ๋ฐ์ดํธ์ ์กฐํํ๊ธฐ
SELECT NAME, id, CHAR_LENGTH(NAME), LENGTH(NAME),CHAR_LENGTH(id), LENGTH(id)
FROM student;
/*
์๋ฌธ์, ์ซ์์ ๊ฒฝ์ฐ : ๋ฐ์ดํธ ์์ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ ๊ฐ์
ํ๊ธ์ ๊ฒฝ์ฐ : ๋ฌธ์์ด์ ๊ธธ์ด * 3 = ๋ฐ์ดํธ์ ๊ธธ์ด
ํ๊ธ์ ์ ์ฅํ๋ ์ปฌ๋ผ์ varchar ์๋ฃํ์ ํฌ๊ธฐ๋
ํ๊ธ ๊ธ์์ *3 ๋งํผ ์ค์ ํด์ผํจ
*/
SELECT LENGTH("๊ฐ๋๋ค๋ผ๋ง๋ฐ์ฌ์"), LENGTH("1234567890"),LENGTH("ABCDEFGHI")
LENGTH(โ๊ฐ๋๋ค๋ผ๋ง๋ฐ์ฌ์โ) | LENGTH(โ1234567890โ) | LENGTH(โABCDEFGHIโ) |
---|---|---|
24 | 10 | 9 |
๐ก MariaDB์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก UTF-8mb4 ์ธ์ฝ๋ฉ ์ฌ์ฉ ์, ํ๊ธ์ 3๋ฐ์ดํธ ๋๋ 4๋ฐ์ดํธ๊ฐ ๋ ์ ์์ (์ค์ ์ ๋ฐ๋ผ ๋ค๋ฆ).
๋ฐ๋ผ์ MySQL๊ณผ๋ ๋ฐ์ดํธ ์ ์ฐจ์ด๊ฐ ์๊ธธ ์ ์์ผ๋, CHAR_LENGTH()
๋ก ๋ฌธ์์ด ๊ธธ์ด๋ฅผ ํ์ธํ๋ ๊ฒ์ด ๋ ์ ํ.
โ ์ถ๊ฐ ์์:
sql
๋ณต์ฌํธ์ง
SELECT CHAR_LENGTH('๊ฐ๋๋ค'), LENGTH('๊ฐ๋๋ค');
โ
LOWER, UPPER(ํ
์ด๋ธ๋ช
);
โ ๋์๋ฌธ์ ๋ณํ ํจ์
-- ๋ฌธ์๊ด๋ จ ๋จ์ผํ ํจ์
-- ๋์๋ฌธ์ ๋ณํ ํจ์ : upper, lower
-- ํ์์ ์ ๊ณต1ํ๊ณผ๊ฐ 101์ธ ํ์์ ์ด๋ฆ, id ๋๋ฌธ์, id, ์๋ฌธ์ id ์ถ๋ ฅํ๊ธฐ
SELECT NAME, id, UPPER(id), LOWER(id)
FROM student
WHERE major1 = 101;
SELECT * FROM student;
โ
instr(ํ
์ด๋ธ๋ช
, '๋์๋ฌธ์์ด');
โ ์์น ์ธ๋ฑ์ค ๋ฆฌํด ํจ์
-- ๋ฌธ์์ด์์ ๋ฌธ์์ ์์น์ธ๋ฑ์ค ๋ฆฌํด : instr
-- instr(์ปฌ๋ผ| ๋ฌธ์์ด, ๋ฌธ์) ์ปฌ๋ผ์์ ๋ฌธ์์ ์์น์ธ๋ฑ์ค ๊ฐ์ ๋ฆฌํด
-- ํ์์ ์ด๋ฆ, ์ ํ๋ฒํธ, )์ ์์น๊ฐ ์ถ๋ ฅํ๊ธฐ
SELECT NAME, tel, INSTR(tel,')')
FROM student;
-- ๋ฌธ์ : ํ์์ ์ด๋ฆ, ์ ํ๋ฒ๋, ์ ํ์ง์ญ๋ฒํธ ์ถ๋ ญํ๊ธฐ
-- ์ ํ์ง์ญ๋ฒํธ : 02,051,053
SELECT NAME, tel, SUBSTR(tel,1,INSTR(tel,')')-1)
FROM student;
SELECT NAME, tel, left(tel,INSTR(tel,')')-1)
FROM student;
-- ํ์ ์ ํ๋ฒํธ์ ์ด๋ค ์ง์ญ๋ฒํธ์ธ์ง ์ถ๋ ฅํ๊ธฐ
SELECT distinct SUBSTR(tel,1,INSTR(tel,')')-1)
FROM student;
-- ๋ฌธ์
-- ๊ต์ ํ
์ด๋ธ์์ ๊ต์์ด๋ฆ, url, homepage ์กฐํํ๊ธฐ
-- homepage : url ์ ๋ณด์์ http:// ์ดํ์ ๋ฌธ์์ด์ ์๋ฏธ
SELECT NAME, URL, SUBSTR(URL,INSTR(URL,'/')+2) 'homepage'
FROM professor;
SELECT NAME, URL, SUBSTR(url,CHAR_LENGTH('http://')+1) 'homepage'
FROM professor;
โ
Lpad, rpad(์ปฌ๋ผ, ์ ์ฒด์๋ฆฌ์, ์ถ๊ฐ๋ฌธ์);
โ ๋ฌธ์ ์ถ๊ฐ ํจ์
-- ๋ฌธ์ ์ถ๊ฐ ํจ์ : Lpad, rpad
-- Lpad(์ปฌ๋ผ, ์ ์ฒด์๋ฆฌ์, ์ถ๊ฐ๋ฌธ์) :
-- ์ปฌ๋ผ์ ์ ์ฒด ์๋ฆฌ์ ์ถ๋ ฅ์ ๋น์๋ฆฌ๋ ์ผ์ชฝ์ ์ถ๊ฐ ๋ฌธ์๋ก ์ถ๊ฐ
-- rpad(์ปฌ๋ผ, ์ ์ฒด ์๋ฆฌ์, ์ถ๊ฐ๋ฌธ์):
-- ์ปฌ๋ผ์ ์ ์ฒด์๋ฆฌ์ ์ถ๋ ฅ์ ๋น์๋ฆฌ๋ ์ค๋ฅธ์ชฝ์ ์ถ๊ฐ๋ฌธ์๋ก ์ถ๊ฐ
-- ํ์์ ํ๋ฒ, ์ด๋ฆ ์กฐํํ๊ธฐ
-- ํ๋ฒ์ 10์๋ฆฌ๋ก ๋น์๋ฆฌ๋ ์ค๋ฅธ์ชฝ์ * ์ฑ์ฐ๊ธฐ
-- ์ด๋ฆ์ 10์๋ฆฌ๋ก ๋น์๋ฆฌ๋ ์ผ์ชฝ์ # ์ฑ์ฐ๊ธฐ
SELECT RPAD(studno, 10, '*'), LPAD(NAME, 10, '#')
FROM student;
-- ๋ฌธ์ : ๊ต์ ํ
์ด๋ธ์์ ์ด๋ฆ๊ณผ ์ง๊ธ ์ถ๋ ฅํ๊ธฐ
-- ์ง๊ธ์ 12์๋ฆฌ๋ก ์ถ๋ ฅํ๊ณ , ๋น์๋ฆฌ๋ *๋ฅผ ์ค๋ฅธ์ชฝ์ ์ฑ์ ์ถ๋ ฅํ๊ธฐ
SELECT NAME, rpad(POSITION, 12, '*')
FROM professor;
โ
trim, rtrim, ltrim{LEADING|TRAILING|BOTH} ๋ณ๊ฒฝํ ๋ฌธ์์ด from ๋ฌธ์์ด(์ปฌ๋ผ));
โ ์์ชฝ ๊ณต๋ฐฑ ์ ๊ฑฐ ํจ์
-- ๋ฌธ์ ์ ๊ฑฐ ํจ์ : trim, rtrim, ltrim
-- trim(๋ฌธ์์ด) : ์์ชฝ์ ๊ณต๋ฐฑ ์ ๊ฑฐ
-- rtrim(๋ฌธ์์ด) : ์ค๋ฅธ์ชฝ์ ๊ณต๋ฐฑ ์ ๊ฑฐ
-- ltrim(๋ฌธ์์ด) : ์ผ์ชฝ์ ๊ณต๋ฐฑ ์ ๊ฑฐ
-- trim({LEADING|TRAILING|BOTH} ๋ณ๊ฒฝํ ๋ฌธ์์ด from ๋ฌธ์์ด)
-- Leading : ์ผ์ชฝ ๋ฌธ์ ์ ๊ฑฐ
-- TRAILING : ์ค๋ฅธ์ชฝ ๋ฌธ์ ์ ๊ฑฐ
-- BOTH : ์์ชฝ ๋ฌธ์ ์ ๊ฑฐ
SELECT CONCAT('***', TRIM(' ์์ชฝ ๊ณต๋ฐฑ ์ ๊ฑฐ '),'***')
SELECT CONCAT('***', RTRIM(' ์ค๋ฅธ์ชฝ ๊ณต๋ฐฑ ์ ๊ฑฐ '),'***')
SELECT CONCAT('***', LTRIM(' ์ผ์ชฝ ๊ณต๋ฐฑ ์ ๊ฑฐ '),'***')
SELECT TRIM(BOTH'0' FROM '000120000005670000000');
SELECT TRIM(LEADING'0' FROM '000120000005670000000');
SELECT TRIM(trailing'0' FROM '000120000005670000000');
-- ๊ต์ ํ
์ด๋ธ์์ ๊ต์์ด๋ฆ, url, homepage๋ฅผ ์ถ๋ ฅํ๊ธฐ
-- homepage๋ url์์ http;// ์ดํ์ ๋ฌธ์์ด
SELECT NAME, TRIM(LEADING'http://'FROM URL) homapage
FROM professor;
โ
Replace(์ปฌ๋ผ๋ช
, '์นํ๋ ๋ฌธ์ ์์น', '๋ฌธ์2'):;
โ ์ปฌ๋ผ์ ๊ฐ์ ์นํ๋ ๋ฌธ์ ์์น
๋ฅผ ๋ฌธ์2๋ก ์นํ
-- ๋ฌธ์ ์นํ ํจ์ : replace
-- replace(์ปฌ๋ผ๋ช
, '๋ฌธ์1', '๋ฌธ์2'): ์ปฌ๋ผ์ ๊ฐ์ ๋ฌธ์1์ ๋ฌธ์2๋ก ์นํ
-- ํ์์ ์ด๋ฆ ์ค ์ฑ๋ง #์ผ๋ก ๋ณ๊ฒฝํ์ฌ ์ถ๋ ฅํ๊ธฐ
SELECT NAME, REPLACE(NAME, SUBSTR(NAME,1,1),'#')
FROM student;
-- ํ์์ ์ด๋ฆ ์ค ๋ ๋ฒ์งธ ๋ฌธ์๋ฅผ #์ผ๋ก ๋ณ๊ฒฝํ์ฌ ์ถ๋ ฅํ๊ธฐ
SELECT NAME, REPLACE(NAME, SUBSTR(NAME,2,1),'#')
FROM student;
-- 101ํ๊ณผ ํ์์ ์ด๋ฆ, ์ฃผ๋ฏผ๋ฒํธ ์ถ๋ ฅํ๊ธฐ
-- ์ฃผ๋ฏผ๋ฒํธ๋ ๋ค์ 6์๋ฆฌ๋ *๋ก ์ถ๋ ฅํ๊ธฐ
SELECT NAME '์ด๋ฆ', REPLACE(jumin, right(jumin,6),'******')
FROM student
WHERE major1 = 101;
SELECT NAME '์ด๋ฆ', REPLACE(jumin, substr(jumin,8),'******')
FROM student
WHERE major1 = 101;
SELECT NAME, CONCAT(LEFT(jumin,7),'******')
FROM student
WHERE major1 = 101;
โ
find_in_set(๋ฌธ์์ด, ',๋ก ๋๋์ด์ง ๋ฌธ์์ด ๊ทธ๋ฃน')
โ ๋๋์ด์ง ๋ฌธ์์ด ๊ทธ๋ฃน์์ ํน์ ๊ทธ๋ฃน์ ์์น ๋ฆฌํด
-- find_in_set : ,๋ก ๋๋์ด์ง ๋ฌธ์์ด ๊ทธ๋ฃน์์ ๊ทธ๋ฃน์ ์์น ๋ฆฌํด
-- find_in_set(๋ฌธ์์ด, ',๋ก ๋๋์ด์ง ๋ฌธ์์ด ๊ทธ๋ฃน')
-- ๊ทธ๋ฃน ๋ฌธ์์ด์์ ๋ฌธ์์ด์ด ์์ผ๋ฉด 0์ ๋ฆฌํด
SELECT find_in_set('y','x,y,z') -- 2
SELECT find_in_set('a','x,y,z') -- 0 (์๋ ๊ฒฝ์ฐ ์๋ฌ๊ฐ ์๋ 0์ฒ๋ฆฌ)
โ 3. ์ํ ํจ์ (Numeric Functions)
์ซ์ ์ฐ์ฐ์ ์ฌ์ฉ๋๋ ํจ์
ํจ์ | ์ค๋ช | ์์ |
---|---|---|
ABS(n) |
์ ๋๊ฐ ๋ฐํ | SELECT ABS(-10); โ 10 |
ROUND(n, d) |
๋ฐ์ฌ๋ฆผ (์์ d ์๋ฆฌ) | SELECT ROUND(3.14159, 2); โ 3.14 |
TRUNCATE(n, d) |
๋ฒ๋ฆผ (์์ d ์๋ฆฌ) | SELECT truncate(12.3456,2); โ 12.34 |
CEIL(n) , FLOOR(n) |
ceil : ํฐ ๊ทผ์ฌ์ ์ | ย |
floor : ์์ ๊ทผ์ฌ์ ์ | SELECT CEIL(3.2); โ 4 |
ย |
MOD(n, d) |
๋๋จธ์ง ์ฐ์ฐ | SELECT MOD(10, 3); โ 1 |
RAND() |
๋์ ์์ฑ | SELECT RAND(); |
POWER(n, d) |
์ ๊ณฑํจ์ | SELECT POWER(3, 3); โ 9 |
โ
ROUND(์ซ์์ด, ๋ฐ์ฌ๋ฆผ d ์๋ฆฌ)
โ ์์ซ์ ์ซ์์ด์ ๋ฐ์ฌ๋ฆผํ๋ ํจ์
-- ๋ฐ์ฌ๋ฆผ ํจ์ : round
-- round(์ซ์) : ์์ซ์ ์ดํ ์ฒซ๋ฒ์งธ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผํ์ฌ ์ ์ํ์ผ๋ก ์ถ๋ ฅ
-- round(์ซ์, ์ซ์) : ์์ซ์ ์ ๊ธฐ์ค์ผ๋ก 10์ ์๋ฆฌ -1, ์์ซ์ ์ดํ๋ 1,2,3...
SELECT ROUND(12.3456,-1) r1, ROUND(12.3456) r2, ROUND(12.3456,0) r3,
ROUND(12.3456,1) r4, ROUND(12.3456,2) r5, ROUND(12.3456,3) r6
-- ๋ฌธ์ : score ํ
์ด๋ธ์์ ํ์์ ํ๋ฒ, ๊ตญ์ด, ์ํ, ์์ด, ์ด์ , ํ๊ท ์ ์กฐํํ๊ธฐ
-- ํ๊ท ์ ์์ซ์ ์ดํ 2์๋ฆฌ๋ก ๋ฐ์ฌ๋ฆผํ์ฌ ์ถ๋ ฅํ๊ธฐ
-- ์ด์ ์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ธฐ
SELECT studno, kor, math, eng, kor+math+eng, ROUND((kor+math+eng)/3,-2)
FROM score
ORDER BY (kor+math+eng);
โ
truncate(์ซ์์ด, ๋ฒ๋ฆผ d ์๋ฆฌ)
โ ์์ซ์ ์ซ์์ด์ ๋ฒ๋ฆผ ํจ์
-- ๋ฒ๋ฆผ ํจ์ : truncate
-- truncate(์ซ์, ์๋ฆฌ์) : ์์์ ์ ๊ธฐ์ค์ผ๋ก 10์์๋ฆฌ -1, ์์ซ์ ์ดํ๋ 1,2,3....
SELECT truncate(12.3456,-1) r1,truncate(12.3456, 0) r2,truncate(12.3456,0) r3,
truncate(12.3456,1) r4,truncate(12.3456,2)r5, truncate(12.3456,3) r6
-- ๊ต์์ ๊ธ์ฌ๋ฅผ 15%์ธ์ํ์ฌ ์ ์๋ก ์ถ๋ ฅํ๊ธฐ
-- ๊ต์์ด๋ฆ, ์ ์๋ก ์ถ๋ ฅ๋ ๋ฐ์ฌ๋ฆผ ์์๊ธ์ฌ, ์ ์ญ๋ ์์๊ธ์ฌ ์ถ๋ ฅํ๊ธฐ
SELECT NAME,ROUND(salary*1.15),truncate((salary*1.15),0)
FROM professor;
โ
SELECT CEIL(์ซ์์ด), FLOOR(์ซ์์ด)
โ๊ทผ์ฌ์ ์ ํจ์
-- ๊ทผ์ฌํจ์ : ๊ฐ์ฅ ๊ฐ๊น์ด ์ ์๊ฐ
-- ceil : ํฐ ๊ทผ์ฌ์ ์
-- floor : ์์ ๊ทผ์ฌ์ ์
SELECT CEIL(12.3456), FLOOR(12.3456), CEIL(-12.3456), FLOOR(-12.3456)
SELECT CEIL(12), FLOOR(12), CEIL(-12), FLOOR(-12)
โ
SELECT Mod(n,d)
โ๋๋จธ์ง์ฐ์ฐ
-- ๋๋จธ์ง ํจ์ : MOD. ์ฐ์ฐ์ %๋ก๋ ๋๋จธ์ง ๊ฐ๋ฅ
SELECT 12/8, 21%8, MOD(21,8) -- 5
โ
SELECT POWER(n,d)
โ์ ๊ณฑ์ฐ์ฐ
-- ์ ๊ณฑํจ์ : POWER
SELECT POWER(3,3) -- 27
โ 4. ๋ ์ง ๋ฐ ์๊ฐ ํจ์ (Date & Time Functions)
๋ ์ง์ ์๊ฐ์ ๋ค๋ฃจ๋ ํจ์
ํจ์ | ์ค๋ช | ์์ |
---|---|---|
NOW() |
ํ์ฌ ๋ ์ง์ ์๊ฐ | SELECT NOW(); |
CURDATE() , CURTIME() |
ํ์ฌ ๋ ์ง / ์๊ฐ ๋ฐํ | SELECT CURDATE(); |
DATE_ADD(date, INTERVAL n unit) |
๋ ์ง ๋ํ๊ธฐ | SELECT DATE_ADD('2025-01-01', INTERVAL 7 DAY); |
DATE_SUB(date, INTERVAL n unit) |
๋ ์ง ๋นผ๊ธฐ | SELECT DATE_SUB('2025-01-01', INTERVAL 1 MONTH); |
DATEDIFF(date1, date2) |
๋ ์ง ์ฐจ์ด ๊ณ์ฐ | SELECT DATEDIFF('2025-12-31', '2025-01-01'); โ 364 |
YEAR(date) , MONTH(date) , DAY(date) |
์ฐ, ์, ์ผ ์ถ์ถ | SELECT YEAR(NOW()); |
`WEEKDAY(๋ ์ง), DAYOFWEEK(๋ ์ง), WEEK(๋ ์ง), | ย | ย |
LAST_DAY(๋ ์ง) | ์์ผ, ์ฃผ, ๋ง์ง๋ง ๋ ์ง ๋ฆฌ | SELECT WEEKDAY,DAYOFWEEK,WEEK, LAST_DAY(NOW());` |
ย | ย |
date_format(date, 'ํฌ๋งทํ์%Y') |
๋ ์ง๋ฅผ ์ง์ ๋ ๋ฌธ์์ด๋ก ๋ณํ | SELECT SELECT DATE_FORMAT(NOW(),'%Y๋
%m์%d์ผ %H:%i:%s') |
STR_TO_DATE(date, 'ํฌ๋งทํ์%Y') |
ํ์ํ๋ ๋ฌธ์์ด์ ๋ ์ง๋ก ๋ณํ. | SELECT STR_TO_DATE('2025๋
12์25์ผ','%Y๋
%m์%d์ผ %H:%i:%s') |
โ
SELECT NOW()
โ ๋ ์ง์ ์๊ฐ ๋ฆฌํด
-- now() : ๋ ์ง์ ์๊ฐ ๋ฆฌํด
SELECT NOW()
โ
CURDATE()
โ ํ์ฌ ๋ ์ง ๋ฆฌํด
-- curdate(), current_date, : ์ค๋ ๋ ์ง ๋ฆฌํด
SELECT CURDATE()+1 -- ์ต์ผ ์ถ๋ ฅ
SELECT CURDATE()-1 -- ์ ์ผ ์ถ๋ ฅ
์ฃผ์: CURDATE()
๋ ๋ ์งํ์ธ๋ฐ, ์ซ์ ์ฐ์ฐ ์ ์๋์ผ๋ก INT๋ก ๋ณํ๋์ด๋ฒ๋ฆด ์ ์์ด์ ๋ ์ง ์ฐ์ฐ์ ์๋์ฒ๋ผ ์ฌ์ฉํ๋ ๊ฒ ๊ถ์ฅ:
SELECT DATE_ADD(CURDATE(), INTERVAL 1 DAY);
๋ ์งํ์ ์ ์งํ ์ํ๋ก ์์ ํ๊ฒ ์ฐ์ฐ.
โ
DATEDIFF(๋ ์ง1, ๋ ์ง2)
โ ๋ ์ง ์ฐจ์ด ๊ณ์ฐ
-- ๋ ์ง ์ฌ์ด์ ์ผ์ : DATEDIFF()
-- datediff(๋ ์ง1, ๋ ์ง2): ๋ ์ง1์์ ๋ ์ง2์ ์ผ์ ๋ฆฌํด
SELECT NOW(), '2025-01-01', DATEDIFF(NOW(),'2025-01-01'),
DATEDIFF('2025-12-31','2025-01-01')
-- ํ์์ ์ด๋ฆ, ์์ผ, ์์ผ๋ถํฐ ํ์ฌ๊น์ง์ ์ผ์ ์กฐํํ๊ธฐ
SELECT NAME, birthday, DATEDIFF(NOW(),birthday)
FROM student;
-- ํ์์ ์ด๋ฆ, ์์ผ, ์์ผ๋ถํฐ ํ์ฌ๊น์ง์ ์ผ์/365๋ก ๋๋์ด ๋์ด ์กฐํํ๊ธฐ
-- ๋์ด๋ ์ ์ญํ์ฌ ์ ์๋ก ์ถ๋ ฅํ๊ธฐ
SELECT NAME, birthday, DATEDIFF(NOW(),birthday)
FROM student;
SELECT NAME, birthday, truncate(DATEDIFF(NOW(),birthday)/365,0)
FROM student;
-- ๋ฌธ์ 1
-- ํ์์ ์ด๋ฆ, ์์ผ, ํ์ฌ ๊ฐ์ ์, ๋์ด๋ฅผ ์ถ๋ ฅํ๊ธฐ
-- ๊ฐ์์ : ์ผ์ / 30 ๊ณ์ฐ. ๋ฐ์ฌ๋ฆผํ์ฌ ์ ์๋ก ์ถ๋ ฅ
-- ๊ฐ์์ : ์ผ์ 365 ๊ณ์ฐ. ์ ์ญํ์ฌ ์ ์๋ก ์ถ๋ ฅ
-- ํ๋
์์ผ๋ก ๋์ด๊ฐ ๋ง์ ์์ผ๋ก ์ ๋ ฌํ์ฌ ์ถ๋ ฅํ๊ธฐ
SELECT NAME, birthday, ROUND(DATEDIFF(NOW(),birthday)/30) ๊ฐ์์,
truncate(DATEDIFF(NOW(),birthday)/365,0)
FROM student
ORDER BY grade, truncate(DATEDIFF(NOW(),birthday)/365,0)DESC;
SELECT NAME, birthday, ROUND(DATEDIFF(NOW(),birthday)/30) ๊ฐ์์,
truncate(DATEDIFF(NOW(),birthday)/365,0) ๋์ด
FROM student
ORDER BY grade, ๋์ด DESC;
-- ๋ฌธ์ 1
-- ํ์์ ์ด๋ฆ, ์์ผ, ํ์ฌ ๊ฐ์ ์, ๋์ด๋ฅผ ์ถ๋ ฅํ๊ธฐ
-- ๊ฐ์์ : ์ผ์ / 30 ๊ณ์ฐ. ๋ฐ์ฌ๋ฆผํ์ฌ ์ ์๋ก ์ถ๋ ฅ
-- ๊ฐ์์ : ์ผ์ 365 ๊ณ์ฐ. ์ ์ญํ์ฌ ์ ์๋ก ์ถ๋ ฅ
-- ํ๋
์์ผ๋ก ๋์ด๊ฐ ๋ง์ ์์ผ๋ก ์ ๋ ฌํ์ฌ ์ถ๋ ฅํ๊ธฐ
SELECT NAME, birthday, ROUND(DATEDIFF(NOW(),birthday)/30) ๊ฐ์์,
truncate(DATEDIFF(NOW(),birthday)/365,0)
FROM student
ORDER BY grade, truncate(DATEDIFF(NOW(),birthday)/365,0)DESC;
SELECT NAME, birthday, ROUND(DATEDIFF(NOW(),birthday)/30) ๊ฐ์์,
truncate(DATEDIFF(NOW(),birthday)/365,0) ๋์ด
FROM student
ORDER BY grade, ๋์ด DESC;
โ
year, month, day(๋ ์ง)
โ ๋
, ์, ์ผ ๋ฆฌํด
-- ํ์์ ์ด๋ฆ๊ณผ, ์๋
์์ผ, ์๋
, ์์, ์์ผ ์กฐํํ๊ธฐ
/*
year(๋ ์ง) : ๋
๋ ๋ฆฌํด
month(๋ ์ง) : ์ ๋ฆฌํด
day(๋ ์ง) : ์ผ ๋ฆฌํด
*/
SELECT NAME, BIRTHDAY ์๋
์์ผ, YEAR(BIRTHDAY) ์๋
,
MONTH(BIRTHDAY) ์์, DAY(BIRTHDAY) ์์ผ
FROM student;
โ
WEEKDAY(๋ ์ง), DAYOFWEEK(๋ ์ง), WEEK(๋ ์ง), LAST_DAY(๋ ์ง)
โ ์์ผ, ์ฃผ, ๋ง์ง๋ง ๋ ์ง ๋ฆฌํด
/*
weekday(๋ ์ง) : ์์ผ ๋ฆฌํด 0:์ 1:ํ 2:์ .... 6. ์ผ์์ผ
dayofweek (๋ ์ง) : ์์ผ ๋ฆฌํด 1:์ผ, 2:์, 3:ํ .... 7:ํ
week(๋ ์ง) : ์ผ๋
๊ธฐ์ค ๋ช๋ฒ์งธ ์ฃผ
Last_day(๋ ์ง) : ํด๋น์์ ๋ง์ง๋ง ๋ ์ง
*/
-- ํ์์ ์ด๋ฆ๊ณผ, ์๋
์์ผ, ์๋
, ์์, ์์ผ ์กฐํํ๊ธฐ
SELECT WEEKDAY(NOW()), DAYOFWEEK(NOW()), WEEK(NOW()), LAST_DAY(NOW())
-- ๋ฌธ์
-- ๊ต์์ด๋ฆ, ์
์ฌ์ผ, ์
์ฌ๋
๋ ํด๊ฐ๋ณด์์ผ, ์ฌํด์ ํด๊ฐ๋ณด์์ผ ์กฐํํ๊ธฐ
-- ํด๊ฐ๋ณด์์ผ : ์
์ฌ์์ ๋ง์ง๋ง ์ผ์.
SELECT NAME, hiredate, LAST_DAY(hiredate)'์
์ฌ๋
๋ํด๊ฐ๋ณด์์ผ',
LAST_DAY(concat(YEAR(NOW()),SUBSTR(hiredate,5)))'์ฌํด์ํด๊ฐ๋ณด์'
FROM professor;
-- ๋ฌธ์
-- ๊ต์ ์ค ์
์ฌ์์ด 1~3์์ธ ๊ต์์ ๊ธ์ฌ๋ฅผ 15% ์ธ์์์ ์
-- ๊ต์์ด๋ฆ, ํ์ฌ๊ธ์ฌ, ์ธ์์์ ๊ธ์ฌ, ๊ธ์ฌ์๊ธ์ผ ์ถ๋ ฅํ๊ธฐ
-- ๊ธ์ฌ ์๊ธ์ผ : ์ฌํด ์
์ฌ์์ ๋ง์ง๋ง ์ผ์
-- ์ธ์์์ ๊ธ์ฌ : ๋ฐ์ฌ๋ฆผํ์ฌ ์ ์๋ก ์ถ๋ ฅ
-- ์ธ์์์ ๊ต์๋ง ์ถ๋ ฅํ๊ธฐ
SELECT NAME'์ด๋ฆ',salary'ํ์ฌ๊ธ์ฌ',
round(salary*1.15)์ธ์์์ ๊ธ์ฌ,
LAST_DAY(concat(YEAR(NOW()),SUBSTR(hiredate,5))) ๊ธ์ฌ์๊ธ์ผ
FROM professor
WHERE RIGHT(position,2)='๊ต์' and substr(hiredate,6,2)>=1 AND substr(hiredate,6,2)<=3
SELECT NAME'์ด๋ฆ',salary'ํ์ฌ๊ธ์ฌ',
round(salary*1.15)์ธ์์์ ๊ธ์ฌ,
LAST_DAY(concat(YEAR(NOW()),SUBSTR(hiredate,5))) ๊ธ์ฌ์๊ธ์ผ
FROM professor
WHERE MONTH(hiredate) < 4
โ
date_add(๋ ์ง, ์ต์
), data_sub(๋ ์ง, ์ต์
)
โ INTERVAL (์ซ์) (๋ ์งํ)์ ๋ฐ๋ผ ์ด์ ์ดํ ๋ ์ง ๋ฆฌํด
/*
date_add(๋ ์ง, ์ต์
) : ๋ ์ง ์ดํ
data_sub(๋ ์ง, ์ต์
) : ๋ ์ง ์ด์
์ต์
interval n day : n ์ผ
interval n hour : n ์๊ฐ
interval n minute : n ๋ถ
*/
-- ํ์ฌ ์๊ฐ ๊ธฐ์ค 1์ผ ์ดํ ๋ ์ง
SELECT NOW(), DATE_ADD(NOW(), INTERVAL 1 DAY)
-- ํ์ฌ ์๊ฐ ๊ธฐ์ค 1์ผ ์ด์ ๋ ์ง
SELECT NOW(), DATE_sub(NOW(), INTERVAL 1 DAY)
-- ํ์ฌ ์๊ฐ ๊ธฐ์ค 1์๊ฐ ์ดํ ์ด์ ๋ ์ง
SELECT NOW(), DATE_add(NOW(), INTERVAL 1 hour)
-- ํ์ฌ ์๊ฐ ๊ธฐ์ค 1์๊ฐ ์ดํ ์ด์ ๋ ์ง
SELECT NOW(), DATE_add(NOW(), INTERVAL 1 minute)
-- ํ์ฌ ์๊ฐ ๊ธฐ์ค 1์๊ฐ ์ดํ ์ด์ ๋ ์ง
SELECT NOW(), DATE_add(NOW(), INTERVAL 1 second)
-- ํ์ฌ ์๊ฐ ๊ธฐ์ค 1๋ฌ ์ดํ ์ด์ ๋ ์ง
SELECT NOW(), DATE_add(NOW(), INTERVAL 1 month)
-- ํ์ฌ ์๊ฐ ๊ธฐ์ค 1๋ฌ ์ดํ ์ด์ ๋ ์ง
SELECT NOW(), DATE_add(NOW(), INTERVAL 1 year)
-- ๋ฌธ์ 1
-- ๊ต์๋ฒํธ, ์ด๋ฆ, ์
์ฌ์ผ, ์ ์์
์ฌ์ผ ์กฐํํ๊ธฐ
-- ์ ์์
์ฌ์ผ : ์
์ฌ์ผ 3๊ฐ์ ์ดํ๋ก ํ๋ค
SELECT NO, NAME, hiredate, DATE_ADD(hiredate, INTERVAL 3 MONTH)
FROM professor
-- ๋ฌธ์ 2
-- emp ํ
์ด๋ธ์์ ์ ์ ์
์ฌ์ผ์ ์
์ฌ์ผ์ 2๊ฐ์ ์ดํ ๋ค์๋ฌ 1์ผ๋ก ํ๋ค.
-- ์ฌ์๋ฒํธ, ์ด๋ฆ, ์
์ฌ์ผ, ์ ์์
์ฌ์ผ ์ถ๋ ฅํ๊ธฐ
SELECT empno, ename, hiredate,
DATE_ADD(last_day(DATE_ADD(hiredate, INTERVAL 2 MONTH)),INTERVAL 1 DAY)
FROM emp
-- ํด์ง์ ์ฒญ ๊ฐ๋ฅ์ผ : ํ์ฌ์ผ์ ์ด์ 2๋ฌ์ ์ผ๋ก ํ๋ค.
-- ํ์ฌ ์ผ์ ํด์ง์ผ๋ก ๋ณผ ๋ ์ ์ฒญ ๊ธฐ์ค์ผ์ ์ถ๋ ฅํ๊ธฐ
SELECT DATE_SUB(NOW(), INTERVAL 2 month)
โ
date_format(๋ ์ง, 'ํฌ๋งทํ์'), STR_TO_DATE(๋ ์ง, 'ํฌ๋งทํ์')
โ ๋ ์ง๋ฅผ ์ง์ ๋ ๋ฌธ์์ด๋ก ๋ณํ, ํ์ํ๋ ๋ฌธ์์ด์ ๋ ์ง๋ก ๋ณํ.
-- ๋ ์ง ๊ด๋ จ ๋ณํ ํจ์
-- date_format : ๋ ์ง๋ฅผ ์ง์ ๋ ๋ฌธ์์ด๋ก ๋ณํ. ๋ ์ง => ํ์ํ๋ฌธ์์ด
-- str_to_date : ํ์ํ๋ ๋ฌธ์์ด์ ๋ ์๋ก ๋ณํ. ํ์ํ๋ฌธ์์ด => ๋ ์ง.
/*
ํ์ํ ๋ฌธ์์ด
%Y : 4์๋ฆฌ ๋
๋
%m : 2์๋ฆฌ ์
%d : 2์๋ฆฌ ์ผ์
%H : 0~23์
%h : 1~12์
%i : ๋ถ
%s : ์ด
%p : AM/PM
%W : ์์ผ
%a : ์ฝ์ ํ์ ์์ผ
*/
SELECT NOW(), DATE_FORMAT(NOW(),'%Y๋
%m์%d์ผ %H:%i:%s') -- 15:03:03
SELECT NOW(), DATE_FORMAT(NOW(),'%Y๋
%m์%d์ผ %h:%i:%s %p %W %a') -- 03:03:03
-- ํ์ฌ์ ๋
๋ ์ถ๋ ฅํ๊ธฐ
SELECT YEAR(NOW()) ๋
๋1, DATE_FORMAT(NOW(), "%Y๋
")
-- 2025 -12 -31 ์ผ์ ์์ผ ์ถ๋ ฅํ๊ธฐ
SELECT DATE_FORMAT(LAST_DAY(DATE_ADD(NOW(),INTERVAL 9 MONTH)),'%W')
SELECT DATE_FORMAT('2025-12-31', '%W')
-- 2025๋
12์25์ผ์ ์์ผ ์ถ๋ ฅํ๊ธฐ
SELECT DATE_FORMAT('2025-12-25', '%W')
-- 1. 2025๋
12์25์ผ => ๋ ์งํ์
์ผ๋ก ๋ณํ
SELECT STR_TO_DATE('2025๋
12์25์ผ','%Y๋
%m์%d์ผ')
-- 2. ๋ ์งํ์
-> ์์ผ๋ถ๋ถ ์ฒ๋ฆฌ
SELECT date_format(STR_TO_DATE('2025๋
12์25์ผ','%Y๋
%m์%d์ผ'),'%Y๋
%m์%d์ผ %W')
-- ๊ต์์ ์ด๋ฆ, ์ง์ฑ
, ์
์ฌ์ผ, ์ ์์
์ฌ์ผ ์ถ๋ ฅํ๊ธฐ
-- ์ ์์
์ฌ์ผ : ์
์ฌ์ผ์ 3๊ฐ์ ํ
-- ์
์ฌ์ผ, ์ ์์
์ฌ์ผ์ YYYY๋
MM์ DD์ผ์ ํ์์ผ๋ก ์ถ๋ ฅํ๊ธฐ
SELECT NAME, POSITION, hiredate, date_format(DATE_ADD(hiredate, INTERVAL 3 MONTH), '%Y๋
%m์%d์ผ')
FROM professor;
-- ํ์์ ์ด๋ฆ(name)๊ณผ ์ง๋๊ต์์ ๋ฒํธ(profno) ์ถ๋ ฅํ๊ธฐ
-- ๋จ ์ง๋๊ต์๊ฐ ์๋ ๊ฒฝ์ฐ 9999๋ก ์ถ๋ ฅํ๊ธฐ
SELECT NAME'์ด๋ฆ', ifnull(profno,"9999")'์ง๋๊ต์'
FROM student
โ 5. ์ ์ด ํ๋ฆ ํจ์ (Control Flow Functions)
์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฐ์ ๋ฐํ
ํจ์ | ์ค๋ช | ์์ |
---|---|---|
IF(condition, true_value, false_value) |
์กฐ๊ฑด๋ฌธ | SELECT IF(1 > 0, '์ฐธ', '๊ฑฐ์ง'); |
CASE WHEN condition THEN result END |
์ฌ๋ฌ ์กฐ๊ฑด ์ฒ๋ฆฌ | SELECT CASE WHEN salary > 5000 THEN 'High' ELSE 'Low' END FROM employees; |
IFNULL(expression, alt_value) |
NULL ์ฒ๋ฆฌ | SELECT IFNULL(NULL, '๋์ฒด๊ฐ'); |
โ
IF(์กฐ๊ฑด๋ฌธ, "์ฐธ", "๊ฑฐ์ง")
โ ์กฐ๊ฑด์ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํํ๋ค.
-- if ์กฐ๊ฑดํจ์ : if(์กฐ๊ฑด๋ฌธ,'์ฐธ','๊ฑฐ์ง')
-- 1ํ๋
ํ์์ธ ๊ฒฝ์ฐ๋ ์ ์
์์ผ๋ก 1ํ๋
ํ์์ด ์๋ ๊ฒฝ์ฐ๋ ์ฌํ์์ผ๋ก ์ถ๋ ฅํ๊ธฐ
SELECT NAME'์ด๋ฆ', if(grade=1,"์ ์
์","์ฌํ์")'ํ์'
FROM student
-- ๊ต์์ ์ด๋ฆ, ํ๊ณผ๋ฒํธ, ํ๊ณผ๋ช
์ถ๋ ฅํ๊ธฐ
-- ํ๊ณผ๋ช
์ ํ๊ณผ๋ฒํธ๊ฐ 101 : ์ปดํจํฐ ๊ณตํ, ๋๋จธ์ง๋ ๊ณต๋์ผ๋ก ์ถ๋ ฅ
SELECT NAME'์ด๋ฆ', deptno'ํ๊ณผ๋ฒํธ', if(deptno=101,"์ปดํจํฐ๊ณตํ"," ")'ํ๊ณผ๋ช
'
FROM professor
-- ๊ต์์ ์ด๋ฆ, ํ๊ณผ๋ฒํธ, ํ๊ณผ๋ช
์ถ๋ ฅํ๊ธฐ
-- ํ๊ณผ๋ช
์ ํ๊ณผ๋ฒํธ๊ฐ 101 : ์ปดํจํฐ ๊ณตํ, ๋๋จธ์ง๋ ๊ณต๋์ผ๋ก ์ถ๋ ฅ
SELECT NAME'์ด๋ฆ', deptno'ํ๊ณผ๋ฒํธ', if(deptno=101,"์ปดํจํฐ๊ณตํ"," ")'ํ๊ณผ๋ช
'
FROM professor
-- ํ์์ ์ฃผ๋ฏผ๋ฒํธ 7๋ฒ์งธ ์๋ฆฌ๊ฐ 1,3์ธ ๊ฒฝ์ฐ ๋จ์,
-- 2,4์ธ ๊ฒฝ์ฐ ์ฌ์๋ก ์ถ๋ ฅํ๊ธฐ
SELECT NAME'์ด๋ฆ',JUMIN'์ฃผ๋ฏผ๋ฒํธ',IF(SUBSTR(JUMIN,7,1)=1 OR SUBSTR(JUMIN,7,1)=3,"๋จ์","์ฌ์")'์ฑ๋ณ'
FROM student
SELECT NAME'์ด๋ฆ',JUMIN'์ฃผ๋ฏผ๋ฒํธ',IF(SUBSTR(JUMIN,7,1)IN(1,3),"๋จ์",
IF(SUBSTR(JUMIN,7,1)IN(2,4),"์ฌ์","์ฃผ๋ฏผ๋ฒํธ์ค๋ฅ"))'์ฑ๋ณ'
FROM student
SELECT NAME'์ด๋ฆ',JUMIN'์ฃผ๋ฏผ๋ฒํธ',
IF(SUBSTR(JUMIN,7,1)=1,"๋จ์",
IF(SUBSTR(JUMIN,7,1)=2,"์ฌ์",
IF(SUBSTR(JUMIN,7,1)=3,"๋จ์","์ฌ์")))'์ฑ๋ณ'
FROM student
-- ๋ฌธ์
-- ๊ต์์ด๋ฆ, ํ๊ณผ๋ฒํธ, ํ๊ณผ๋ช
์ถ๋ ฅํ๊ธฐ
-- ํ๊ณผ๋ช
: 101 : ์ปดํจํฐ๊ณตํ, 102:๋ฉํฐ๋ฏธ๋์ด๊ณตํ, 201:๊ธฐ๊ณ๊ณตํ, ๊ทธ์ธ:๊ทธ์ธํ๊ณผ
SELECT NAME'๊ต์์ด๋ฆ', deptno'ํ๊ณผ๋ฒํธ',
if(deptno=101,"์ปดํจํฐ๊ณตํ",
if(deptno=102,"๋ฉํฐ๋ฏธ๋์ด๊ณตํ",
if(deptno=201,"๊ธฐ๊ณ๊ณตํ","๊ทธ์ธํ๊ณผ")))'ํ๊ณผ๋ช
'
FROM professor
โ
IFNULL(์ปฌ๋ผ, "๊ธฐ๋ณธ๊ฐ")
โ ์ปฌ๋ผ์ ๊ฐ์ด null์ผ ๊ฒฝ์ฐ โ๊ธฐ๋ณธ๊ฐโ์ ์นํ
-- ifnull(์ปฌ๋ผ, ๊ธฐ๋ณธ๊ฐ): ์ปฌ๋ผ์ ๊ฐ์ด null์ธ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ ์นํ
-- ๊ต์์ ์ด๋ฆ, ์ง๊ธ, ๊ธ์ฌ,๋ณด๋์ค, ๊ธ์ฌ+๋ณด๋์ค ์กฐํํ๊ธฐ
SELECT NAME, POSITION, salary, bonus, salary+bonus
FROM professor
WHERE bonus IS NOT NULL
UNION
SELECT NAME, POSITION, salary, bonus, salary
FROM professor
WHERE bonus IS NULL
-- ifnull ์ฌ์ฉ
-- ifnull(bonis, 0) : bonus์ปฌ๋ผ์ ๊ฐ์ด null์ธ ๊ฒฝ์ฐ 0์ผ๋ก ์นํ
SELECT NAME, POSITION, salary, bonus, salary+IFNULL(bonus,0)
FROM professor
-- ๋์ ๊ฒฐ๊ณผ๊ฐ์ด ๊ฐ์
-- ifnull(salary+bonus,salary) salary+bonus์ ๊ฒฐ๊ณผ๊ฐ null์ธ ๊ฒฝ์ฐ salary๋ก ์นํ
SELECT NAME, POSITION, salary, bonus, IFNULL(salary+bonus,salary)
FROM professor
-- ๊ต์์ ์ด๋ฆ, ์ง์ฑ
, ๊ธ์ฌ, ๋ณด๋์ค ์ถ๋ ฅํ๊ธฐ
-- ๋ณด๋์ค๊ฐ ์๋ ๊ฒฝ์ฐ๋ ๋ณด๋์ค ์์์ผ๋ก ์ถ๋ ฅํ๊ธฐ
SELECT NAME'์ด๋ฆ', POSITION'์ง์ฑ
', salary'๊ธ์ฌ', ifnull(bonus,"๋ณด๋์ค์์")'๋ณด๋์ค'
FROM professor
โ
CASE(์ปฌ๋ผ, "๊ธฐ๋ณธ๊ฐ")
โ ์ธ๋ฑ์ค ํ์ฉ ์ฌ๋ฌ ์กฐ๊ฑด ์ฒ๋ฆฌ
/*
CASE ์กฐ๊ฑด๋ฌธ
case ์ปฌ๋ผ๋ช
when ๊ฐ1 then ๋ฌธ์์ด
when ๊ฐ2 then ๋ฌธ์์ด
...
else ๋ฌธ์์ด end
*/
-- ๊ต์์ด๋ฆ, ํ๊ณผ์ฝ๋, ํ๊ณผ๋ช
์ถ๋ ฅํ๊ธฐ
-- ํ๊ณผ๋ช
: 101 ํ๊ณผ์ธ ๊ฒฝ์ฐ '์ปดํจํฐ๊ณตํ', ๊ทธ์ธ๋ ๊ณต๋ ์ถ๋ ฅ
SELECT NAME, deptno,
CASE deptno
when 101 then "์ปดํจํฐ๊ณตํ"
when 102 then "๋ฉํฐ๋ฏธ๋์ด๊ณตํ"
when 201 then "๊ธฐ๊ณ๊ณตํํ"
ELSE "๊ทธ์ธํ๊ณผ" END 'ํ๊ณผ๋ช
'
FROM professor
-- ๊ต์์ด๋ฆ, ํ๊ณผ๋ฒํธ, ๋ํ๋ช
์ถ๋ ฅํ๊ธฐ
-- ๋ํ๋ช
: 101,102,201: ๊ณต๊ณผ๋ํ, ๊ทธ์ธ๋ ๊ทธ์ธ๋ํ ์ถ๋ ฅํ๊ธฐ
SELECT NAME'๊ต์์ด๋ฆ',DEPTNO'ํ๊ณผ๋ฒํธ',
IF(DEPTNO=101 OR DEPTNO=102 OR DEPTNO=201,"๊ณต๊ณผ๋ํ",
"๊ทธ์ธ๋ํ")'๋ํ๋ช
'
FROM professor
SELECT NAME'๊ต์์ด๋ฆ',DEPTNO'ํ๊ณผ๋ฒํธ',
IF(DEPTNO IN (101,102,201),"๊ณต๊ณผ๋ํ",
"๊ทธ์ธ๋ํ")'๋ํ๋ช
'
FROM professor
SELECT NAME'๊ต์์ด๋ฆ',DEPTNO'ํ๊ณผ๋ฒํธ',
CASE DEPTNO
WHEN 101 THEN "๊ณต๊ณผ๋ํ"
WHEN 102 THEN "๊ณต๊ณผ๋ํ"
WHEN 201 THEN "๊ณต๊ณผ๋ํ"
ELSE "๊ทธ์ธ๋ํ"END'๋ํ๋ช
'
FROM professor
-- ๋ฌธ์
-- ํ์์ ์ด๋ฆ, ์ฃผ๋ฏผ๋ฒํธ, ์ถ์๋ถ๊ธฐ๋ฅผ ์ถ๋ ฅํ๊ธฐ
-- ์ถ์๋ถ๊ธฐ : ์ฃผ๋ฏผ๋ฒํธ ๊ธฐ์ค 1~3:1๋ถ๊ธฐ,
-- 4~6:2๋ถ๊ธฐ, 7~9:3๋ถ๊ธฐ, 10~12:4๋ถ๊ธฐ
SELECT NAME '์ด๋ฆ', jumin '์ฃผ๋ฏผ๋ฒํธ',
CASE
WHEN SUBSTR(jumin, 3, 2) IN (1,2,3) THEN "1๋ถ๊ธฐ"
WHEN SUBSTR(jumin, 3,2) IN (4,5,6) THEN "2๋ถ๊ธฐ"
WHEN SUBSTR(jumin, 3,2) IN (7,8,9) THEN "3๋ถ๊ธฐ"
WHEN SUBSTR(jumin, 3,2) IN (10,11,12) THEN "4๋ถ๊ธฐ"
ELSE "๊ทธ์ธ๋ถ๊ธฐ" END '์ถ์๋ถ๊ธฐ'
FROM student;
-- ๋ฌธ์
-- ํ์์ ์ด๋ฆ, ์์ผ, ์ถ์๋ถ๊ธฐ๋ฅผ ์ถ๋ ฅํ๊ธฐ
-- ์ถ์๋ถ๊ธฐ : ์์ผ๊ธฐ์ค 1~3:1๋ถ๊ธฐ,
-- 4~6:2๋ถ๊ธฐ, 7~9:3๋ถ๊ธฐ, 10~12:4๋ถ
SELECT NAME '์ด๋ฆ', birthday '์์ผ',
CASE
WHEN SUBSTR(birthday, 6, 2) BETWEEN 1 AND 3 THEN "1๋ถ๊ธฐ"
WHEN SUBSTR(birthday, 6,2) BETWEEN 4 AND 6 THEN "2๋ถ๊ธฐ"
WHEN SUBSTR(birthday, 6,2) BETWEEN 7 AND 9 THEN "3๋ถ๊ธฐ"
WHEN SUBSTR(birthday, 6,2) BETWEEN 10 AND 12 THEN "4๋ถ๊ธฐ"
ELSE "๊ทธ์ธ๋ถ๊ธฐ" END '์ถ์๋ถ๊ธฐ'
FROM student;
๐ ์ฑ๋ฅ ๋น๊ต (๋์ฉ๋ ๋ฐ์ดํฐ์์์ ์ฐจ์ด์ )
๋น๊ต ํญ๋ชฉ | ์ฒซ ๋ฒ์งธ ์ฝ๋ (IF + OR ) |
๋ ๋ฒ์งธ ์ฝ๋ (IF + IN ) |
์ธ ๋ฒ์งธ ์ฝ๋ (CASE ) |
---|---|---|---|
๊ฐ๋ ์ฑ | โ OR ์ด ๋ง์์ง๋ฉด ๊ธธ์ด์ง |
โ
IN ์ด ๋ ๊ฐ๊ฒฐ |
โ
CASE ๋ ๊น๋ |
์ฑ๋ฅ (์๋ ๋ฐ์ดํฐ) | โ OR ์ฐ์ฐ์ด ๋ง์ผ๋ฉด ๋๋ฆด ์ ์์ |
โ
IN ์ด OR ๋ณด๋ค ๋น ๋ฅผ ๊ฐ๋ฅ์ฑ ๋์ |
โ
CASE ๋ ์ต์ ํ ๊ฐ๋ฅ |
์ฑ๋ฅ (๋์ฉ๋ ๋ฐ์ดํฐ) | โ OR ์ฐ์ฐ์ด ๋ง์์๋ก ์๋ ์ ํ |
โ
IN ์ด ์ธ๋ฑ์ค ์ต์ ํ ๊ฐ๋ฅ |
โ
CASE ๋ ์ธ๋ฑ์ค ํ์ฉ ๊ฐ๋ฅ |
ํ์ฅ์ฑ (์กฐ๊ฑด ์ถ๊ฐ ์ ํธ๋ฆฌ์ฑ) | โ OR ์ฐ์ฐ์ด ๊ธธ์ด์ง |
โ
IN ์ผ๋ก ์ฝ๊ฒ ์ถ๊ฐ ๊ฐ๋ฅ |
โ
WHEN ์ถ๊ฐ ๊ฐ๋ฅ |
SQL ํ์ค ์ค์ | โ (MariaDB์์ ์ฌ์ฉ ๊ฐ๋ฅ) | โ (MariaDB์์ ์ฌ์ฉ ๊ฐ๋ฅ) | โ (๋ชจ๋ SQL DBMS์์ ์ง์) |
๐ ๋์ฉ๋ ๋ฐ์ดํฐ์์์ ์ฐจ์ด์
โ
IF + OR
(์ฒซ ๋ฒ์งธ ์ฝ๋) โ โ ๋นํจ์จ์
OR
์ฐ์ฐ์ด ๋ง์์ง๋ฉด ์ฑ๋ฅ ์ ํ (๋น๊ต ํ์ ์ฆ๊ฐ)DEPTNO
๊ฐ์ด ๋ง์์ง์๋กOR
์ฐ์ฐ์ด ๋์ด๋์ ์๋๊ฐ ๋๋ ค์ง ์ ์์
โ
IF + IN
(๋ ๋ฒ์งธ ์ฝ๋) โ ๐ ์๋์ ์ผ๋ก ๋น ๋ฆ
IN
์ฐ์ฐ์๋ ๋ด๋ถ์ ์ผ๋ก ๋ฆฌ์คํธ๋ฅผ ํ ๋ฒ๋ง ์ค์บํ๊ธฐ ๋๋ฌธ์OR
๋ณด๋ค ๋น ๋ฆ- MariaDB๋
IN
์ฐ์ฐ์ ์ต์ ํํด์ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ ์๋ ์์
โ
CASE
(์ธ ๋ฒ์งธ ์ฝ๋) โ ๐ ๋๋ ๋ฐ์ดํฐ์์๋ ์์ ์
CASE
๋ ์์ฐจ์ ์ผ๋ก ์กฐ๊ฑด์ ๊ฒ์ฌ โ ์์์ ๋ง์กฑํ๋ฉด ๋ค์ ์กฐ๊ฑด์ ๋ณด์ง ์์- MariaDB, MySQL๋ฟ๋ง ์๋๋ผ ๋ชจ๋ DBMS์์ ์ฌ์ฉ ๊ฐ๋ฅ
- ๋๋ ๋ฐ์ดํฐ์์๋ ์ฑ๋ฅ์ด ์ข๊ณ , ํ์ฅ์ฑ๋ ๋ฐ์ด๋จ
๐ ๊ฒฐ๋ก : ๋์ฉ๋ ๋ฐ์ดํฐ์์ ์ต์ ์ ์ ํ
- ์๋๋ง ์ค์ํ๋ค๋ฉด? โ
IF + IN
(IN
์ดOR
๋ณด๋ค ์ฑ๋ฅ์ด ์ข์) - SQL ํ์ค์ ์ค์ํ๊ณ ํ์ฅ์ฑ์ ์ํ๋ค๋ฉด? โ
CASE
(๋ชจ๋ DBMS์์ ์ฌ์ฉ ๊ฐ๋ฅ
) - ์ ๋ ์ฐ๋ฉด ์ ๋๋ ๊ฒฝ์ฐ? โ
IF + OR
(๋นํจ์จ์ , ์๋ ์ ํ ๊ฐ๋ฅ์ฑ ๋์)
๐ก ์ค์ ๋์ฉ๋ ๋ฐ์ดํฐ ํ๊ฒฝ์์๋ CASE
๋๋ IN
์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ํจ์จ์ ! ๐
๐ก ์ฃผ์ ๊ฐ๋
โ ์ฐ์ฐ์ ๋ ์ ๊ฒํ๋ ๋ฐฉํฅ์ผ๋ก, ํธ์ถ์ ๋ ์ ๊ฒ ํ๋ ๋ฐฉํฅ์ผ๋ก ํ ์๋ก ์ต์ ํ๊ฐ ๋๋ค.
๐ฅ ์ฑ๋ฅ ๋น๊ต
๋น๊ต ํญ๋ชฉ | ์ฒซ ๋ฒ์งธ SQL (BETWEEN ) |
๋ ๋ฒ์งธ SQL (>= AND <= ) |
---|---|---|
SUBSTR() ํธ์ถ ํ์ |
1ํ | ์ฌ๋ฌ ๋ฒ (์ต๋ 2๋ฐฐ) |
๋น๊ต ์ฐ์ฐ ์ | 1ํ (BETWEEN ๋ด๋ถ ์ต์ ํ) |
2ํ (>= + <= ) |
CPU ์ฐ์ฐ๋ | ์ ์ (์ต์ ํ๋จ) | ๋ง์ (๋ถํ์ํ ์ค๋ณต ๋น๊ต) |
๊ฐ๋ ์ฑ | ์ข์ | ์๋์ ์ผ๋ก ๋์จ |
์คํ ์๋ (๋์ฉ๋) | ๋ ๋น ๋ฆ | ๋๋ฆผ |
1๏ธโฃ ์ฒซ ๋ฒ์งธ SQL (BETWEEN
์ฌ์ฉ)์ด ๋ ๋ฒ์งธ SQL (>= AND <=
์ฌ์ฉ)๋ณด๋ค ์ฑ๋ฅ์ด ๋ ์ข์
BETWEEN
์ ๋ด๋ถ์ ์ผ๋ก ์ต์ ํ๋์ด ์๊ณ ๋น๊ต ์ฐ์ฐ์ด ์ ์>= AND <=
๋ ๋ถํ์ํ ์ค๋ณต ๋น๊ต๊ฐ ๋ง์ ์ฑ๋ฅ์ด ๋จ์ด์ง
2๏ธโฃ SUBSTR(jumin, 3, 2)
๋๋ฌธ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์์
- ๋์ฉ๋ ๋ฐ์ดํฐ์์๋ ๋ฏธ๋ฆฌ
birth_month
์ปฌ๋ผ์ ์ถ๊ฐํ์ฌ ์ฑ๋ฅ ์ต์ ํ ํ์
3๏ธโฃ ์ต์ ํ๋ SQL์ ์ฌ์ฉํ๋ฉด ์คํ ์๋๊ฐ ์์ญ ๋ฐฐ ํฅ์ ๊ฐ๋ฅ
birth_month
์ปฌ๋ผ ์ถ๊ฐ + ์ธ๋ฑ์ค ์ ์ฉ +BETWEEN
์ฌ์ฉ ์กฐํฉ์ด ๊ฐ์ฅ ๋น ๋ฆ
๐ CASE ๋ฌธ์ ๋ ๊ฐ์ง ๋ฐฉ์ ๋น๊ต (CASE column WHEN ...
vs. CASE WHEN ... THEN ...
)
CASE
๋ฌธ์ ์ฌ์ฉํ ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
1๏ธโฃ CASE ๋ค์ ํน์ ์ปฌ๋ผ์ ๋ฃ๊ณ WHEN
์ ์์ ๊ฐ์ ๋น๊ตํ๋ ๋ฐฉ์
2๏ธโฃ WHEN
์ ์์ ์ง์ ์กฐ๊ฑด์ ๋ฃ๋ ๋ฐฉ์
1๏ธโฃ CASE ๋ค์ ์ปฌ๋ผ์ ๋ฃ๊ณ WHEN
์์ ๊ฐ์ ๋น๊ตํ๋ ๋ฐฉ์
SELECT NAME '์ด๋ฆ', jumin '์ฃผ๋ฏผ๋ฒํธ',
CASE SUBSTR(jumin, 3, 2) -- ์ฃผ๋ฏผ๋ฒํธ์์ ์์ ์ถ์ถ
WHEN 1 THEN "1๋ถ๊ธฐ"
WHEN 2 THEN "1๋ถ๊ธฐ"
WHEN 3 THEN "1๋ถ๊ธฐ"
WHEN 4 THEN "2๋ถ๊ธฐ"
WHEN 5 THEN "2๋ถ๊ธฐ"
WHEN 6 THEN "2๋ถ๊ธฐ"
WHEN 7 THEN "3๋ถ๊ธฐ"
WHEN 8 THEN "3๋ถ๊ธฐ"
WHEN 9 THEN "3๋ถ๊ธฐ"
WHEN 10 THEN "4๋ถ๊ธฐ"
WHEN 11 THEN "4๋ถ๊ธฐ"
WHEN 12 THEN "4๋ถ๊ธฐ"
ELSE "๊ทธ์ธ๋ถ๊ธฐ"
END '์ถ์๋ถ๊ธฐ'
FROM student;
โ ํน์ง
CASE
๋ค์SUBSTR(jumin, 3, 2)
์ ํ ๋ฒ๋ง ์ฌ์ฉ โ ์ฝ๋๊ฐ ๊ฐ๊ฒฐํจWHEN
์ ์์๋ ๋จ์ํ ๊ฐ ๋น๊ต๋ง ์ํ- ๋ด๋ถ์ ์ผ๋ก SUBSTR(jumin, 3, 2)๋ฅผ ํ ๋ฒ๋ง ์คํํ์ฌ ์ฑ๋ฅ์ด ๋ ์ข์ ๊ฐ๋ฅ์ฑ์ด ์์
๐ ์ฅ์
โ
๋น๊ต ์ฐ์ฐ์ด ๊ฐ๋จํจ โ WHEN
๋ค์๋ ๋จ์ํ ๊ฐ์ด ๋ค์ด๊ฐ๋ฏ๋ก MariaDB๊ฐ ์ต์ ํํ๊ธฐ ์ฌ์
โ
SUBSTR()
ํธ์ถ์ด ํ ๋ฒ๋ง ์ด๋ฃจ์ด์ง โ ๋ถํ์ํ ์ค๋ณต ์ฐ์ฐ์ ๋ฐฉ์ง
โ ๏ธ ๋จ์
โ WHEN
์กฐ๊ฑด์ ๋ฒ์๋ก ์ง์ ํ ์ ์์ (BETWEEN
์ฌ์ฉ ๋ถ๊ฐ)
โ ํน์ ํจํด์ด๋ ๋ณต์กํ ์กฐ๊ฑด์ ์ฒ๋ฆฌํ๊ธฐ ์ด๋ ค์
2๏ธโฃ WHEN
์์ ์ง์ ์กฐ๊ฑด์ ๋ฃ๋ ๋ฐฉ์
SELECT NAME '์ด๋ฆ', jumin '์ฃผ๋ฏผ๋ฒํธ',
CASE
WHEN SUBSTR(jumin, 3, 2) BETWEEN 1 AND 3 THEN "1๋ถ๊ธฐ"
WHEN SUBSTR(jumin, 3,2) BETWEEN 4 AND 6 THEN "2๋ถ๊ธฐ"
WHEN SUBSTR(jumin, 3,2) BETWEEN 7 AND 9 THEN "3๋ถ๊ธฐ"
WHEN SUBSTR(jumin, 3,2) BETWEEN 10 AND 12 THEN "4๋ถ๊ธฐ"
ELSE "๊ทธ์ธ๋ถ๊ธฐ"
END '์ถ์๋ถ๊ธฐ'
FROM student;
โ ํน์ง
WHEN
์ ์์ ์ง์ SUBSTR(jumin, 3, 2)
์ ์ฌ์ฉํ์ฌ ์กฐ๊ฑด์ ํ๊ฐBETWEEN
์ ์ฌ์ฉํ ์ ์์ด ๋ฒ์ ๋น๊ต๊ฐ ๊ฐ๋ฅSUBSTR(jumin, 3, 2)
๊ฐ ๊ฐWHEN
์ ์์ ๋ฐ๋ณต์ ์ผ๋ก ํธ์ถ๋จ โ ์ฑ๋ฅ ์ ํ ๊ฐ๋ฅ์ฑ
๐ ์ฅ์
โ
BETWEEN
์ ์ฌ์ฉํ์ฌ ๋ฒ์ ์กฐ๊ฑด์ ์ค์ ํ ์ ์์
โ
๋ณต์กํ ๋
ผ๋ฆฌ(์: AND
, OR
, IS NULL
๋ฑ)๋ฅผ ํ์ฉํ ์ ์์
โ ๏ธ ๋จ์
โ SUBSTR(jumin, 3, 2)
๋ฅผ ๊ฐ WHEN
์กฐ๊ฑด์์ ๋ฐ๋ณต ์คํ โ ๋ถํ์ํ ์ฐ์ฐ ์ฆ๊ฐ
โ ๋นํจ์จ์ ์ธ WHEN
์กฐ๊ฑด์ด ๋ง์์ง๋ฉด ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์
๐ฅ ์ฑ๋ฅ ๋น๊ต (๋์ฉ๋ ๋ฐ์ดํฐ ๊ธฐ์ค)
๋น๊ต ํญ๋ชฉ | CASE column WHEN ... ๋ฐฉ์ |
CASE WHEN ... THEN ... ๋ฐฉ์ |
---|---|---|
SUBSTR() ํธ์ถ ํ์ |
1ํ | ์ฌ๋ฌ ๋ฒ (WHEN ์กฐ๊ฑด ๊ฐ์๋งํผ ๋ฐ๋ณต) |
์ฐ์ฐ๋ | ์ ์ | ๋ง์ |
๋น๊ต ์ฐ์ฐ ๋ฐฉ์ | ๋จ์ ๊ฐ ๋น๊ต (= ) |
๋ฒ์ ๋น๊ต (BETWEEN , >= , <= ) |
๊ฐ๋ ์ฑ | ๊ฐ๊ฒฐํจ | ๋ ผ๋ฆฌ์ ์ธ ์กฐ๊ฑด์ด ํ์ํ ๋ ์ ์ฉ |
์คํ ์๋ | ๋ ๋น ๋ฅผ ๊ฐ๋ฅ์ฑ์ด ๋์ | ๋๋ฆด ๊ฐ๋ฅ์ฑ์ด ์์ |
๐ ๋์ฉ๋ ๋ฐ์ดํฐ์์๋ CASE column WHEN ...
๋ฐฉ์์ด ์ ๋ฆฌํ ๊ฒฝ์ฐ๊ฐ ๋ง์!
SUBSTR()
์ฐ์ฐ์ด ํ ๋ฒ๋ง ์คํ๋๋ฏ๋ก ์ฐ์ฐ๋์ด ์ค์ด๋ฆWHEN
์ ์ด ๋จ์ํ ๊ฐ ๋น๊ต์ด๋ฏ๋ก ์ฑ๋ฅ ์ต์ ํ๊ฐ ์ฌ์
๐ ํ์ง๋ง BETWEEN
์ด ํ์ํ๊ฑฐ๋ ๋
ผ๋ฆฌ์ ์กฐ๊ฑด์ด ๋ณต์กํ๋ฉด CASE WHEN ... THEN ...
๋ฐฉ์์ ์ฌ์ฉํด์ผ ํจ
- ์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ด ์ฌ๋ฌ ๊ฐ์ ์กฐ๊ฑด์ ๊ฒฐํฉํด์ผ ํ๋ค๋ฉด ๋ ๋ฒ์งธ ๋ฐฉ์์ด ํ์ํจ:
CASE
WHEN SUBSTR(jumin, 3, 2) BETWEEN 1 AND 3 AND gender = 'M' THEN "1๋ถ๊ธฐ ๋จ์"
WHEN SUBSTR(jumin, 3, 2) BETWEEN 1 AND 3 AND gender = 'F' THEN "1๋ถ๊ธฐ ์ฌ์"
- ์ด ๊ฒฝ์ฐ,
CASE column WHEN ...
๋ฐฉ์์ผ๋ก๋ ์ฒ๋ฆฌํ ์ ์์
๐ฏ ๊ฒฐ๋ก : ์ธ์ ์ด๋ค ๋ฐฉ์์ ์จ์ผ ํ ๊น?
์ํฉ | ์ถ์ฒ ๋ฐฉ์ |
---|---|
๋จ์ํ ๊ฐ ๋น๊ต | โ
CASE column WHEN ... |
BETWEEN , >= , <= ๋ฒ์ ๋น๊ต ํ์ |
โ
CASE WHEN ... THEN ... |
๋
ผ๋ฆฌ ์ฐ์ฐ(AND , OR ) ํฌํจ |
โ
CASE WHEN ... THEN ... |
์ฐ์ฐ ์ต์ ํ๊ฐ ์ค์ํ ๊ฒฝ์ฐ | โ
CASE column WHEN ... (๋ ๋น ๋ฆ) |
๐น ๊ฐ๋จํ ๊ฐ ๋น๊ต๋ผ๋ฉด CASE column WHEN ...
๋ฐฉ์์ด ๋ ๋น ๋ฅด๊ณ ์ต์ ํ ๊ฐ๋ฅ
๐น ๋ฒ์ ๋น๊ต(BETWEEN)๋ ๋ณต์กํ ๋
ผ๋ฆฌ ์กฐ๊ฑด์ด ํ์ํ๋ฉด CASE WHEN ... THEN ...
๋ฐฉ์ ์ฌ์ฉ
๐ ๋์ฉ๋ ๋ฐ์ดํฐ์์ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ๊ณ ๋ คํ๋ค๋ฉด CASE column WHEN ...
๋ฐฉ์์ด ๋ ์ ํฉํ ๊ฒฝ์ฐ๊ฐ ๋ง์! ๐
โ 6. ์๋์ฐ ํจ์ (Window Functions)
ํ๋ณ๋ก ์ฐ์ฐ์ ์ํํ๋ฉฐ, ๊ทธ๋ฃนํ ์์ด ๊ฐ๋ณ ํ์ ์ ์ง
ํจ์ | ์ค๋ช | ์์ |
---|---|---|
ROW_NUMBER() |
์๋ฒ ๋ถ์ฌ | SELECT name, ROW_NUMBER() OVER(ORDER BY salary) FROM employees; |
RANK() |
๋์ผ ๊ฐ์ด๋ฉด ๊ฐ์ ์์, ๋ค์ ์์ ๊ฑด๋๋ | SELECT name, RANK() OVER(ORDER BY salary DESC) FROM employees; |
DENSE_RANK() |
๋์ผ ๊ฐ์ด๋ฉด ๊ฐ์ ์์, ๋ค์ ์์ ์ฐ์ | SELECT name, DENSE_RANK() OVER(ORDER BY salary DESC) FROM employees; |
NTILE(n) |
๋ฐ์ดํฐ๋ฅผ n๊ฐ์ ๊ทธ๋ฃน์ผ๋ก ๋๋ | SELECT name, NTILE(4) OVER(ORDER BY salary) FROM employees; |
LAG(column, n, default) |
์ด์ ํ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ | SELECT name, salary, LAG(salary, 1, 0) OVER(ORDER BY salary) FROM employees; |
LEAD(column, n, default) |
๋ค์ ํ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ | SELECT name, salary, LEAD(salary, 1, 0) OVER(ORDER BY salary) FROM employees; |
MariaDB์์
์๋์ฐ ํจ์๋ 10.2 ์ด์
๋ถํฐ ์ง์ํฉ๋๋ค.
๋์ฉ๋ ํ ์ด๋ธ์์ ์๋์ฐ ํจ์๊ฐ ๋๋ ค์ง๋ ๊ฒฝ์ฐ๊ฐ ์์ผ๋, ์ธ๋ฑ์ค์ ํจ๊ป ROW_NUMBER, RANK ์ฌ์ฉ ์ ์ฃผ์ ํ์.
โ
Rank()over(ORDER BY ์ปฌ๋ผ DESC/ASC)
โ ์์ ์ง์ ํจ์
/*
์์ ์ง์ ํจ์ : rank() over(์ ๋ ฌ๋ฐฉ์)
๋๊ณ ํจ์ : sum() over(์ ๋ ฌ๋ฐฉ์)
*/
-- ๊ต์์ ๋ฒํธ, ์ด๋ฆ ๊ธ์ฌ ๊ธ์ฌ๋ฅผ ๋ง์ด ๋ฐ๋ ์์ ์ถ๋ ฅํ๊ธฐ
SELECT NO, NAME, salary RANK() OVER(order BY salary desc)๊ธ์ฌ์์
FROM professor
-- ๊ต์์ ๋ฒํธ, ์ด๋ฆ ๊ธ์ฌ ๊ธ์ฌ๋ฅผ ๋ง์ด ๋ฐ๋ ์ค๋ฅผ์ฐจ์ ์์ ์ถ๋ ฅํ๊ธฐ
SELECT NO, NAME, salary RANK() OVER(order BY salary desc)๊ธ์ฌ์์
FROM professor
-- score ํ
์ด๋ธ์์ ํ๋ฒ, ๊ตญ์ด, ์ํ, ์์ด, ์ด์ , ์ด์ ๊ธฐ์ค ๋ฑ์ ์ถ๋ ฅํ๊ธฐ
SELECT *,eng,kor+math+eng,RANK() OVER(order BY eng,kor+math+eng DESC)'์ด์ ๊ธฐ์ค ๋ฑ์'
FROM score
SELECT studno'ํ๋ฒ',kor'๊ตญ์ด',math'์ํ',eng,kor+math+eng'์ด์ ',RANK() OVER(order BY eng,kor+math+eng DESC)'์ด์ ๊ธฐ์ค ๋ฑ์'
FROM score
-- score ํ
์ด๋ธ์์ ํ๋ฒ, ๊ตญ์ด, ์ํ, ์์ด, ์ด์ , ๊ตญ์ด๊ธฐ์ค ๋ฑ์ ์ถ๋ ฅํ๊ธฐ
SELECT *,eng,kor+math+eng'์ด์ ',
RANK() OVER(order BY eng,kor+math+eng desc)'์ด์ ๊ธฐ์ค ๋ฑ์',
RANK() OVER(order BY kor DESC)'๊ตญ์ด๊ธฐ์ค ๋ฑ์',
RANK() OVER(order BY math DESC)'์ํ๊ธฐ์ค ๋ฑ์',
RANK() OVER(order BY eng DESC)'์์ด๊ธฐ์ค ๋ฑ์'
FROM score
โ
sum(์ปฌ๋ผ) over(ORDER BY ์ปฌ๋ผ DESC/ASC)
->๋๊ณํจ์
-- ๊ต์์ ์ด๋ฆ, ๊ธ์ฌ, ๋ณด๋์ค, ๊ธ์ฌ๋๊ณ ์กฐํํ๊ธฐ
SELECT NAME'์ด๋ฆ', salary'๊ธ์ฌ',bonus'๋ณด๋์ค',
SUM(salary) OVER(ORDER BY salary DESC)'๊ธ์ฌ๋๊ณ'
FROM professor
-- score ํ
์ด๋ธ์์ ํ๋ฒ, ๊ตญ์ด, ์ํ,
-- ์์ด, ์ด์ , ์ด์ ๋๊ณ, ์ด์ ๋ฑ์ ์กฐํํ๊ธฐ
SELECT studno'ํ๋ฒ',kor'๊ตญ์ด',math'์ํ',eng'์์ด',(kor+math+eng)'์ด์ ',
SUM(kor+math+eng) OVER(ORDER BY (kor+math+eng) DESC)'์ด์ ๋๊ณ',
RANK() OVER(ORDER BY (kor+math+eng) DESC)'์ด์ ๋ฑ์'
FROM score
-- ๊ตญ์ด, ์ํ์ ํฉ๊ณ์ ํฉ์ ๊ตฌํ๊ธฐ
SELECT kor, math, SUM(kor+MATH)
FROM score
GROUP BY kor, math WITH rollup;
-- ํ๋
๋ณ, ์ง์ญ, ๋ชธ๋ฌด๊ฒํ๊ท, ํคํ๊ท ์กฐํํ๊ธฐ
SELECT grade, SUBSTR(tel,1,INSTR(tel,')')-1)'์ง์ญ',AVG(weight)๋ชธ๋ฌด๊ฒํ๊ท ,
AVG(height)ํคํ๊ท
FROM student
GROUP BY grade, SUBSTR(tel,1,INSTR(tel,')')-1)
-- ํ๋
๋ณ, ์ฑ๋ณ, ๋ชธ๋ฌด๊ฒ ํ๊ท , ํคํ๊ท ์กฐํํ๊ธฐ. ํ๋
๋ณ๋ก๋ ํ๊ท ์ ํํ๊ธฐ
SELECT grade,
if(SUBSTR(jumin,7,1) IN (1,3),"๋จํ์","์ฌํ์")'์ฑ๋ณ',
AVG(weight)๋ชธ๋ฌด๊ฒํ๊ท ,
AVG(height)ํคํ๊ท
FROM student
GROUP BY grade, ์ฑ๋ณ WITH rollup
โ 7. ๊ธฐํ ์ ์ฉํ ํจ์ (Other Functions)
์์คํ ๋ฐ JSON ๊ด๋ จ ํจ์
ํจ์ | ์ค๋ช | ์์ |
---|---|---|
VERSION() |
MariaDB ๋ฒ์ ํ์ธ | SELECT VERSION(); |
DATABASE() |
ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ ํ์ธ | SELECT DATABASE(); |
USER() |
ํ์ฌ ์ ์ ์ฌ์ฉ์ ํ์ธ | SELECT USER(); |
JSON_EXTRACT(json, path) |
JSON ๊ฐ ์ถ์ถ | SELECT JSON_EXTRACT('{"name": "John"}', '$.name'); |
โ
JSON
๊ด๋ จ ํจ์
MariaDB์์๋ ->
์ฐ์ฐ์๋ ์ง์ (MySQL๊ณผ ๋์ผํ๊ฒ ์ง๊ด์ ์ผ๋ก JSON ํ์ฑ ๊ฐ๋ฅ):
SELECT '{"name": "John"}'->'$.name';
๐ฏ ์ ๋ฆฌ ์์ฝ
โ MariaDB์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ํจ์๋ฅผ ์ ๋ฆฌ
โ ๊ฐ ํจ์๋ณ ์ค๋ช ๊ณผ ์์ ํฌํจ
โ ๋ ธ์ ์ ์ ๋ฆฌํ๊ธฐ ์ฝ๊ฒ ํ๋ก ์์ฑ