IT수업/데이터베이스

it 수업 6주차 (16) 변수, LIMIT, 형 변환, 비교연산자

워제하 2024. 2. 1. 11:56

 

< 변수 >

변수는 변하는 수로 수는 (Data, 자료)는 기본 선저장, 후처리를 원칙으로 한다.

또한 저장된 수가 특정상황에 있어 바뀔 가능성이 있는 경우 이 수를 변수라고 한다.

 

 

@var에다가 각각 정수, 실수, 문자열을 지정해본다.

 

그리고 select로 출력해본다.

 

set @var1 = 5;

 

select @var2;

 

select @var3;

 

select @var1+@var2;

 

 

select @var3, name, addr from usertbl;

 

as로 열이름을 지정해주면 이렇게 나온다.

select @var3 as 'TITLE', name, addr from usertbl;

 

 

 

< LIMIT >

limit는 출력되는 결과 값 갯수를 제한 하는 것이다.

PREPARE stmt_name FROM '출력할 값 limit ?' EXCUTE stmt_name using @변수명; 으로 한다.

'?'는 나중에 들어갈 값의 공간을 만들어 두는 것이다.

 

set @rowcnt = 3;
prepare sqlQuery01 from 'select * from usertbl order by height limit ?';
execute sqlQuery01 using @rowcnt;

 

 

출력하고 싶은 열 갯수를 변경시키려면 set @rowcnt = n; 에서 n의 숫자를 변경시켜주면 된다.

 

 

 

< 형 변환 >

-- 연산작업시(ex 대입연산, 비교연산...) 자료형(Data Type)이 불일치시 자료형을 일치시키는 작업
-- 자료형변환(암시적 형변환) : 시스템에 의한 형 변환(데이터 손실을 최소화 방향)
-- 강제형변환(명시적 형변환) : 프로그래머에 의한 형 변환(프로그램 제작 목적에 따른 -> 데이터 손실 우려가 비교적 큼)

 

 

● cast

 

select ('2024$01$01'); 하면 이렇게 출력이 된다.

 

위에 출력된 값을 '년도-월-일'로 형 변환해주기 위해서는 select cast('2024$01$01' as date); 이렇게 문자열 형태를 날짜열 형태로 바꿔주면 된다.

 

 

 

select num, price*amount from buytbl; 하면 이렇게 출력이 된다.

 

숫자값들이 연산되지 않도록 하려면 contcat으로 price*amount를 묶어주면 된다.

select num, concat(cast(price as char(10)),'X',cast(amount as char(10))) as '가격*수량' from buytbl; 하면 연산이 되지 않고 문자열로 나오게 된다.

select num, concat(price,'X',amount) as '가격*수량' from buytbl; 해도 똑같은 값이 나온다.

 

select num, concat(cast(price as char(10)),'X',cast(amount as char(10)),"=") as '가격*수량',
price*amount as '결과값' from buytbl;

 

 

< 비교연산자 >

 

select 100+200; 하면 연산이 된다.

 

select '100'+200; 로 100을 문자열로 만들어도 연산이 된다.

 

select 'a100'; 를 출력하면 문자열로 그대로 나온다.

 

select 'a100'+'200'; 이렇게 'a100'을 연산자와 사용하면 숫자가 아닌 문자 뒤로부터는 0으로 취급하므로 이렇게 나온다.

 

select 'a100'*1; 하면 'a100'이 0으로 취급되므로 결과값이 0이 된다.

 

select '10a0'+'200'; 하면 a부터 0 취급이 되므로 210이 출력된다.

 

따라서 select '100a'+'200'; 은 300이 출력된다.

 

 

 

select 1>2; 하면 거짓이므로 0이 출력되고 select 2>1; 하면 참이므로 1이 출력된다.

select '1abcd'<2; 하면 문자 뒤는 0으로 취급된다고 했으니 1<2 가 되므로 참이 된다.

 

select 'a1bcd'<2; 역시 문자 뒤로는 0으로 취급돼 0<2 로 참이 된다.

 

select 'a1bcd'>2; 는 0>2 로 취급되므로 거짓으로 0이 출력된다.

 

select 0 = 'mega'; 는 0=0으로 취급되 참이 된다.

 

 

 

< 연습 문제 >

 

 

 

1. select avg(height) from usertbl;
    select cast(avg(height) as signed integer) as '평균키' from usertbl;

 

2. select cast('2020-05-07' as date);