use shopdb;
desc members;
desc products;
desc orders;
select*
from members; -- 11๊ฐ
select*
from products; -- 6๊ฐ
select*
from orders; -- 10๊ฐ
select o.order_num, o.prod_id, m.member_id, m.member_name, m.phone, m.address, o.order_date
from members m join orders o
on m.member_id = o.member_id;
select o.order_num, o.member_id, o.prod_id, p.prod_name, p.price, p.company
from orders o join products p
on p.prod_id = o.prod_id
order by o.order_num; -- ์ ๋ ฌ
select o.order_num, p.prod_id, p.prod_name, p.price, p.company, m.member_id,
m.member_name, m.phone, m.address, o.order_date
from members m join orders o
on m.member_id = o.member_id
join products p
on p.prod_id = o.prod_id
order by o.order_num;
-- (==)
select o.order_num, p.prod_id, p.prod_name, p.price, p.company, m.member_id,
m.member_name, m.phone, m.address, o.order_date
from members m join orders o join products p
on m.member_id = o.member_id
and p.prod_id = o.prod_id
order by o.order_num;
select m.member_id, m.member_name, m.phone, m.address, p.prod_name, p.price, o.order_date
from orders o join products p
on o.prod_id = p.prod_id
right outer join members m
on o.member_id = m.member_id
order by m.member_id;
ํจ์๋? ์ธ์๋ฅผ ๋ฐ์์ ์ ํด์ง ์กฐ์์ ํ ํ ๋ฐ๋์ ํ๋์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํํจ.
ASCII(์์คํค์ฝ๋) : ๋ฌธ์์ ์์คํค ์ฝ๋๊ฐ์ ๋ฐํํด ์ฃผ๋ ํจ์
CHAR(์ซ์) : ์ซ์์ ์์คํค ์ฝ๋๊ฐ์ ๋ฐํํด ์ฃผ๋ ํจ์
select ascii('A'), char(65);
-- from dual; ๋ชจ๋ db์๋ ์ฌ์ฉํ ํ
์ด๋ธ์ด ์์๋ ์ฌ์ฉํ๋ผ๊ณ ๋ง๋ค์ด๋์ ํ
์ด๋ธ์ด ์๋ค = dual
( ์ถ๋ ฅ ๊ฒฐ๊ณผ์ BLOB๋ก ํ์๋๋ ๊ฒฝ์ฐ(Workbench์ ๋ฒ๊ทธ), ์ค๋ฅธ์ชฝ ๋ง์ฐ์ค ํด๋ฆญ ํ,
[Open Value in Viewer] ์ ํ ํ, [Text] ํญ์ ๋ค์ด๊ฐ๋ฉด ์ ์์ ์ธ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์์.)
LENGTH(๋ฌธ์์ด) : ๋ฌธ์์ด์ byte ์๋ฅผ ๋ฐํํด ์ฃผ๋ ํจ์
BIT_LENGTH(๋ฌธ์์ด) : ํ ๋น๋ bit ํฌ๊ธฐ ๋๋ ๋ฌธ์ ํฌ๊ธฐ๋ฅผ ๋ฐํํด ์ฃผ๋ ํจ์
CHAR_LENGTH(๋ฌธ์์ด) : ๋ฌธ์์ ๊ฐ์๋ฅผ ๋ฐํํด ์ฃผ๋ ํจ์
select length('abc'), bit_length('abc'), char_length('abc');
select length('๊ฐ๋ค๋'), bit_length('๊ฐ๋๋ค'), char_length('๊ฐ๋๋ค');
CONCAT(๋ฌธ์์ด1, ๋ฌธ์์ด2, ...) : ๋ฌธ์์ด์ ์ฐ๊ฒฐํด ์ฃผ๋ ํจ์
CONCAT_WS(๊ตฌ๋ถ์, ๋ฌธ์์ด1, ๋ฌธ์์ด2, ...) : ๊ตฌ๋ถ์์ ํจ๊ป ๋ฌธ์์ด์ ์ฐ๊ฒฐํด ์ฃผ๋ ํจ์
use hr;
select employee_id, concat(first_name, last_name) as "์ด๋ฆ"
from employees;
select employee_id, concat(first_name, ' ', last_name) as "์ด๋ฆ"
from employees;
select employee_id,
concat(first_name, ' ', last_name, ' ', job_id, ' ', email) as value
from employees;
-- (==)
select employee_id,
concat_ws(' ', first_name, last_name, job_id, email) as value
from employees;
select concat_ws('--', last_name, job_id, salary)
from employees;
INSTR(๊ธฐ์ค ๋ฌธ์์ด, ๋ถ๋ถ ๋ฌธ์์ด) : ๊ธฐ์ค ๋ฌธ์์ด์์ ๋ถ๋ถ ๋ฌธ์์ด์ ์์ ์์น๊ฐ์ ๋ฐํํด ์ฃผ๋ ํจ์
select instr('ํ๋๋์
','๋');
select last_name, instr(last_name, 'a') as "a์ ์ฒซ๋ฒ์งธ ์์น"
from employees;
UPPER(๋ฌธ์์ด) : ๋ฌธ์์ด์ ๋๋ฌธ์๋ก ๋ณํํด ์ฃผ๋ ํจ์
LOWER(๋ฌธ์์ด) : ๋ฌธ์์ด์ ์๋ฌธ์๋ก ๋ณํํด ์ฃผ๋ ํจ์
select lower('abcdEFGH'), upper('abcdEFGH');
select employee_id, upper(last_name) as "L-name", lower(job_id) as "Job",
phone_number, lower(email) as "E-mail"
from employees;
select concat('The job id for ', upper(last_name), ' is ', lower(job_id))
from employees;
LEFT(๋ฌธ์์ด, ๊ธธ์ด) : ์ผ์ชฝ์์ ๋ฌธ์์ด์ ๊ธธ์ด๋งํผ ๋ฐํํด ์ฃผ๋ ํจ์
RIGHT(๋ฌธ์์ด, ๊ธธ์ด) : ์ค๋ฅธ์ชฝ์์ ๋ฌธ์์ด์ ๊ธธ์ด๋งํผ ๋ฐํํด ์ฃผ๋ ํจ์
(ex) left(jumin_number, 6) => 901223
select left('abcdefghi', 3), right('adbcdfghi',3);
select last_name, left(last_name, 2), right(last_name, 2)
from employees;
LPAD(๋ฌธ์์ด, ๊ธธ์ด, ์ฑ์ธ ๋ฌธ์)
: ๋ฌธ์์ด์ ๊ธธ์ด๋งํผ ๋๋ฆฐ ํ ๋น๊ณณ์ ์ผ์ชฝ๋ถํฐ ์ฑ์ธ ๋ฌธ์๋ก ์ฑ์์ฃผ๋ ํจ์, ์ค๋ฅธ์ชฝ ์ ๋ ฌ ํจ์
RPAD(๋ฌธ์์ด, ๊ธธ์ด, ์ฑ์ธ ๋ฌธ์)
: ๋ฌธ์์ด์ ๊ธธ์ด๋งํผ ๋๋ฆฐ ํ ๋น๊ณณ์ ์ค๋ฅธ์ชฝ๋ถํฐ ์ฑ์ธ ๋ฌธ์๋ก ์ฑ์์ฃผ๋ ํจ์, ์ผ์ชฝ ์ ๋ ฌ ํจ์
select lpad('๊ฐ๋๋ค',5,'#'), rpad('๊ฐ๋๋ค',5,'#');
select lpad(last_name,20, '_')as "L-name", rpad(first_name, 20,'_') as "F-name"
from employees;
LTRIM(๋ฌธ์์ด) : ๋ฌธ์์ด์ ์ผ์ชฝ ๊ณต๋ฐฑ์ ์ ๊ฑฐํด ์ฃผ๋ ํจ์
RTRIM(๋ฌธ์์ด) : ๋ฌธ์์ด์ ์ค๋ฅธ์ชฝ ๊ณต๋ฐฑ์ ์ ๊ฑฐํด ์ฃผ๋ ํจ์
select ltrim(' SQL๋ฌธ๋ฒ '), rtrim(' SQL๋ฌธ๋ฒ '),
length(' SQL๋ฌธ๋ฒ '), length(rtrim(' SQL๋ฌธ๋ฒ '));
TRIM(๋ฌธ์์ด) : ๋ฌธ์์ด์ ์/๋ค ๊ณต๋ฐฑ์ ์ ๊ฑฐํด ์ฃผ๋ ํจ์
TRIM(๋ฐฉํฅ ์๋ฅผ๋ฌธ์์ด FROM ๋ฌธ์์ด)๋ฐฉํฅ - leading(์), trailing(๋ค), both(์์ชฝ)
: ๋ฌธ์์ด๋ก๋ถํฐ ํด๋น ๋ฐฉํฅ์ ์๋ฅผ ๋ฌธ์์ด์ ์ ๊ฑฐํด ์ฃผ๋ ํจ์
select trim(' SQL ๋ฌธ๋ฒ '), trim(both'_'from'__SQL_๋ฌธ๋ฒ___');
REPLACE(๋ฌธ์์ด, ๊ธฐ์กด๋ฌธ์์ด, ๋ฐ๊ฟ๋ฌธ์์ด) : ๋ฌธ์์ด์ ๊ธฐ์กด ๋ฌธ์์ด์ ๋ฐ๊ฟ ๋ฌธ์์ด๋ก ๊ต์ฒดํด์ฃผ๋ ํจ์
select employee_id, phone_number, replace(phone_number,'.','-')as"์ ํ๋ฒํธ"
from employees;
SPACE(๊ธธ์ด) : ๊ธธ์ด๋งํผ์ ๊ณต๋ฐฑ์ ๋ฐํํด ์ฃผ๋ ํจ์
select concat('MySQL',space(10),'DBMS');
SUBSTR(๋ฌธ์์ด, ์์์์น, ๊ธธ์ด) : ๋ฌธ์์ด์ ์ผ๋ถ๋ถ์ ๋ฐํํด ์ฃผ๋ ํจ์
select substr('๋ํ๋ฏผ๊ตญ๋ง์ธ',3,2);
select last_name, substr(last_name,2,3), substring(last_name,2,3)
from employees;
select last_name,
substr(last_name,3,2),substr(last_name,-3,2),
substr(last_name,2), substr(last_name,-3)
from employees;
select last_name as "Name", length(last_name) as "Length"
from employees
where last_name Like 'J%'
or last_name Like 'A%'
or last_name Like 'M%'
order by last_name;
-- (==)
select last_name as "Name", length(last_name) as "Length"
from employees
where substring(last_name, 1, 1) in('j','m','a')
order by last_name;
select last_name, lpad(salary,15,'$') as 'salary'
from employees;
select last_name, salary,
concat(last_name,' ', RPAD('*',salary/1000,'*'))
as EMPLOYEES_AND_THEIR_SALARIES
from employees
order by SALARY desc;
๊ฒฐ๊ณผ -> RPAD('*',salary/1000,'*')
2์ฒ ํ๋ฐ๋๋ 3๊ฐ์ *์ด ์ฐํ
3700/1000=3.7
rpad, lpad๋ ๋๋ฒ์งธ ์ธ์๊ฐ ์๋ฆฌ์ -> ์ค์์ผ๋๋ ์๋ ๋ฐ์ฌ๋ฆผ
3700/1000=3.7 => 4
select last_name, salary,
concat(last_name,' ', RPAD('*', truncate(salary/1000,0),'*'))
as EMPLOYEES_AND_THEIR_SALARIES
from employees
order by SALARY desc;