Database (DB)/MySQL

[MySQL] 08 연습: 3개테이블 생성, ALTER연습

또롱또 2020. 3. 10. 04:37
728x90

3개의 테이블을 JOIN하는 연습을 하겠습니다.

이 3개의 테이블들 합치고, 숫자들 대신 정보들을 join시켜서 읽어보도록 하겠습니다.

 

이러한 테이블을 만들고, 중복되는 정보들을 따로 테이블로 빼서 관리하겠습니다.

player_nation, player_tmi에 겹치는 정보가 여럿 있으니, 각각 테이블을 하나씩 만들어 주면 되겠네요.

 

일단 데이터베이스를 만들고(스키마), 테이블들을 만들겠습니다.

CREATE DATABASE EXAMPLE_01;

그리고 이제 테이블을 만듭니다.

CREATE TABLE MasterTable(
    -> Player_id INT NOT NULL AUTO_INCREMENT,
    -> Player_name VARCHAR(100) NOT NULL,
    -> Player_nation VARCHAR(100) NOT NULL,
    -> Player_TMI TEXT NULL,
    -> PRIMARY KEY(Player_id));

player_id 를 기준으로 찾을꺼니까 primary key로 player_tmi 는 있어도 그만, 없어도 그만인 정보라 null로 했고 나머지는 not null로 무조건 정보가 있게 했습니다.

 

일단 이 테이블안에 위와 같은 정보들을 넣어주겠습니다. 

 

INSERT INTO MasterTable VALUES (1, "Kevin", "CANADA, NA",  "MAN, TALL");

INSERT INTO MasterTable VALUES (2, "JANE", "USA, NA",  "WOMAN, TALL");

INSERT INTO MasterTable VALUES (3, "MIMI", "CHINA, ASIA",  "WOMAN, TALL");

INSERT INTO MasterTable VALUES (4, "JUNHO", "KOREA, ASIA",  "MAN, SHORT");

INSERT INTO MasterTable VALUES (5, "KIM", "KOREA, ASIA",  "MAN, SHORT");

INSERT INTO MasterTable VALUES (6, "HOSE", "KOREA, ASIA",  "MAN, TALL");

INSERT INTO MasterTable VALUES (7, "JANNA", "USA, NA",  "WOMAN, SHORT");

cmd에 직접 치시면 느리니까, 메모장이나 어디에 미리 쳐서 복붙하는게 편합니다.

 

다 만드셨으면 체크해서 맞나 아닌가 확인합니다.

 

갑자기 KOREA 앞에다가 SOUTH를 붙혀주고싶고 KIM, JUNHO 둘다 키가 커서 TALL이 되었는데, 이걸 하나하나 해줄 수는 있는데 (이런 작은 코딩에선), 나중에 PLAYER가 2000명이고, 1000명의 KOREA 사람들에게 SOUTH를 주고싶은데 하나하나 할 수는 없으니까, 이젠 뒤의 중복 코드들을 다른 테이블로 나누겠습니다.

 

만들 테이블 계획은 이러합니다. 

그리고 이러한 두개의 테이블을 만들어서 첫번째 테이블에 있는 정보들을 여기로 옮겨주려고 합니다.

(생각해보니까 WHERE은 키워드니까, FromWhere로 바꾸겠습니다.)

CREATE TABLE Nations(
 Nation_id INT NOT NULL AUTO_INCREMENT,
 Nation_name VARCHAR(100) NOT NULL,
 FromWhere VARCHAR(100) NOT NULL,
 PRIMARY KEY(NATION_ID));
 
 CREATE TABLE TMI(
 TMI_id INT NOT NULL AUTO_INCREMENT,
 TMI_gender VARCHAR(100) NOT NULL,
 TMI_height VARCHAR(100) NOT NULL,
 PRIMARY KEY(TMI_ID));

테이블들 입니다.

이제 정보를 넣어주겠습니다.

INSERT INTO NATIONS VALUES(1, "KOREA", "ASIA");
INSERT INTO NATIONS VALUES(2, "CANADA", "NA");
INSERT INTO NATIONS VALUES(3, "USA", "NA");
INSERT INTO NATIONS VALUES(4, "CHINA", "ASIA");

INSERT INTO TMI VALUES(1, "MAN", "TALL");
INSERT INTO TMI VALUES(2, "MAN", "SHORT");
INSERT INTO TMI VALUES(3, "WOMAN", "TALL");
INSERT INTO TMI VALUES(4, "WOMAN", "SHORT");

이런 정보들 입니다.

확인한 결과

둘다 잘 만들어 졌습니다.

 

여기서 저번에는 원래 테이블을 아예 삭제하고, 새로운 테이블을 만들어서 합쳤는데,

이번에는 연습할겸, 원래있던테이블을 삭제하지않고, 안의 값들을 수정해보겠습니다.

 

지금까지는 안다뤄 봤던 ALTER로 변경해 보겠습니다.

문법은 일단 세로줄의 이름을 변경하는건 이와 같습니다.

ALTER TABLE 테이블이름 CHANGE 기존세로줄이름 변경할세로줄이름 타입;

우리가 바꿔야하는 부분은

-> Player_nation VARCHAR(100) NOT NULL,
    -> Player_TMI TEXT NULL,

이 두개입니다.

이름은 pNation_id , pTMI_id 를사용하겠습니다.

ALTER TABLE MASTERTABLE CHANGE Player_nation pNation_id VARCHAR(100);
ALTER TABLE MASTERTABLE CHANGE Player_TMI pTMI_id TEXT ;

이것저것 찾으면서 하는데도.., VARCHAR에서 INT로 넘어가는 방법은 못찾겠네요 ㅎ..ㅎ

 

그냥 뒤의 콜론만 다 지우고, 새 콜론 2줄을 추가하는걸로 바꾸겠습니다.

그래도 ALTER도 자주 쓰인다고 하니까, 위의 이름 바꾸는 코드 말고도 MODIFY로 데이터타입을 변경할수있고, 아니면 SET DEFAULT이런걸로 각 콜론에 기본값을 줄 수 도있습니다.

 

일단 세로줄을 지워보겠습니다.

 

ALTER TABLE 테이블이름 DROP 세로줄이름;
ALTER TABLE MASTERTABLE DROP pNation_id;
ALTER TABLE MASTERTABLE DROP pTMI_id;

보시다시피 깔끔하게 지웠고, 이번엔 추가해보겠습니다.

ALTER TABLE 테이블이름 ADD 추가할세로줄이름 타입 DEFAULT 값;

// 혹은

ALTER TABLE 테이블이름 ADD COLUMN 추가할세로줄이름 타입 DEFAULT 값 세로줄위치;

//위치는 FIRST로주면 제일앞에, SECOND로 주면 두번째에 이렇게 줄 수있습니다.
ALTER TABLE MASTERTABLE ADD pNation_id INT NOT NULL DEFAULT 1;

ALTER TABLE MASTERTABLE ADD pTMI_id INT NOT NULL DEFAULT 1;

문제가 있는게, 이렇게 줘버리면 기본값들이 다 1로 공통되버리는데, 값을 하나하나 줄 수는 또 없군요..

(생활코딩님이 왜 지웠다 다시만드신건지 이제 이해가 되네요.)

뭐 아무튼 이미 이쪽으로 시작했으니, 많이 돌아가더라도 연습한다 생각하고 더 해보겠습니다.

UPDATE를 써서 값을 하나하나 바꿔주면서 UPDATE도 오랜만에 사용해 보겠습니다.

UPDATE 테이블이름 SET 바꾸고싶은세로줄이름1= '값1', 바꾸고싶은세로줄이름2= '값2' WHERE 세로줄기준이름 = '값';

UPDATE는 이랬습니다.

UPDATE MASTERTABLE SET pNation_id = 2, pTMI_id= 1 WHERE Player_id= 1;

UPDATE MASTERTABLE SET pNation_id = 3, pTMI_id= 3 WHERE Player_id= 2;

UPDATE MASTERTABLE SET pNation_id = 4, pTMI_id= 3 WHERE Player_id= 3;

UPDATE MASTERTABLE SET pNation_id = 1, pTMI_id= 2 WHERE Player_id= 4;

UPDATE MASTERTABLE SET pNation_id = 1, pTMI_id= 2 WHERE Player_id= 5;

UPDATE MASTERTABLE SET pNation_id = 1, pTMI_id= 1 WHERE Player_id= 6;

UPDATE MASTERTABLE SET pNation_id = 3, pTMI_id= 4 WHERE Player_id= 7;

이렇게 테이블들을 3개를 만들었습니다.

오늘은 생성까지하고 다음시간에는 이제 join을 하도록 하겠습니다.

 

728x90