스토어드 프로시저
mysql에서 프로그래밍 기능이 필요할 때 사용
DELIMITER $$
create peocedure 스토어드프로시저이름
begin
SQL프로그래밍
END$$
DELEMITER;
CALL 스토어드프로시저;
delemiter$$
end$$
스토어드 프로시정 시작과 끝을 나타난다.
이는 ;를 엔드기호로 입력받지 않게하는 역할을 한다.
마지막에 delemiter을 다시 ;로 바꾼다
IF~ELSE문
drop procedure if exists ifProc(); --이미 ifProc()가 있으면 삭제
delemiter$$ -- 시작
create porcedure ifProc1() -- 스토어드프로시저 생성
begin
if(select count(*) from market_de.member) >= 10 then --10이상이면
select '회원수는 10 이상입니다.' as '답변'; -- 답변
else
select '회원수는 10 미민입니다' ㅁㄴ '답변'; --답변
end if; --if문 종료
end $$ -- 스토어드프로시저 종료
delimiter; --delimiter울 다시 ;로
call idProc1(); --사용
if ~ then
else
end 문법을 사용한다. 타 언어와 혼동 금지.
변수 선언
drop procedure if exists ifProc2;
delimiter$$
create porcedure ifProc2()
begin
declare ddate date; -- 데뷔일
declare curdate date; -- 오늘
declare days int; --활동일수
select debut_date into ddate from market_db_member where mem_id='APN';
set curdate = current_date();
set days = datediff(durdate, ddate);
if(days > 1000) then delect concat('데뷔한 지', days, '일이 지났습니다 respect!') as 기간;
else select concat('데뷔한 지', days, '일 밖에 안되었네요!') as 기간;
end if;
end $$
delimiter;
call ifProc2();
declare 변수명 타입; 변수를 선언한다.
set 변수명 = 함수; 변수명에 특정 값을 세팅함
current_date(); 오늘 날짜를 알려주는 함수
datediff(날짜1, 날짜2); 날짜2에서 날짜1까지 일수를 알려주는 함수
case 문
select m.mem_id 아이디, m.mem_name 이름,
sum(price*amount) 총구매액,
case
when sum(price * amount) >= 1500 then '최우수 고객',
when sum(price * amount) >= 1000 then '우수 고객',
when sum(price * amount) >= 1 then '그린 고객',
else'잠재고객'
end 회원등급
from buy B
right outer join member M
on M.mem_id = B.mem_id
group by m.mem_id
order by 총구매랙 desc;
select문 사이에서 case문을 사용하는 방법
case
when 조건 then '값 ' 으로 지정한다.
while문
drop procedure if exists whileProc;
delimiter$$
create procedure whileProc1()
begin
declare i int;
declare hap int;
set i = 1;
set hap = 0;
while(i <= 100) do
set hap = hap+i;
set i = i+1;
end while;
select '1부터 100까지의 합 -->' 범위,hap;
end$$
delimiter;
call whileProce();
반복문인 while이다.
do를 사용한다는 점을 주의 변수에 set을 넣는다는 점 기억.
select문은 컬럼 제목을 범위 hap로 한 하는 것이다.
iterate, leave의 사용
drop procedure id exists whileProc;
delimiter $$
create procedure whileProc()
begin
declare i int;
declare hap int; --변수 선언
set i = 1;
set hap = 0; --변수 합넣기
mywhile while(i <= 100) do --while문에 mywhile라는 이름을 부여
if(i%4=0) then
set i = i+1; iterate myWhile; --iterate는 continue와 같은 역할
--4의 배수는 건너뜀
end if;
set hap = hap + i;
if(hap < 1000) then leave muWhile; --leave는 break와 같은 역할
endif;
set i = i+1;
end while;
select'1부터 100까지의 합(4의배수 제외), 1000넘으면 종료-->' 조건, hap;
end$$
delimiter;
call whileProc();
while문에도 별칭부여 가능
iterate는 continue역할
leave는 break같은 역할
동적SQL
prepare,execute
drop table if exists gatetable;
create table gatetable(id int auto_increment primarykey, entry_tim datetime);
set @curdate = current_timeset(); --임시변수 curdate 현재 날짜와 시간
prepare myQuery from 'inset into gatetale values(null, ?)';
-- sql문을 미리 준비 ?에는 변수가 들어간다.
execute myQuery using @curdate;
-- 예약 sql myQuery를 변수 curdate를 ?에 넣어서 사용한다
execute myQuery using @curdate;
deallocate prepare myQuery;
--다 사용한 후 prepare해제
prepare SQL문장을 미리 준비
execute SQL명 using @변수; 로 준비된 SQL문을 사용한다
deallocate로 prepare를 해제한다.
시스템 변수에 상한이 생길 수 있기 때문이다.
시간함수
now()
-- sql 시작시간 기준 측정
current_data()
-- sql 시작시간 기준 측정
sysdate()
-- 실제시간 기준 측정
currnet_timestamp()
--
SQL 3항 연상자처럼 사용하기
selelct mem_name, addr,
if(addr in(서울, 경기),'수도권,'비수도권') as 구분
from member
order by 구분, addr;
서울, 경기에 있을 때는 수도권, 없을 떄는 비수도권을 사용한다.
'데이터베이스' 카테고리의 다른 글
데이터베이스 7. SQL 파이썬 GUI연 (0) | 2024.06.10 |
---|---|
데이터베이스 5. 테이블 제약조건, 뷰. (2) | 2024.06.10 |
데이터베이스4. SQL 타입, 고급문법 (1) | 2024.04.12 |
데이터베이스 3. 파이썬으로 입력하기 (0) | 2024.04.12 |
데이터베이스 2. SQL (1) | 2024.04.11 |