[SQLD 시험 대비] 2과목. SQL 기본 및 활용 : 1장. SQL 기본 - 2. DDL(Data Definition Language)
선수 ID
칼럼이 기본키로 적당CREATE TABLE 테이블이름 (
칼럼명1 DATETYPE [DEFAULT 형식],
칼럼명2 DATETYPE [DEFAULT 형식],
칼럼명3 DATETYPE [DEFAULT 형식],
) ;
테이블명 : PLAYER
테이블 설명 : K-리그 선수들의 정보를 가지고 있는 테이블
칼럼명 : PLAYER_ID (선수ID) 문자 고정 자릿수 7자리,
PLAYER_NAME (선수명) 문자 가변 자릿수 20자리,
TEAM_ID (팀ID) 문자 고정 자릿수 3자리,
E_PLAYER_NAME (영문선수명) 문자 가변 자릿수 40자리,
NICKNAME (선수별명) 문자 가변 자릿수 30자리,
JOIN_YYYY (입단년도) 문자 고정 자릿수 4자리,
POSITION (포지션) 문자 가변 자릿수 10자리,
BACK_NO (등번호) 숫자 2자리,
NATION (국적) 문자 가변 자릿수 20자리,
BIRTH_DATE (생년월일) 날짜,
SOLAR (양/음) 문자 고정 자릿수 1자리,
HEIGHT (신장) 숫자 3자리,
WEIGHT (몸무게) 숫자 3자리,
제약조건 : 기본키(PRIMARY KEY) → PLAYER_ID
(제약조건명은 PLAYER_ID_PK)
값이 반드시 존재 (NOT NULL) → PLAYER_NAME, TEAM_ID
CREATE TABLE PLAYER (
PLAYER_ID CHAR(7) NOT NULL,
PLAYER_NAME VARCHAR2(20) NOT NULL,
TEAM_ID CHAR(3) NOT NULL,
E_PLAYER_NAME VARCHAR2(40),
NICKNAME VARCHAR2(30),
JOIN_YYYY CHAR(4),
POSITION VARCHAR2(10),
BACK_NO NUMBER(2),
NATION VARCHAR2(20),
BIRTH_DATE DATE,
SOLAR CHAR(1),
HEIGHT NUMBER(3),
WEIGHT NUMBER(3),
CONSTRAINT PLAYER_PK PRIMARY KEY (PLAYER_ID),
CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID)
);
CREATE TABLE PLAYER (
PLAYER_ID CHAR(7) NOT NULL,
PLAYER_NAME VARCHAR(20) NOT NULL,
TEAM_ID CHAR(3) NOT NULL,
E_PLAYER_NAME VARCHAR(40),
NICKNAME VARCHAR(30),
JOIN_YYYY CHAR(4),
POSITION VARCHAR(10),
BACK_NO TINYINT,
NATION VARCHAR(20),
BIRTH_DATE DATE,
SOLAR CHAR(1),
HEIGHT SMALLINT,
WEIGHT SMALLINT,
CONSTRAINT PLAYER_PK PRIMARY KEY (PLAYER_ID),
CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID)
);
테이블명 : TEAM
테이블 설명 : K-리그 선수들의 소속팀에 대한 정보를 가지고 있는
테이블 칼럼명 : TEAM_ID (팀 고유 ID) 문자 고정 자릿수 3자리,
REGION_NAME (연고지 명) 문자 가변 자릿수 8자리,
TEAM_NAME (한글 팀 명) 문자 가변 자릿수 40자리,
E-TEAM_NAME (영문 팀 명) 문자 가변 자릿수 50자리 ,
ORIG_YYYY (창단년도) 문자 고정 자릿수 4자리,
STADIUM_ID (구장 고유 ID) 문자 고정 자릿수 3자리,
ZIP_CODE1 (우편번호 앞 3자리) 문자 고정 자릿수 3자리,
ZIP_CODE2 (우편번호 뒷 3자리) 문자 고정 자릿수 3자리,
ADDRESS (주소) 문자 가변 자릿수 80자리,
DDD (지역번호) 문자 가변 자릿수 3자리,
TEL (전화번호) 문자 가변 자릿수 10자리,
FAX (팩스번호) 문자 가변 자릿수 10자리,
HOMEPAGE (홈페이지) 문자 가변 자릿수 50자리,
OWNER (구단주) 문자 가변 자릿수 10자리,
제약조건 : 기본 키(PRIMARY KEY) → TEAM_ID
(제약조건명은 TEAM_ID_PK)
NOT NULL → REGION_NAME, TEAM_NAME, STADIUM_ID
(제약조건명은 미적용)
CREATE TABLE TEAM (
TEAM_ID CHAR(3) NOT NULL,
REGION_NAME VARCHAR2(8) NOT NULL,
TEAM_NAME VARCHAR2(40) NOT NULL,
E_TEAM_NAME VARCHAR2(50),
ORIG_YYYY CHAR(4),
STADIUM_ID CHAR(3) NOT NULL,
ZIP_CODE1 CHAR(3),
ZIP_CODE2 CHAR(3),
ADDRESS VARCHAR2(80),
DDD VARCHAR2(3),
TEL VARCHAR2(10),
FAX VARCHAR2(10),
HOMEPAGE VARCHAR2(50),
OWNER VARCHAR2(10),
CONSTRAINT TEAM_PK PRIMARY KEY (TEAM_ID),
CONSTRAINT TEAM_FK FOREIGN KEY (STADIUM_ID) REFERENCES STADIUM(STADIUM_ID)
);
CREATE TABLE TEAM (
TEAM_ID CHAR(3) NOT NULL,
REGION_NAME VARCHAR(8) NOT NULL,
TEAM_NAME VARCHAR(40) NOT NULL,
E_TEAM_NAME VARCHAR(50),
ORIG_YYYY CHAR(4),
STADIUM_ID CHAR(3) NOT NULL,
ZIP_CODE1 CHAR(3),
ZIP_CODE2 CHAR(3),
ADDRESS VARCHAR(80),
DDD VARCHAR(3),
TEL VARCHAR(10),
FAX VARCHAR(10),
HOMEPAGE VARCHAR(50),
OWNER VARCHAR(10),
CONSTRAINT TEAM_PK PRIMARY KEY (TEAM_ID),
CONSTRAINT TEAM_FK FOREIGN KEY (STADIUM_ID) REFERENCES STADIUM(STADIUM_ID)
);
DESCRIBE 테이블명;
또는 DESC 테이블명;
sp_help ‘dbo.테이블명’
CREATE TABLE TEAM_TEMP
AS SELECT * FROM TEAM;
SELECT * INTO TEAM_TEMP FROM TEAM;
ALTER TABLE 테이블명
ADD 추가할 칼럼명 데이터 유형;
ALTER TABLE PLAYER
ADD (ADDRESS VARCHAR2(80));
ALTER TABLE PLAYER
ADD ADDRESS VARCHAR(80);
ALTER TABLE 테이블명
DROP COLUMN 삭제할 칼럼명;
ALTER TABLE PLAYER
DROP COLUMN ADDRESS;
ALTER TABLE PLAYER
DROP COLUMN ADDRESS;
ALTER TABLE 테이블명
MODIFY (칼럼명1 데이터 유형 [DEFAULT 식] [NOT NULL],
칼럼명2 데이터 유형 ...);
ALTER TABLE 테이블명
ALTER (칼럼명1 데이터 유형 [DEFAULT 식] [NOT NULL],
칼럼명2 데이터 유형 ...);
ALTER TABLE TEAM_TEMP
MODIFY (ORIG_YYYY VARCHAR2(8) DEFAULT '20020129' NOT NULL);
ALTER TABLE TEAM_TEMP
ALTER COLUMN ORIG_YYYY VARCAHR(8) NOT NULL;
ALTER TABLE TEAM_TEMP
ADD CONSTRAINT DF_ORIG_YYYY DEFAULT '20020129' FOR ORIG_YYYY;
ALTER TABLE 테이블명
RENAME COLUMN 변경해야 할 칼럼명 TO 새로운 칼럼명
sp_rename 변경해야 할 칼럼명, 새로운 칼럼명, 'COLUMN';
ALTER TABLE PLAYER
RENAME COLUMN PLAYER_ID TO TEMP_ID;
ALTER TABLE PLAYER
RENAME COLUMN TEMP_ID TO PLAYER_ID;
sp_rename 'dbo.TEAM_TEMP.TEAM_ID', 'TEAM_TEMP_ID', 'COLUMN';
ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명;
ALTER TABLE PLAYER
DROP CONSTRAINT PLAYER_FK;
ALTER TABLE PLAYER
DROP CONSTRAINT PLAYER_FK;
ALTER TABLE 테이블명
ADD CONSTRAINT 제약조건명 제약조건 (칼럼명);
ALTER TABLE PLAYER
ADD CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID);
ALTER TABLE PLAYER
ADD CONSTRAINT PLAYER_FK
FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID);
// Oracle
DROP TABLE TEAM;
ERROR: 외래 키에 의해 참조되는 고유/기본 키가 테이블에 있다. 테이블은 삭제되지 않음
// SQL Server
DROP TABLE TEAM;
ERROR: 엔터티 'TEAM'은 FOREIGN KEY 제약 조건을 참조하므로 삭제할 수 없다.
// Oracle
DELETE TEAM
WHERE TEAM_ID = 'K10';
ERROR: 무결성 제약조건(SCOTT.PLAYER_FK)이 위배되었다. 자식 레코드가 발견되었다. ※ 데이터는 삭제되지 않음
// SQL Server
DELETE TEAM
WHERE TEAM_ID = 'K10';
ERROR: FOREIGN KEY 제약 조건을 참조하므로 삭제할 수 없다. ※ 데이터는 삭제되지 않음
RENAME 변경전 테이블명 TO 변경후 테이블명;
sp_rename 변경전 테이블명, 변경후 테이블명;
RENAME TEAM TO TEAM_BACKUP;
RENAME TEAM_BACKUP TO TEAM;
sp_rename 'dbo.TEAM','TEAM_BACKUP';
// 주의: 엔터티 이름 부분을 변경하면 스크립트 및 저장 프로시저를 손상시킬 수 있다. sp_rename 'dbo.TEAM_BACKUP','TEAM';
DROP TABLE 테이블명 [CASCADE CONSTRAINT];
DROP TABLE PLAYER;
DROP TABLE PLAYER;
TRUNCATE TABLE 테이블명;
TRUNCATE TABLE TEAM;
TRUNCATE TABLE TEAM;