[DB] 따라해 보자.

ho's·2022년 7월 18일
0
post-thumbnail

😎 SQL이 익숙하지가 않는다. 따라해보도록 하자.

😛 테이블 만들기

Dept테이블

create table Dept(
	id tinyint unsigned not null auto_increment,
    pid tinyint unsigned not null default 0 commnet '상위부서id',
    dname varchar(31) not null,
    PRIMARY KEY(id)
);

Emp테이블

create table Emp(
	id int unsigned not null auto_increment,
    ename varchar(31) not null,
    dept tinyint unsigned not null,
    salary int not null default 0,  -- 급여는 널값이 없고 default값을 0으로 해준다.
    primary key(id),
    foreign key(dept) references Dept(id)
);

데이터 입력하기

insert into Dept(pid, dname) values (0, '영업부'), (0, '개발부') ,(1, '영업1팀'), (1,'영업2팀'), (1,'영업3팀'), (2, '서버팀'), (2, '클라이언트팀');

inner join하기

select d1.dname as '상위부서' ,d2.*
from Dept d1 inner join Dept d2 on d1.id = d2.pid;

위 코드의 결과는 아래와 같다.

🤯 랜덤 데이터값 만들고 넣기

랜덤함수 만들기

  • 매개변수는 -매개변수명 로 시작하게 만든다.
  • 변수는 v_ret 과 같이 중간에 _를 사용하자.

글자수 return하기

select char_length('한글abc');
  • 글자수대로 출력이 된다.

함수를 만들다가 오류가 발생했는데 다음과 같은 쿼리를 작성하니 해결이 되었다.

SET GLOBAL log_bin_trust_function_creators = 1;

랜덤함수 (부서번호) 만들기

랜덤함수를 만들어 보자

CREATE DEFINER=`root`@`localhost` FUNCTION `f_rand1`(_str varchar(255)) RETURNS varchar(31) CHARSET utf8mb4
BEGIN
	declare v_ret varchar(31);
    declare v_len tinyint;
    
    set v_len = char_length(_str);
    set v_ret = substring(_str, CEIL(rand()* v_len), 1);
RETURN 1;
END

CREATE DEFINER=`mydeal`@`%` FUNCTION `f_rand1`(_str varchar(255)) RETURNS varchar(31) CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci
BEGIN
  declare v_ret varchar(31);
  declare v_len tinyint;
  
  set v_len = char_length(_str);
  set v_ret = substring(_str, CEIL(rand() * v_len), 1);

RETURN v_ret;
END

결과

랜덤함수 (이름) 만들기

위의 내용이 조금은 익숙해져서 쉽게 다가온다.

CREATE FUNCTION `f_randname` ()
RETURNS varchar(31)
BEGIN
	declare v_ret varchar(31);
    declare v_lasts varchar(255) default '김이박조최전방유피지채민';
    declare v_firsts varchar(255) default '순신세종성호지혜피비모델링마스크트폐지미충전기';
    
    set v_ret = concat( f_rand1(v_lasts), f_rand1(v_firsts), f_rand1(v_firsts));
    

RETURN v_ret;
END

잘 작동하는지 확인해 보자.

select f_randname();

랜덤한 이름이 생성되는 것을 알 수 있다.

위에서 만든 것을 이용하여 랜덤한 부서, 이름을 데이터에 넣어보자!

insert into Emp(ename, dept, salary) values (f_randname(), f_rand1('34567'), f_rand1('123456789') * 100);
insert into Emp(ename, dept, salary) values (f_randname(), f_rand1('34567'), f_rand1('123456789') * 100);
insert into Emp(ename, dept, salary) values (f_randname(), f_rand1('34567'), f_rand1('123456789') * 100);


랜덤한 값들이 저장이 된다!

반복하는 함수 만들기

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_test_emp`(_cnt int)
BEGIN
	declare v_idx int default 0;
    
    while v_idx < _cnt
    do
		insert into Emp(ename, dept, salary) values ( f_randname(), f_rand1('34567'), f_rand1('123456789') * 100);
        
        set v_idx = v_idx + 1;
        end while;
END

profile
그래야만 한다

0개의 댓글