DATE_FORMAT(๋ ์ง, ํ์) : ๋ ์ง๋ฅผ ํ์์ ๋ง๊ฒ ์ถ๋ ฅํ๋ ํจ์
select date_format(now(), '%Y-%M-%d') as "Now";
select date_format(now(), '%Y/%M/%d %H:%i:%s') as "Now";
select employee_id, date_format(hire_date, '%Y-%M-%d %W') as "์
์ฌ์ผ" from employees;
CAST(๊ฐ AS ๋ฐ์ดํฐํ์ ) : ๊ฐ์ ์ง์ ๋ ๋ฐ์ดํฐํ์ ์ผ๋ก ๋ณํํ๋ ํจ์
select cast("123" as signed), cast("-123.45" as signed);
select cast("123" as unsigned), cast("123.45" as unsigned);
select cast('2022/03/18' as date) as '๋ ์ง';
select cast('2022@03@18' as date) as '๋ ์ง';
select cast('2022-01-02 21:24:33.123' as date) as "DATE",
cast('2022-01-02 21:24:33.123' as time) as "TIME",
cast('2022-01-02 21:24:33.123' as datetime) as "DATETIME";
IF(๋
ผ๋ฆฌ์, ์ฐธ์ผ ๋ ๊ฐ, ๊ฑฐ์ง์ผ ๋ ๊ฐ)
: ๋
ผ๋ฆฌ์์ด ์ฐธ์ด๋ฉด ์ฐธ์ผ ๋ ๊ฐ์ ์ถ๋ ฅํ๊ณ ๊ฑฐ์ง์ด๋ฉด ๊ฑฐ์ง์ผ ๋ ๊ฐ์ ์ถ๋ ฅํ๋ ํจ์
select if(100>200, '์ฐธ์ด๋ค','๊ฑฐ์ง์ด๋ค') as "๊ฒฐ๊ณผ";
select employee_id, salary, if(salary>10000, '1๋ฑ๊ธ','2๋ฑ๊ธ') as "๊ธ์ฌ๋ฑ๊ธ"
from employees;
IFNULL(์์1, ์์2)
: ์ฒซ๋ฒ์จฐ ์์1์ด NULL์ด ์๋๋ฉด ์์1์ด ๋ฐํ๋๊ณ , ์์1์ด NULL์ด๋ฉด ์์2๊ฐ ๋ฐํ๋๋ ํจ์
ย ย null๊ฐ์ ์ค์ ๊ฐ์ผ๋ก ๋ฐํํด ์ฃผ๋ ํจ์
select ifnull(null,'๋์ด๊ตฐ์') as "๊ฒฐ๊ณผ1", ifnull(100,'๋์ด๊ตฐ์') as "๊ฒฐ๊ณผ2";
select employee_id, last_name, salary, commission_pct,
ifnull(commission_pct,0) as "์ปค๋ฏธ์
"
from employees;
NULLIF(์์1, ์์2) : ์์1๊ณผ ์์2๊ฐ ๊ฐ์ผ๋ฉด NULL์ ๋ฐํํ๊ณ , ๋ค๋ฅด๋ฉด ์์1์ ๋ฐํํ๋ ํจ์
select nullif(100,100) as "๊ฒฐ๊ณผ1", nullif(100,200) as "๊ฒฐ๊ณผ2";
select employee_id, first_name, last_name,
nullif(length(first_name), length(last_name)) as "๊ฒฐ๊ณผ"
from employees;
ย ย ย ย ย ย ย ย (์ข๋ณ)ย ย ย ย ย =ย ย ย ย ย (์ฐ๋ณ)
CASE ๋น๊ต๊ฐ WHEN ๊ฐ1 THEN ๊ฒฐ๊ณผ1
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย WHEN ๊ฐ2 THEN ๊ฒฐ๊ณผ2
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ... ...
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ELSE ๊ธฐ๋ณธ๊ฐ
END
select case 10 when 1 then '์ผ'
when 5 then '์ค'
when 10 then '์ญ'
else '๋ชจ๋ฆ'
end as "case์์ ";
select employee_id, last_name, department_id,
case department_id when 10 then '๋ถ์ 10'
when 50 then '๋ถ์ 50'
when 100 then '๋ถ์ 100'
when 150 then '๋ถ์ 150'
when 200 then '๋ถ์ 200'
else '๊ธฐํ ๋ถ์'
end as "๋ถ์ ์ ๋ณด"
from employees;
USER( )
CURRENT_USER( )
SESSION_USER( ) : ํ์ฌ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ฐํํ๋ ํจ์
select user(), current_user(), session_user();
DATABASE( )
SCHEMA( ) : ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ ์คํค๋ง ์ ๋ณด๋ฅผ ๋ฐํํ๋ ํจ์
select database(), schema();
VERSION( ) : ํ์ฌ MySQL ๋ฒ์ ์ ๋ฐํํ๋ ํจ์
select version();
employees ํ
์ด๋ธ๋ก๋ถํฐ ์ฌ์๋ค์ last_name๊ณผ commission_pct๋ฅผ ์ถ๋ ฅํ๋
์ปค๋ฏธ์
์ ๋ฐ๋ ์ฌ์์ ์์ ์ ์ปค๋ฏธ์
๋น์จ์ ์ถ๋ ฅํ๊ณ , ์ปค๋ฏธ์
์ ๋ฐ์ง ์๋ ์ฌ์์ "No Commission"์ ์ถ๋ ฅํ๋ ๊ตฌ๋ฌธ์ ์์ฑํ์์ค.
employees ํ
์ด๋ธ๋ก๋ถํฐ JOB_ID ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ๋ชจ๋ ์ฌ์์ ๋ฑ๊ธ์ ํ์ํ๋ query๋ฅผ
์์ฑํ์์ค.
๊ทธ๋ฃนํจ์๋? ํ ๊ทธ๋ฃน์ ์กฐ์ํด์ ํ๋์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํํ๋ ํจ์
MIN(ํ๊ทธ๋ฃน) : ํ๊ทธ๋ฃน์์ ์ต์๊ฐ์ ๋ฐํํด์ฃผ๋ ํจ์ ๋ชจ๋ ๋ฐ์ดํฐํ์
์ ์ฌ์ฉ ๊ฐ๋ฅํจ.
MAX(ํ๊ทธ๋ฃน) : ํ๊ทธ๋ฃน์์ ์ต๋๊ฐ์ ๋ฐํํด์ฃผ๋ ํจ์ ๋ชจ๋ ๋ฐ์ดํฐํ์
์ ์ฌ์ฉ ๊ฐ๋ฅํจ.
select min(salary) as "์ต์๊ธ์ฌ", max(salary) as "์ต๋๊ธ์ฌ"
from employees;
select min(hire_date) as "๊ฐ์ฅ ์ค๋๋ ์ผ์ฌ์ผ",
max(hire_date) as "๊ฐ์ฅ ์ต๊ทผ ์
์ฌ์ผ"
from employees;
select min(last_name) as "name1", max(last_name) as "name2"
from employees;
SUM(ํ๊ทธ๋ฃน) : ํ๊ทธ๋ฃน์ ํฉ๊ณ๋ฅผ ๊ตฌํด์ฃผ๋ ํจ์ ์ซ์ ๋ฐ์ดํฐํ์
์๋ง ์ฌ์ฉ ๊ฐ๋ฅํจ.
AVG(ํ๊ทธ๋ฃน) : ํ๊ทธ๋ฃน์ ํ๊ท ์ ๊ตฌํด์ฃผ๋ ํจ์ ์ซ์ ๋ฐ์ดํฐํ์
์๋ง ์ฌ์ฉ ๊ฐ๋ฅํจ.
select sum(salary) as "๊ธ์ฌํฉ๊ณ", avg(salary) as "ํ๊ท ๊ธ์ฌ"
from employees;
select sum(salary) as "๊ธ์ฌํฉ๊ณ", avg(salary) as "ํ๊ท ๊ธ์ฌ"
from employees
where job_id like '%REP%';
โ employees ํ ์ด๋ธ์์ ์ ์ฒด ์ง์์ ์ปค๋ฏธ์ ํ๊ท ์ ์ถ๋ ฅํ์์ค.
select avg(commission_pct) as "comm_avg"
from employees;
โ [์ค๋ต] ์ ์ง์์ ์ปค๋ฏธ์
ํ๊ท x. null๊ฐ์ ์๋์ผ๋ก ์ ์ธ๋จ
-> null๊ฐ์ 0์ผ๋ก ๋ฐ๊ฟ์ ๊ณ์ฐ!
select avg(ifnull(commission_pct,0)) as comm_avg
from employees;
โญ [์ ๋ต] ์ ์ฒด ์ฌ์๋ค์ ์ปค๋ฏธ์
ํ๊ท
COUNT(*) : ํ๊ทธ๋ฃน์์ ํ์ ๊ฐ์๋ฅผ ๋ฐํํด์ฃผ๋ ํจ์
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๋ชจ๋ ์ปฌ๋ผ์ ์กฐํฉ๊ฐ์ ๊ธฐ์ค์ผ๋ก countํจ (null๊ฐ ํฌํจ O, ์ค๋ณต๊ฐ ํฌํจ O)
COUNT(ํ๊ทธ๋ฃน) : ํ๊ทธ๋ฃน์์ ํ์ ๊ฐ์๋ฅผ ๋ฐํํด์ฃผ๋ ํจ์
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ํน์ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก countํจ (null๊ฐ ํฌํจ X, ์ค๋ณต๊ฐ ํฌํจ O)
COUNT(DISTINCT ํ๊ทธ๋ฃน) : ํ๊ทธ๋ฃน์์ ํ์ ๊ฐ์๋ฅผ ๋ฐํํด์ฃผ๋ ํจ์
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ์ค๋ณต๊ฐ์ ์ ์ธํ๊ณ ํน์ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก countํจ (null๊ฐ ํฌํจ X, ์ค๋ณต๊ฐ ํฌํจ X)
select count(*)
from employees; -- ์ ์ง์ ์ / 107
select count(commission_pct)
from employees; -- ์ปค๋ฏธ์
์ ๋ฐ๋ ์ง์ ์ / 35
select count(*)
from employees
where department_id <=80; -- 80๋ฒ ์ดํ ๋ถ์์ ์์๋ ์ง์ ์ / 96
select count(commission_pct)
from employees
where department_id <=80; -- 80๋ฒ ์ดํ ๋ถ์์ ์์๋ ์ง์ ์ค ์ปค๋ฏธ์
์ ๋ฐ์ ์ง์ ์ / 34
select count(department_id)
from employees; -- ๋ถ์๊ฐ ์๋ ์ง์์ ์ / 106
select count(distinct department_id)
from employees; -- ์ง์๋ค์ด ์์๋ ๋ถ์์ ๊ฐ์ / 11
[๋ฌธ๋ฒ] select ์ปฌ๋ผ1, ์ปฌ๋ผ2, ์ปฌ๋ผ3
ย ย ย ย ย ย ย ย ย from ํ
์ด๋ธ๋ช
ย ย ย ย ย ย ย ย ย [where ์กฐ๊ฑด๋ฌธ]
ย ย ย ย ย ย ย ย ย [group by ์ปฌ๋ผ๋ช
]
ย ย ย ย ย ย ย ย ย [order by ์ปฌ๋ผ๋ช
[asc | desc]];
๐ฅ [GROUP BY์ ์ฌ์ฉ์ ์ฃผ์์ฌํญ]
select์ ์ ์ปฌ๋ผ๋ฆฌ์คํธ ์ค ๊ทธ๋ฃนํจ์์ ํฌํจ๋ ์ปฌ๋ผ๊ณผ ๊ทธ๋ฃนํจ์์ ํฌํจ๋์ง ์์ ์ปฌ๋ผ์ด
ํจ๊ป ์ถ๋ ฅ๋๋ ค๋ฉด ์ ์ด๋ ๊ทธ๋ฃนํจ์์ ํฌํจ๋์ง ์์ ์ปฌ๋ผ์ ๋น ์ง์์ด group by์ ์
ํฌํจ๋์ด์ผ ๋ฌธ๋ฒ ์ค๋ฅ๊ฐ ๋ฐ์๋์ง ์์!!!
select sum(salary)
from employees; -- ์ ์ง์์ ๊ธ์ฌ ํฉ๊ณ / 691400
select department_id, sum(salary)
from employees
group by department_id; -- ๋ถ์๋ณ ๊ธ์ฌ ํฉ๊ณ
select department_id, job_id, sum(salary)
from employees
group by department_id, job_id
order by department_id; -- ๋ถ์ ๋ด ์
๋ฌด๋ณ ๊ธ์ฌ ํฉ๊ณ
select department_id, job_id, sum(salary)
from employees
where department_id>40
group by department_id, job_id
order by department_id;
โ ๋ถ์๋ณ ์ฌ์์ ์๋ฅผ ์ถ๋ ฅํ์์ค
โ ๋ถ์ ๋ด ์ ๋ฌด๋ณ ์ฌ์์ ์๋ฅผ ์ถ๋ ฅํ์์ค
โ ๋งค๋์ ๋ณ ๋ถํ์ง์์ ์๋ฅผ ์ถ๋ ฅํ์์ค
[๋ฌธ๋ฒ] select ์ปฌ๋ผ1, ๊ทธ๋ฃนํจ์(์ปฌ๋ผ2)
ย ย ย ย ย ย ย ย ย from ํ
์ด๋ธ๋ช
ย ย ย ย ย ย ย ย ย [where ์กฐ๊ฑด๋ฌธ]
ย ย ย ย ย ย ย ย ย [group by ์ปฌ๋ผ1]
ย ย ย ย ย ย ย ย ย [having ๊ทธ๋ฃนํจ์๊ฐ ํฌํจ๋ ์กฐ๊ฑด๋ฌธ]
ย ย ย ย ย ย ย ย ย [order by ์ปฌ๋ผ๋ช
[asc | desc]];
select job_id, sum(salary) as payroll
from employees
where job_id not like '%REP%'
group by job_id
having sum(salary)>13000
order by sum(salary);
employees ํ
์ด๋ธ๋ก๋ถํฐ ์ ์ฒด ์ฌ์๋ค์ ์ปค๋ฏธ์
ํ๊ท ์ ์ถ๋ ฅํ๋ ๊ตฌ๋ฌธ์ ์์ฑํ์์ค.
๋จ, ์์์ ๋์งธ์๋ฆฌ๊น์ง ๋ฐ์ฌ๋ฆผํด์ ์ถ๋ ฅํ์์ค.
employees ํ
์ด๋ธ๋ก๋ถํฐ ์
๋ฌด(job_id)๋ณ ์ต๋ ๊ธ์ฌ(Maximum), ์ต์ ๊ธ์ฌ(Minimum),
๊ธ์ฌ์ ํฉ๊ณ(Sum), ํ๊ท ๊ธ์ฌ(Average)๋ฅผ ์ถ๋ ฅํ์์ค.
employees ํ
์ด๋ธ๋ก๋ถํฐ ๋์ผ ์
๋ฌด(job_id)๋ฅผ ์ํํ๋ ์ง์ ์๋ฅผ ์ถ๋ ฅํ๋ ๊ตฌ๋ฌธ์
์์ฑํ์์ค.
employees ํ
์ด๋ธ๋ก๋ถํฐ ๋งค๋์ ๋ฅผ ์ ์ ์๋ ์ฌ์์ ์ ์ธํ๊ณ ๋งค๋์ ๋ณ๋ก ๊ทธ๋ฃนํํ์ฌ ๋งค
๋์ ๋ณ ์ต์ ๊ธ์ฌ๋ฅผ ์ถ๋ ฅํ๋ ์ต์ ๊ธ์ฌ๊ฐ $6000 ์ด์์ธ ๊ทธ๋ฃน๋ง ์ถ๋ ฅํ์์ค.
๋ํ ์ต์ ๊ธ์ฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ์ฌ ์ถ๋ ฅํ์์ค.
employees ํ ์ด๋ธ์์ ์ต๊ณ ๊ธ์ฌ์ ์ต์ ๊ธ์ฌ์ ์ฐจ์ด๋ฅผ ์ถ๋ ฅํ๋ ๊ตฌ๋ฌธ์ ์์ฑํ์์ค.
employees ํ
์ด๋ธ๋ก๋ถํฐ ์ฌ์์ ์ด ์์ 1995๋
, 1996๋
, 1997๋
, 1998๋
์ ์ฑ์ฉ๋
์ฌ์์ ์๋ฅผ ํ์ํ๋ ๊ตฌ๋ฌธ์ ์์ฑํ์์ค.
3-p.28 ๋ฌธ์ 6๋ฒ