[혼공스] Chapter 04

·2024년 1월 21일
0
post-thumbnail

3주차 진도(1/15 ~ 1/21) : Chapter 04


✅ 기본 미션

p.195의 확인 문제 4번 풀고 인증하기

✅ 선택 미션

p. 183 [좀 더 알아보기] 손코딩 실행하고 결과화면 인증하기

⌨️ 코드

🖥️ 결과




(04-1) MySQL 데이터 형식


💟 데이터 형식

🔢 정수형

  • 소수점 없는 숫자에 많이 사용
    ex) 인원 수, 가격, 수량 등
  • 숫자로서 의미 가지는 조건
    • 연산에 의미가 있다 (더하기/빼기)
    • 순서에 의미가 있다 (크다/작다)

정수형의 크기와 범위

데이터 형식바이트 수숫자 범위
TINYINT1-128 ~ 127
SMALLINT2-32,768 ~ 32,767
INT4약 -21억 ~ +21억
BIGINT8약 -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 형식

데이터 형식바이트 수
TEXT1 ~ 65535
LONGTEXT1 ~ 4294967295
  • 소설, 영화 대본 등의 데이터

BLOB 형식

데이터 형식바이트 수
BLOB1 ~ 65535
LONGBLOB1 ~ 4294967295(최대 4GB)
  • BLOB = Binary Long Object
  • 이미지, 동영상 등의 데이터 = 이진(Binary) 데이터

⚫️ 실수형

데이터 형식바이트 수숫자 범위
FLOAT4소수점 아래 7자리까지
DOUBLE8소수점 아래 15자리까지
  • 소수점 있는 숫자 저장 시 사용
  • FLOAT, DOUBLE 거의 비슷
    • 과학 기술용 데이터가 아니라면 FLOAT로 충분

📅 날짜형

데이터 형식바이트 수숫자 범위형식
DATE3날짜만 저장YYYY-MM-DD
TIME3시간만 저장HH:MM:SS
DATETIME8날짜 및 시간YYYY-MM-DD HH:MM:SS


SQL 변수

  • SQL에서 변수 선언해 사용 가능
  • MySQL 워크벤치 종료 시 삭제

변수 선언과 값 대입

SET @변수이름 = 변수의 값 ;		-- 변수 선언 및 값 대입
SELECT @변수이름 ;			-- 변수 값 출력

LIMIT에서 변수 사용하는 법

  • LIMIT엔 변수 사용 불가 → 문법상 오류
SET @count = 3;
SELECT mem_name, height FROM member ORDER BY height LIMIT @count; -- 에러 발생
  • 대신 PREPARE & EXECUTE 이용
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 검색 조건]

0개의 댓글