정수형 : 소수점이 없는 숫자
데이터 형식 | 바이트 수 | 숫자 범위 |
---|---|---|
TINYINT | 1 | -128 ~ 127 |
SMALLINT | 2 | -32,768 ~ 32,767 |
INT | 4 | 약 -21억경 ~ + 21억 |
BIGINT | 8 | 약 -199억경 ~ +900경 |
정수형에 UNSIGNED를 붙이면 범위가 0부터 지정
CREATE TABLE member -- 회원 테이블
(
member_id TINYINT UNSIGNED,
-- member_id TINYINT NOU NULL
)
문자형 : 글자를 저장하기 위해 사용, 입력할 최대 글자의 개수를 지정
데이터 형식 | 바이트 수 | 숫자 범위 |
---|---|---|
CHAR(개수) | 1 | -128 ~ 127 |
VARCHAR(개수) | 2 | -32,768 ~ 32,767 |
대량의 데이터 형식
데이터 형식 | 숫자 범위 | |
---|---|---|
TEXT 형식 | TEXT | 1~65535 |
LONGTEXT | 1~4294967295 | |
BLOB 형식 | BLOB | 1~65535 |
LONGBLOB | 1~4294967295 |
실수형
데이터 형식 | 바이트 수 | 설명 |
---|---|---|
FLOAT | 4 | 소수점 아래 7자리까지 표현 |
DOUBLE | 8 | 소수점 아래 15자리까지 표현 |
날짜형
데이터 형식 | 바이트 수 | 설명 |
---|---|---|
DATE | 3 | 날짜만 저장. YYYY-MM-DD 형식으로 사용 |
TIME | 3 | 시간만 저장. HH:MM:SS 형식으로 사용 |
DATETIME | 8 | 날짜 및 시간을 저장. YYYY-MM-DD HH:MM:SS 형식으로 사용 |
SET @변수이름 = 변수의 값; -- 변수의 선언 및 값 대입
SELECT @변수이름; -- 변수의 값 출력
SET @count = 3;
SELECT mem_name, height FROM member ORDER BY height LIMIT @count; --오류
-- 이를 실행하기위해 PREPARE & EXECUTE 활용
SET @count = 3;
PREPARE mtSQL FROM 'SELECT mem_name, hegith FROM member ORDER BY height LIMIT ?';
EXECUTE mySQL USING @count;
-- 문법
CAST ( 값 AS 데이터_형식 [(길이)])
CONVERT (값, 데이터_형식 [(길이)])
-- 예시
SELECT CAST(AVG(price) AS SIGNED) '평균 가격' FROM buy;
SELECT CONVERT(AVG(price), SIGNED) '평균 가격' FROM buy;
SELECT CAST('2023$12$12' AS DATE);
SELECT CAST('2023/12/12' AS DATE);
SELECT '100' + '200'; -- 300
일대다 관계의 이해
내부 조인의 기본
SELECT <열 목록>
FROM <첫 번째 테이블>
INNER JOIN <두 번째 테이블>
ON <조인될 조건>
[WHERE 검색 조건]
SELECT <열 목록>
FROM <첫 번째 테이블(LEFT 테이블)>
<LEFT : RIGHT : FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)>
ON <조인될 조건>
[WHERE 검색 조건]
SELECT *
FROM buy
CROSS JOIN member;
DELIMITER $$ -- 스토어드 프로시저의 코딩 부분
CREATE PROCEDURE 스토어드_프로시저_이름()
BEGIN
이 부분에 SQL 프로그래밍 코딩
END $$ -- 스토어드 프로시저 종료
DELIMITER ; -- 종류 문자를 다시 세미콜온으로 변경;
CALL 스토어드_프로시저_이름(); -- 스토어드 프로지서 실행
IF <조건식> THEN
SEL 문장들
END IF;
DELIMITER $$
CREATE PROCEDURE ifProc2()
BEGIN
DECLARE myNum INT;
set myNum = 200;
IF myNum = 100 THEN
SELECT '100입니다.';
ELSE
SELECT '100이 아닙니다.';
END IF;
END $$
DELIMITER;
CALL ifProc2(); -- 100이 아닙니다.
CASE
WHEN 조건1 THEN SQL문장들1
WHEN 조건2 THEN SQL문장들2
WHEN 조건3 THEN SQL문장들3
ELSE SQL문장들4
END CASE;
WHILE <조건식> DO
SQL 문장들
END WHILE;
DROP PROCEDURE IF EXISTS whileProc;
DELIMITER $$
CREATE PROCEDURE whileProc()
BEGIN
DECLARE i INT; -- 1부터 100까지 증가할 변수
DECLARE hap INT; -- 더한 값을 누적할 변수
SET i = 1;
SET hap = 0;
WHILE (i <= 100) DO
SET hap = hap + u;
SET i = i + 1;
END WHILE;
SELECT '1부터 100까지의 합 ==>', hap;
END $$
DELIMITER;
CALL whileProc();
DROP PROCEDURE IF EXISTS whileProc2;
DELIMITER $$
CREATE PROCEDURE whileProc2()
BEGIN
DECLARE i INT; -- 1부터 100까지 증가할 변수
DECLARE hap INT; -- 더한 값을 누적할 변수
SET i = 1;
SET hap = 0;
myWhile:
WHILE (i <= 100) DO
IF (i%4 = 0) THEN
SET i = i + 1;
ITERATE myWhile; -- 지정한 label 문으로 계속 가서 진행
END IF;
SET hap = hap + i;
IF (hap > 1000) THEN
LEAVE mywhile; -- 지정한 label 문을 떠남. 즉 While 종료
END WHILE;
SELECT '1부터 100까지의 합(4의 배수 제외), 1000넘으면 종료
==>', hap;
END $$
DELIMITER;
CALL whileProc2();
use market_db;
PREPARE myQuery FROM 'SELECT * FROM member WHERE mem_id = "BLK"';
EXECUTE myQuery;
DELLOCATE PREPARE myQuery;