/*
정수형
데이터 형식 바이트수 숫자범위
TINYINT 1 -128 ~ 127
SMALLINT 2 -32,768~32,767
INT 4 약 -21억 ~ 21억
BIGINT 8 약 -900경 ~ +900경
=> UNSIGNED 사용 시 TINYINT 는 0~255
*/
CREATE TABLE hongong4 (
tinyint_col TINYINT,
smallint_col SMALLINT,
int_col INT,
bigint_col BIGINT);
INSERT INTO hongong4 VALUES(127,32767,214748364,900000000000000);
-- Error Code : 1264 => tinyint_col의 지정 범위가 넘어가 에러가 뜸
INSERT INTO hongong4 VALUES(128,32767,214748364,900000000000000);
/*
문자형
CHAR(개수) : 1~255 바이트 => 고정적인 크기일 때 사용
VARCHAR(개수) : 1~16383 바이트 => 크기가 가변성이 있을 때 사용
CHAR 로 잡을 시에는 속도가 더 빠름, VARCHAR는 공간을 효율적으로 사용
LONGTEXT : 많은 글자양 (자막같은 내용)
LONGBLOB : 많은 이진데이터양 (동영상 같은거)
*/
CREATE DATABASE netflix_db;
USE netflix_db;
CREATE TABLE movie(
movie_id INT,
movie_title VARCHAR(30),
movie_director VARCHAR(20),
movie_star VARCHAR(20),
movie_script LONGTEXT,
movie_film LONGBLOB);
/*
실수형
FLOAT : 바이트수 4, 소수점 아래 7자리까지 표현
DOUBLE : 바이트수 8, 소수점 아래 15자리까지 표현
*/
/*
날짜형
DATE : 3byte, 날짜만 저장, YYYY-MM-DD 형식
TIME : 3byte, 시간만 저장, HH:MM:SS 형식
DATETIME : 8byte, 날짜 및 시간을 저장, YYYY-MM-DD HH:MM:SS 형식
*/
/*
변수 사용
SET @변수이름 = 변수의 값; -> 변수의 선언 및 값 대입
SELECT @변수이름; -> 변수의 값 출력
변수는 현재 상황에서 임시적으로 쓴다. workbench 껐다 키면 저장 안되어 있음, 다른 사용자가 들어와도 저장x
*/
USE market_db;
SET @myVar1 = 5;
SET @myVar2 = 4.25 ;
SELECT @myVar1;
SELECT @myVar1+@myVar2;
SET @txt = '가수 이름==> ';
SET @height = 166;
-- 166보다 큰 가수 이름
SELECT @txt, mem_name FROM member WHERE height > @height ;
SET @count = 3;
SELECT mem_name, height FROM member ORDER BY height LIMIT @count; -- 에러발생
-- 에러가 발생하기 때문에 PREPARE , EXCUTE를 사용
-- select~~을 mySQL이라는 이름으로 실행시킬 준비를 하겠다.
PREPARE mySQL FROM 'SELECT mem_name, height FROM member ORDER BY height LIMIT ?';
-- mySQL을 실행하겠다. 변수 @count를 사용해서
EXECUTE mySQL USING @count;
/*
데이터의 형 변환에는 2가지 종류가 있다.
직접 함수를 사용해서 변환하는 명시적인 변환,
별도의 지시 없이 자연스럽게 변환되는 암시적인 변환이 있다.
명시적인 변화
- 데이터 형식을 변환하는 함수는 CAST(), CONVERT()가 있다. 형식만 다를 뿐 동일한 기능을 한다.
- CAST ( 값 AS 데이터_형식 [ (길이) ] )
- CONVERT( 값, 데이터_형식 [ (길이) ] )
*/
SELECT AVG(price) '평균 가격' FROM buy;
SELECT CAST(AVG(price) AS SIGNED) '평균 가격' FROM buy; -- SIGNED : 부호가 있는 정수로 변환
SELECT CONVERT(AVG(price), SIGNED) '평균 가격' FROM buy;
SELECT CAST('2022$12$12' AS DATE);
SELECT CAST('2022/12/12' AS DATE);
SELECT CAST('2022%12%12' AS DATE);
SELECT CAST('2022@12@12' AS DATE);
SELECT '100' + '200' ; -- 300이 나온다, 정수로 알아서 변환해서 더해주기 때문이다. => 암시적인 변환
-- CONCAT : 문자 이어 주기
SELECT CONCAT('100',200); -- CONCAT을 사용하면 정수도 문자로 처리해서 합친다.
SELECT num, CONCAT(CAST(price AS CHAR), 'X', CAST(amount AS CHAR) ,'=') '가격X수량', price*amount '구매액' FROM buy;
SELECT num, CONCAT(price, 'X', amount ,'=') '가격X수량', price*amount '구매액' FROM buy;
SELECT 1>'2mega'; -- 정수인 2로 변환되어서 비교
SELECT 3>'2MEGA'; -- 정수인 2로 변환되어서 비교
SELECT 0 = 'mega2'; -- 문자는 0으로 변환