

select m.member_type, m.user_id, m.password, m.name
, md.member_type, md.marketing_yn, md.register_date
from member2 as m
join member_detail as md
on m.member_type = md.member_type and m.user_id = md.user_id
;

select m.member_type, m.user_id, m.password, m.name
, md.member_type, md.marketing_yn, md.register_date
from member2 as m
left join member_detail as md
on m.member_type = md.member_type and m.user_id = md.user_id
;

select m.member_type, m.user_id, m.password, m.name
, md.member_type, md.marketing_yn, md.register_date
from member2 as m
right join member_detail as md
on m.member_type = md.member_type and m.user_id = md.user_id
;

select m.member_type, m.user_id, m.password, m.name
, md.member_type, md.marketing_yn, md.register_date
from member2 as m
join member_detail as md
;

💡 switch 문법
CASE로 시작해서 END로 닫는다.
CASE WHEN 조건1 THEN 결과값1 WHEN 조건1 THEN 결과값1 WHEN 조건1 THEN 결과값1 ELSE 그 외 결과값 END

SELECT member_type, user_id, password, name
,
case
when length(password) > 2 then concat(substring(password, 1, 2), '**')
else ''
end as password_length
from member2;
select a.*
, (
select group_concat(title)
from movie m
where country = '한국'
and open_flag = '개봉'
and m.director = a.name
) as movie_title

select register_date
,date_format(register_date, '%Y.%m.%d') as dt_format
from member_detail;

select '20220321' as dt_string
, str_to_date('20220321', '%Y%m%d') as dt_date
from dual;

select '20220321' as dt_string
, str_to_date('20220321', '%Y%m%d') as dt_date
, date_add(str_to_date('20220321', '%Y%m%d'), interval 1 month) as dt_date2
from dual;

select now()
, date_format(now(), '%Y-%m-01') as start_date
, date_add(date_add(str_to_date(date_format(now(), '%Y-%m-01'), '%Y-%m-%d'), interval 1 month), interval -1 day) as end_date
from dual;
select *
from member2
-- limit 0, 2
limit 2, 2 -- index 2위치(3번째)부터 2개 가져옴
;
create view 뷰테이블명
쿼리 작성
;
drop view 뷰테이블명;
ex)

create view v_member_marketing_yes as
select m.member_type, m.user_id, m.name
, md.mobile_no, md.marketing_yn, md.register_date
from member2 m
join member_detail md on md.member_type = m.member_type and md.user_id = m.user_id
where marketing_yn = true;
;
ex)
create function sf_password(password varchar(255))
returns varchar(255)
begin
return '****';
end;
drop function 함수명;`
select password, sf_password(password) as password_mask
from member2;
create procedure sp_select_member()
begin
select *
from member2;
end;
drop procedure sp_select_member;
call sp_select_member();
중간 문장의 ;에 의해 끝을 잘못 인식하는 경우가 있어 delimiter를 사용해 전체 쿼리의 시작과 끝을 알려준다.
DataGrip과 같은 훌륭한 툴들은 사용할 필요 없다.
delimiter $$
create procedure sp_select_member()
begin
select *
from member_detail;
select *
from member2;
end $$
delimiter ;
for-each문, old키워드 사용create trigger tg_member_mobile_no_history
before update on member_detail -- member_detail이 update되기 이전에
for each row
begin
insert into member_datail_history
(
member_type,
user_id,
mobile_no,
update_date
)
values
(
old.member_type,
old.user_id,
old.mobile_no,
now()
);
end;

alter table member_datail_history add new_mobile_no varchar(50) after mobile_no;
create trigger tg_member_mobile_no_history
before update on member_detail -- member_detail이 update되기 이전에
for each row
begin
insert into member_datail_history
(
member_type,
user_id,
mobile_no,
new_mobile_no,
update_date
)
values
(
old.member_type,
old.user_id,
old.mobile_no,
new.mobile_no,
now()
);
end;
