-
서점 Data 생성 연습MySQL 2023. 1. 9. 15:17
상황을 가정해 데이터를 입력해보자.
서점에서 데이터를 입력하는 방식을 기준으로, 크게는 보유 서적, 멤버십 고객, 거래 내역을 기준으로 데이터를 입력하고자 한다.
입력되는 데이터는 다음과 같이 세분화할 수 있다.
서점의 멤버십 고객, 보유 서적, 거래 내역에 각각 들어가는 ID키는 고유 식별키, 즉 Primary Key로서 중복되지 않고(Unique), 누락될 수 없으며(Not null), 이를 통해 식별을 위한 도구가 된다.
또한, 거래 내역에 들어가는 '고객 ID'와 '서적 ID' 항목은 각각 멤버십 고객, 보유 서적 항목에 들어가는 Foreign Key에 할당되어 동일한 값을 가지게 한다.
1. 테이블 생성
Toad의 에디터를 여는 것으로 사전 준비를 마쳐주자.
계정을 생성, DB를 생성하듯 데이터를 입력하기 위한 테이블을 만들기 위해 우리는 앞과 동일한 명령어를 써줄 수 있다.
CREATE 가 바로 그것이다.
여기서 테이블이란
다음과 같이 행(row) 열(column)으로 이루어진 기본적 저장구조이며, 행과 열이 교차되는 지점에 데이터가 들어가는 field가 형성된다.
따라서, field에 데이터를 삽입하기 전에 테이블을 먼저 만들어주자.
처음은 Book 테이블이다.
create table Book( bookid INTEGER PRIMARY KEY, bookname VARCHAR(40), publisher VARCHAR(40), price INTEGER );
Book 테이블과, 이에 속한 카테고리를 지정해 주었다.
- bookid 카테고리는 integer (int) 속성, 즉 정수값을 가지게 되며, 동시에 식별값인 PK(Primary Key)의 성질을 지닌다.
- bookname과 publisher 카테고리는 40자리의 varchar 속성을 가지며, 고정값인 char와 다르게 varchar로 지정해 유동적으로 그 크기를 조정될 수 있게 하였다.
- price는 int 속성을 가져 bookid와 마찬가지로 정수값으로 노출되게 하였다.
다음으로 Customer 테이블을 생성해보자.
CREATE TABLE Customer ( custid INTEGER PRIMARY KEY, name VARCHAR(40), address VARCHAR(50), phone VARCHAR(20) );
Customer 테이블 또한 생성하며 Book테이블과 큰 차이는 없으나, 숫자만 입력하는 phone 카테고리에 '정수만 있다'고 착각하여 int 속성을 주지 않도록 주의하는 것이 좋겠다. 핸드폰 번호는 수에 의미가 있는 것이 아닌 수의 배열 자체에 속성이 있으며, 010~ 으로 시작하는 특성 상 int 속성을 줄 경우 10 ~~~ 으로 입력될 수 있으므로 varchar 속성을 부여해준다.
마지막으로 Orders 테이블이다.
CREATE TABLE Orders ( orderid INTEGER PRIMARY KEY, custid INTEGER , bookid INTEGER , saleprice INTEGER , orderdate DATE, FOREIGN KEY (custid) REFERENCES Customer(custid), FOREIGN KEY (bookid) REFERENCES Book(bookid) );
Orders 테이블에선 앞서 말했듯 앞의 고객 아이디(custid)와 서적 아이디(bookid)값을 그대로 가져오고자 한다. 이를 위해,
- custid에 FOREIGN KEY의 속성 추가, 이에 대한 참조항목(REFERENCES)으로 Customer에 있는 custid를 둔다.
- bookid에 FOREIGN KEY의 속성 추가, 이에 대한 참조항목(REFERENCES)으로 Book에 있는 bookid를 둔다.
이렇게 설정할 경우, 연동해둔 값끼리 다를 때에 제대로 작동되지 않도록 브레이크를 걸어둘 수 있다.
2. 데이터 삽입
이제 데이터를 직접 넣어보자.
데이터를 넣는 데에 사용되는 명령어는 INSERT 이다.
INSERT INTO ~(테이블명)~ VALUES(내용) 과 같은 형식으로 입력하면 된다.
INSERT INTO Book VALUES(1, 'History of football', 'good sports', 7000); INSERT INTO Book VALUES(2, 'Soccer girl', 'Namusoo', 13000); INSERT INTO Book VALUES(3, 'Understanding of Football', 'DaeHan Media', 22000); INSERT INTO Book VALUES(4, 'Golf Bible', 'DaeHan Media', 35000); INSERT INTO Book VALUES(5, 'Figure skating Book', 'Good sports', 8000); INSERT INTO Book VALUES(6, 'Weightlifting step-by-step', 'Good sports', 6000); INSERT INTO Book VALUES(7, 'Memories of baseball', 'IsangMedia', 20000); INSERT INTO Book VALUES(8, 'Play baseball', 'IsangMedia', 13000); INSERT INTO Book VALUES(9, 'Olympic Story', 'SamsungDang', 7500); INSERT INTO Book VALUES(10, 'Olympic Champions', 'Pearson', 13000);
Book 테이블에 1부터 10까지의 책을 입력했다. 다음과 같이 입력하면 Table을 생성하면서 나열한 카테고리의 순서대로 데이터가 들어간다.
( bookid: 1 / bookname: History of football / publisher: good sports / price: 7000 )
INSERT INTO Customer VALUES (1, 'Park JiSung', 'England Manchester', '000-5000-0001'); INSERT INTO Customer VALUES (2, 'Kim Yuna', 'SouthKorea Seoul', '000-6000-0001'); INSERT INTO Customer VALUES (3, 'Jang Miran', 'SouthKorea Gangwondo', '000-7000-0001'); INSERT INTO Customer VALUES (4, 'Choo Sinsu', 'Cleveland, USA', '000-8000-0001'); INSERT INTO Customer VALUES (5, 'Park Seri', 'SouthKorea Daejeon', NULL);
Customer 테이블에 입력된 5개의 데이터이다. 확인할 점은 5번 데이터 Park Seri의 경우 phone값이 NULL데이터로 설정돼있단 점이다.
INSERT INTO Orders VALUES (1, 1, 1, 6000, STR_TO_DATE('2014-07-01','%Y-%m-%d')); INSERT INTO Orders VALUES (2, 1, 3, 21000, STR_TO_DATE('2014-07-03','%Y-%m-%d')); INSERT INTO Orders VALUES (3, 2, 5, 8000, STR_TO_DATE('2014-07-03','%Y-%m-%d')); INSERT INTO Orders VALUES (4, 3, 6, 6000, STR_TO_DATE('2014-07-04','%Y-%m-%d')); INSERT INTO Orders VALUES (5, 4, 7, 20000, STR_TO_DATE('2014-07-05','%Y-%m-%d')); INSERT INTO Orders VALUES (6, 1, 2, 12000, STR_TO_DATE('2014-07-07','%Y-%m-%d')); INSERT INTO Orders VALUES (7, 4, 8, 13000, STR_TO_DATE( '2014-07-07','%Y-%m-%d')); INSERT INTO Orders VALUES (8, 3, 10, 12000, STR_TO_DATE('2014-07-08','%Y-%m-%d')); INSERT INTO Orders VALUES (9, 2, 10, 7000, STR_TO_DATE('2014-07-09','%Y-%m-%d')); INSERT INTO Orders VALUES (10, 3, 8, 13000, STR_TO_DATE('2014-07-10','%Y-%m-%d'));
마지막으로 Orders에 들어갈 데이터까지 입력해 주면 데이터 입력은 마무리된다.
마찬가지로 custid 5번은 주문 정보가 없는 점도 추후 실습에서 참고해서 진행하도록 하자.
3. SELECT 문을 이용한 데이터 탐색
이렇게 데이터를 입력하고 결과를 확인하고 싶다면,
SELECT 명령어를 사용할 수 있다.
select * from Book;
여기서 사용된 *(아스타코드)는 해당 테이블의 '전체'를 의미한다.
따라서, 해석하자면 Book 테이블에 속한 전체의 데이터를 선택 및 노출시키는 것이라 할 수 있겠다.
다음과 같이 table의 이름을 바꿔가며 데이터가 입력된 것을 확인해보자.
Book 테이블 Customer 테이블 Orders테이블 그럼 다음 글에서는 table에 입력된 데이터들을 검색하고 목록을 출력하는 등, 데이터를 활용하는 방법에 대해서 학습해보겠다.
'MySQL' 카테고리의 다른 글
서브쿼리와 EXISTS (0) 2023.01.10 Join을 활용한 데이터의 분류 활용 (0) 2023.01.10 테이블 생성 시의 제약조건 (0) 2023.01.10 GROUP BY 와 group 조건 설정 (0) 2023.01.10 서점 데이터를 활용한 데이터 검색 연습 (0) 2023.01.09