3주차 진도(1/15 ~ 1/21) : Chapter 04
✅ 기본 미션
p.195의 확인 문제 4번 풀고 인증하기
✅ 선택 미션
p. 183 [좀 더 알아보기] 손코딩 실행하고 결과화면 인증하기
⌨️ 코드
🖥️ 결과
(04-1) MySQL 데이터 형식
💟 데이터 형식
🔢 정수형
- 소수점 없는 숫자에 많이 사용
ex) 인원 수, 가격, 수량 등
- 숫자로서 의미 가지는 조건
- 연산에 의미가 있다 (더하기/빼기)
- 순서에 의미가 있다 (크다/작다)
정수형의 크기와 범위
데이터 형식 | 바이트 수 | 숫자 범위 |
---|
TINYINT | 1 | -128 ~ 127 |
SMALLINT | 2 | -32,768 ~ 32,767 |
INT | 4 | 약 -21억 ~ +21억 |
BIGINT | 8 | 약 -900경 ~ + 900경 |
UNSIGNED 예약어
- 범위가 0부터 시작되어 지정
- 크기
- UNSIGNED 붙은 것 = UNSIGNED 안붙은것
- TINYINT(-128~127) = TINYINT UNSIGNED(0~255) = 1바이트
💬 문자형
- 글자 저장
- 입력할 최대 글자의 개수 지정해야 함
문자형의 크기와 범위
데이터 형식 | 바이트 수 |
---|
CHAR(개수) | 1 ~ 255 |
VARCHAR(개수) | 1 ~ 16383 |
- CHAR (Character)
- 고정 길이 문자형 → 자릿수 고정됨
- MySQL 내부적으로 성능(빠른 속도)면에서 CHAR 설정하는 것 👍
- VARCHAR (Variable Character)
- 가변 길이 문자형 → 저장한 만큼만 자릿수 사용
- 공간을 더 효율적으로 운영 가능 → 글자 개수 변동될 경우 사용 👍
ex) 전화번호 : 문자형이 더 효율적
🗄️ 대량의 데이터 형식
TEXT 형식
데이터 형식 | 바이트 수 |
---|
TEXT | 1 ~ 65535 |
LONGTEXT | 1 ~ 4294967295 |
BLOB 형식
데이터 형식 | 바이트 수 |
---|
BLOB | 1 ~ 65535 |
LONGBLOB | 1 ~ 4294967295(최대 4GB) |
- BLOB = Binary Long Object
- 이미지, 동영상 등의 데이터 = 이진(Binary) 데이터
⚫️ 실수형
데이터 형식 | 바이트 수 | 숫자 범위 |
---|
FLOAT | 4 | 소수점 아래 7자리까지 |
DOUBLE | 8 | 소수점 아래 15자리까지 |
- 소수점 있는 숫자 저장 시 사용
- FLOAT, DOUBLE 거의 비슷
- 과학 기술용 데이터가 아니라면 FLOAT로 충분
📅 날짜형
데이터 형식 | 바이트 수 | 숫자 범위 | 형식 |
---|
DATE | 3 | 날짜만 저장 | YYYY-MM-DD |
TIME | 3 | 시간만 저장 | HH:MM:SS |
DATETIME | 8 | 날짜 및 시간 | YYYY-MM-DD HH:MM:SS |
SQL 변수
- SQL에서 변수 선언해 사용 가능
- MySQL 워크벤치 종료 시 삭제
변수 선언과 값 대입
SET @변수이름 = 변수의 값 ; -- 변수 선언 및 값 대입
SELECT @변수이름 ; -- 변수 값 출력
LIMIT에서 변수 사용하는 법
SET @count = 3;
SELECT mem_name, height FROM member ORDER BY height LIMIT @count; -- 에러 발생
SET @count = 3; -- 변수 선언
PREPARE mySQL FROM 'SELECT mem_name, height FROM member ORDER BY height LIMIT ?';
-- PREPARE : mySQL 이름으로 준비만 해놓음.
-- ? : 현재는 모르지만 나중에 채워진다는 의미.
EXECUTE mySQL USING @count;
-- EXECUTE로 mySQL 실행 시 USING으로 ?에 변수 값 대입
데이터 형 변환
데이터 형 변환 (type conversion)
- 문자형→정수형, 정수형→문자형
- 종류
- 명시적인 변환 (explicit conversion)
- 암시적인 변환 (implicit conversion)
1️⃣ 명시적 변환
CAST ( 값 AS 데이터_형식 [ (길이) ] )
CONVERT ( 값, 데이터_형식 [ (길이) ] )
- 함수 이용 : CAST(), CONVERT() → 동일 기능 수행
- 사용 가능한 데이터 형식
- CHAR
- SIGNED(=SIGNED INTEGER) : 부호 있는 정수
- UNSIGNED(=UNSIGNED INTEGER) : 부호 없는 정수
- DATE
- TIME
- DATETIME
예시1) 가격 : 실수 → 정수
-- 1) CAST 이용
SELECT CAST( AVG(price) AS SIGNED ) '평균 가격' FROM buy;
-- 2) CONVERT 이용
SELECT CONVERT( AVG(price), SIGNED ) '평균 가격' FROM buy;
예시2) 구분자 : 문자 → 날짜형
-- CAST 이용
SELECT CAST( '2022%01%21' AS DATE );
예시3) 원하는 형태로 표현
-- CAST 이용
SELECT num,
CONCAT( CAST(price AS CHAR), 'X', CAST(amount AS CHAR), '=' ) '가격X수량',
price*amount '구매액'
FROM buy ;
2️⃣ 암시적 변환
- CAST(), CONVERT() 사용하지 않고도 자연스럽게 형이 변환되는 것
예시1) 문자 더하기
SELECT '100' + '200';
- 문자는 더할 수 없으므로 자동으로 숫자로 변환해 연산
SELECT CONCAT('100' + '200');
- CONCAT() 함수를 이용하면 문자끼리 연결한 '100200'을 만들 수 있음
(04-2) 두 테이블 묶는 조인
🤝 조인 (join)
- 2개의 테이블을 서로 묶어서 하나의 결과(정보)를 만들어내는 것
- join 종류
- inner join (내부 조인)
- outer join (외부 조인)
- cross join (상호 조인)
- self join (자체 조인)
🫂 일대다(one to many) 관계
- 한쪽 테이블에는 하나의 값만 존재해야 하지만, 연결된 다른 테이블엔 여러 개의 값이 존재할 수 있는 관계
- 주로 기본 키(PK) - 외래 키(FK) 관계 → PK-FK 관계라고도 부름
- 두 테이블 조인을 위해서 테이블이 ❗️일대다 관계(PK-FK 관계)❗️로 연결되어야 함
- DB의 테이블
- 여러 정보를 주제에 따라 분리해 저장하는 것이 효율적
- 분리된 테이블들은 서로 관계(realation) 맺고 있음
🤝 내부 조인(inner join)
- 일반적인 조인 의미 → 가장 많이 사용됨
- INNER JOIN을 JOIN이라고만 써도 인식
형식
SELECT <열 목록>
FROM <첫 번째 테이블>
INNER JOIN <두 번째 테이블>
ON <조인될 조건>
[WHERE 검색 조건]