[SQL] MSSQL 04~07

SUNGJIN KIM·2023년 7월 28일

SQL

목록 보기
2/8
post-thumbnail

오늘의 목표

SQL 강의 듣기 (4~7강)
과제 및 요약 내용 정리하기


MySQL 4~7

테이블(Table)

  • 데이터가 저장되는 기본 단위
  • 엑셀 (Excel) 스프레드시트와 유사한 형태
  • 열(column)과 행(row)로 이루어짐
  • 열의 필드 (field)라고도 하며, 행을 레코드(record)라고 함

기본 키 (Primary Key)

  • 테이블에서 고유한 각 행(row)을 구별할 수 있는, 한개 이상의 열(column)의 값

데이터의 중복과 무결성

  • 중복된 값에 의한 데이터 공간 낭비를 막고, 데이터의 무결성을 실현하기 위해서는 특별한 방법 필요

기본키, 외래키를 이용한 관계 설정

  • 각 테이블에는 기본 키(primary key)를 만들고, 다른 테이블에 이용될 때에는 외래 키 (foreign key)가 됨

[과제] 쇼핑몰 데이터베이스의 테이블 다이어그램 그려보기

  • memberList
ID (primary key)NAMEphoneNumberAddressShopList
1sungjin0101234567811
2woozi0102928313322
  • ShopList
IDShopNamePrice
1T-shirt3000
2Pants2000
  • Adress
IDAddressName
1Seoul
2Kyung-ki

숫자 데이터 타입 (Numeric Data Types)

참값 (Exact Numbers)

번호, 개수, 합계 등 정확한 정수형 참값을 저장

  • 참값 (true value) : 번호, 개수, 합계 수량과 같은 실제의 값
  • 근사값 (approximate value) : 실용상 지장이 없을 정도로 참값에 가까운 값, 또는 근사의 결과 구한 값

정수형

데이터 타입저장 용량값의 범위추천 사용
bit1 Byte0 or 1True, False
tinyint1 Byte0~255나이
smallint2 Byte-32768 ~ 32767
int4 Byte-21억 ~ 21억일련번호 (PK) 재고량, 주문수량
bigint8 Byte-992경 ~ 922경총 합계랑 등

실수형

금액, 기타 정확한 실수형 (고정 소수점) 참값을 저장

데이터 타입저장 용량값의 범위추천 사용

| numberic(p,s)
decimal(p,s) | 5~17 Byte | -10^38+1 ~ 10^38-1 | 일반 실수, 매우 정확한 금액 저장, 계산 |
| money | 8 Byte | -922경 ~ 922경
(소수점 1/10,000) | 일반적인 한화 금액 |

근사값

각종 측정값 등의 근사값을 부동 소수점 형태로 저장

데이터 타입저장 용량값의 범위추천 사용
float(n)4~8 Byte-1.79E + 308 ~ 1.79E+308특수 목적으로만 추천
real4 Byte-3.40E+38 ~ 3.40E+38

[과제] 다음의 값들은 어떤 숫자 데이터 타입을 사용하면 좋을까?

데이터 타입사유
일련번호int일련번호는 기본 타입으로 진행
나이tinyint나이는 범위가 정해져 있는 경우, 0 이상부터 시작이기때문에
주문 수량int무조건 양수여야 하면서, 범위가 넓어야 함
단가numberic계산에 사용되고, 실수형으로 이루어져있을 것으로 예상
주문 금액numberic가격, 계산을 위한 부분은 실수형 사용
인구 수bigint인구수는 적어도 단위가 높기때문에 가장 큰 값 사용
방문 횟수int-값이 없지만, tinyint로는 범위가작아
가로 너비 (cm)numberic실수의 경우 진행
할인율(%)tinyint or numberic0~100
거리(km)numberic실수 표기가 진행되어야 해서

문자 데이터 타입

싱글 바이트 문자 타입

  • 일반적으로 유니코드 (2+바이트)가 아닌 싱글 바이트 저장에 이용
  • n은 글자의 최대 개수가 아닌 저장 가능한 싱글 바이트 용량
  • char : 고정 길이 타입
    • 고정 길이 만큼 값이 들어오지 않으면 공백으로 채워버림
  • variable : 가변적인
    • 상상할 수 있는 길이로 생각해서 n을 넣어줌
데이터 타입저장 용량최대 크기추천 사용
char(n)n Byte0 ~ 8000우편번호, 주민번호
varchar(n)n Byte0 ~ 8000영문 이름 등
varchar(max)n Byte2^31 Byte영문 글 내용
text21억 Byte권장 X

더블 바이트 문자 타입

주로 유니코드 문자열을 저장하는 데 이용

n은 글자의 최대 개수가 아닌 저장 가능한 더블 바이트 용량

  • n : national
데이터 타입저장 용량최대 크기추천 사용
nchar(n)2*n Byte0~4000
nvarchar(n)2*n Byte0~4000일반 문자열 대부분
nvarchar(max)2*n Byte2^30*2Byte글 내용 등
ntext2*n Byte10억*2Byte권장 X

[과제] 다음의 값들은 어떤 문자 데이터 타입을 사용하면 좋을까?

  • 민감한 데이터는 해시 함수를 이용해서 암호화를 함
데이터 타입사유
카드번호char카드번호는 번호가 고정적이여서
주민번호char고정적인 값은 char로 사용
전화번호 이름varchar이름은 고정적이지 않기때문
주소varchar주소는 고정적이지 않기때문 (무한으로 길어질 수 있기 때문에)
우편번호char고정적이여서
사이트주소varchar
이메일주소varchar
글 내용nvarchar
해시태그nvarchar

기타 데이터 타입 (Other Data Types)

날짜, 시간 데이터 타입

  • getdata() : 오늘 날짜 구하는 값
데이터 타입용량최대 크기정확도추천 사용
date3 Byte0001-01-01 ~ 9999-12-311일생일, 배송 예정일
time5 Byte00:00:00~23:59:59100 나노초소요된 시간
datetime26 Byte0001-01-01 ~ 9999-12-31100 나노초대부분 날짜 + 시간 형태, 주문 일시,
smalldatetime4 Byte1900-01-01~2079-06-061분권장하지는 않음

이진 문자열 타입

  • 파일 내용 등을 이진 텍스트 (Binary Text)로 변환하여 저장
데이터 타입용량최대 크기추천 사용
binary(n)n Byte0 ~ 8000
varbinary(n)n Byte0 ~ 8000
varbinary(max)n Byte2^31 Byte대부분 파일
imagen Byte약 2 GB권장 X

Uniqueidentifier 타입

  • GUID(Globally Unique Identifier)를 구현하기 위해 사용 (어디에서도 중복되지 않은 P.K)
  • 16 Byte(128 bit) 용량
  • newid() 함수로 할당 가능 (select newid())

[과제] 다음의 값들은 어떤 문자 데이터 타입을 사용하면 좋을까?

데이터 타입사유
주문 번호uniqueidentifier 타입고유의 값을 가지고 있어야 하는 특성이 있음
회원 번호uniqueidentifier 타입고유의 값을 가지고 있어야 하는 특성이 있음
주문 일시datetime주문 일시는 대부분 시간도 같이 기록하기 때문
배송 예정일자date정확한 시간을 체크하기가 어려워서 날짜만
생년월일date정확한 시간을 체크하기가 어려워서 날짜만
제품이미지varbinary(max)대부분 사용하는 이진 문자열 타입
제품 상세 이미지varbinary(max)대부분 사용하는 이진 문자열 타입
profile
#QA #woonmong

0개의 댓글