데이터 형식의 종류
DECIMAL 형식은 정확한 수치를 저장하고
FLOAT, REAL 형식은 근사치를 저장한다,.
부호 없는 정수를 지정할 때는 뒤에 UNSIGNED예약어를 붙임
query-9(cast, 변수, 형변환).sql
데이터 타입
use sqldb;
-- MySQLd의 엔진은 어떤 문자셋을 사용하고 있는지 알기 위한 코드
-- UTF-8이라는 문자셋 사용함. 한글이 3바이트로 설정되어 있음.
show variables;
show variables like 'character_set_system';
-- DDL : 데이터베이스와 테이블을 CRUD
-- cast문은 현재 문자열을 date 데이터타입으로 캐스팅(변환) 시켜줌
select cast('2021-01-08 15:40:30:489' as date) as '날짜';
select cast('2021-01-08 15:40:30:489' as time) as '시각';
-- 8바이트
-- datetime 문자형 데이터타입으로 저장됨.
select cast('2021-01-08 15:40:30:489' as datetime) as '날짜와 시각';
select now();
-- 4바이트
-- timestamp데이터 타입 : 숫자형 데이터타입으로 저장됨.
select timestamp(now());
drop table if exists timet;
create table timet(
num int,
date_timestamp timestamp not null,
date_datetime datetime not null
);
insert into timet values(1, now(), now());
select *
from timet;
변수
-- 변수
set @var1 = 5;
select @var1;
set @var2 = 3;
set @var3 = 5.77;
set @var4 = '이름 : ';
select @var1 + @var2;
-- 보기 좋게 출력하기 위해서 변수 사용함
select @var4, username
from user
where height > 180
limit 2;
-- 변수는 limit절에 사용하지 못한다.
select @var4, username
from user
where height > 180
-- limit @var2;
동적 쿼리문 사용하기 중요!
-- 동적 쿼리문 사용하기
-- prepare .. execute .. using문 사용.
-- myquery라는 명으로 ' '안에 있는 쿼리문을 준비함.
-- ? : 변수명을 대입하고 execute문을 실행하는 것이다.
-- => 응용SW에서 사용자로부터 입력받아서 출력한다면 이렇게 변수를 사용하면 됨.
-- (중요함)
set @var1 = 3;
prepare myquery
from 'select username, height
from user
order by height
limit ?';
execute myquery using @var1;
반올림
-- buy 테이블의 amount평균 나타냄 ==> 소숫점을 반올림하고 싶을때?
-- 소수점을 반올림하고 싶을때는 cast(), convert() 사용하면된다.
select avg(amount) as '평균구매갯수'
from buy;
-- signed: 부호가 있는 (양수, 음수)
-- unsigned: 부호가 없는 (양수)
select cast(avg(amount) as signed integer) as '평균구매갯수'
from buy;
select convert(avg(amount), signed integer) as '평균구매갯수'
from buy;
문자열 연결 함수
-- concat() : 문자열 연결 함수
select num, cast(price as char(10))
from buy;
-- 다 문자열이다.
select cast(price as char(10)), '*', cast(amount as char(4))
from buy;
select concat(cast(price as char(10)), '*', cast(amount as char(4))) as '단가 * 수량'
from buy;
select concat(cast(price as char(10)), '*', cast(amount as char(4))) as '단가 * 수량',
price*amount as '구매액'
from buy;
-- cast, concat() 함수 : 명시적으로 형변환한다.
select concat(cast(price as char(10)), '*', cast(amount as char(4)), ' =') as '단가 * 수량',
price*amount as '구매액'
from buy;
-- 묵시적, 암시적, 자동 형변환
select 100 + '100';
select 100 + cast('100' as signed int);
select concat('100', '원 입니다.');
-- concat() 함수 : 인자값으로 숫자가 들어왔어도 문자로 묵시적 형변환 일어남.
select concat(100, '원 입니다.');
-- false(거짓) : 0
-- true(참) : 1
-- 1 > 2 값이 비교가됨
select 1 > '2mege';
select 1 < '2mege';