-- 제약 조건
-- not null
-- 기본이 null 허용
CREATE TABLE null_test(
col1 varchar2(20) NOT NULL,
col2 varchar2(20) NULL,
col3 varchar2(20)
);
SELECT * FROM null_test;
INSERT INTO NULL_TEST (COL1, COL2)
VALUES ('aa', 'bb');
-- col1 오류 발생
INSERT INTO NULL_TEST (COL2, COL3)
VALUES ('cc', 'dd');
INSERT INTO NULL_TEST (COL1, COL3)
VALUES ('cc', 'dd');
-- unique
CREATE TABLE unique_test (
col1 varchar2(20) NOT NULL UNIQUE,
col2 varchar2(20) UNIQUE,
col3 varchar2(20) NOT NULL,
col4 varchar2(20) NOT null
);
SELECT * FROM unique_test;
INSERT INTO UNIQUE_TEST (COL1, COL2, COL3, COL4)
VALUES ('aa', 'bb', 'cc', 'dd');
INSERT INTO UNIQUE_TEST (COL1, COL2, COL3, COL4)
VALUES ('aa2', 'bb2', 'cc2', 'dd2');
UPDATE UNIQUE_TEST
SET COL1 = 'aa'
WHERE COL2 = 'bb2';
INSERT INTO UNIQUE_TEST (COL1, COL2, COL3, COL4)
VALUES ('aa3', '', 'cc3', 'dd3');
INSERT INTO UNIQUE_TEST (COL1, COL2, COL3, COL4)
VALUES ('aa4', '', 'cc4', 'dd4');
-- unique 제약으로 들어가는 컬럼들은 그들의 조합이 유일해야 함
-- 각 컬럼의 데이터의 유일함은 의미가 없고, 조합이 유일해야함
CREATE TABLE UNIQUE_TEST2 (
col1 varchar2(20),
col2 varchar2(20),
-- constraints 제약 조건명 unique(대상 컬럼1, 대상 컬럼2)
CONSTRAINTS temp_unique UNIQUE(col1, col2)
);
SELECT * FROM UNIQUE_TEST2;
INSERT INTO UNIQUE_TEST2 (COL1, COL2)
VALUES ('aa', 'bb');
INSERT INTO UNIQUE_TEST2 (COL1, COL2)
VALUES ('aa', 'aa');
INSERT INTO UNIQUE_TEST2 (COL1, COL2)
VALUES ('aa', 'cc');
INSERT INTO UNIQUE_TEST2 (COL1, COL2)
VALUES ('bb', 'aa');
INSERT INTO UNIQUE_TEST2 (COL1, COL2)
VALUES ('bb', 'bb');
INSERT INTO UNIQUE_TEST2 (COL1, COL2)
VALUES ('bb', 'cc');
-- check
CREATE TABLE check_test(
gender varchar2(10) NOT NULL,
CONSTRAINTS check_gender CHECK (gender IN ('남자', '여자'))
);
SELECT * FROM CHECK_TEST ct;
INSERT INTO CHECK_TEST VALUES('남자');
INSERT INTO CHECK_TEST VALUES('여자');
INSERT INTO CHECK_TEST VALUES('M');
INSERT INTO CHECK_TEST VALUES('f');
-- primary key
CREATE TABLE PRIMARY_key(
student_id number(10) primary KEY,
name varchar2(10)
);
CREATE TABLE PRIMARY_key2(
student_id number(10),
name varchar2(10),
CONSTRAINTS student_pk PRIMARY KEY (student_id)
);
SELECT * FROM JOB_HISTORY jh ORDER BY EMPLOYEE_ID;
create table pkTable (
col1 varvhar2(10) primary key,
col2 varchar2(10) constraints pk 이름 primary key,
col3 varchar2(10),
constraints pk이름 primary key(col3)
);
-- fk
CREATE TABLE daddy (
idx number(10),
mid number(10) PRIMARY KEY
);
CREATE TABLE daughter (
idx number(10) PRIMARY KEY,
mid number(10),
CONSTRAINTS fk_da FOREIGN key(mid)
REFERENCES daddy(mid) ON DELETE CASCADE
);
INSERT INTO DADDY VALUES (1,10);
INSERT INTO DADDY VALUES (2,20);
SELECT * FROM DADDY d ;
INSERT INTO DAUGHTER VALUES (100,10);
INSERT INTO DAUGHTER VALUES (101,10);
INSERT INTO DAUGHTER VALUES (102,10);
INSERT INTO DAUGHTER VALUES (200,20);
INSERT INTO DAUGHTER VALUES (201,20);
SELECT * FROM DAUGHTER d ;
INSERT INTO DAUGHTER VALUES (300,30);
SELECT * FROM DADDY d
LEFT OUTER JOIN DAUGHTER d2
ON d.mid = d2.mid
;
DELETE daddy WHERE idx = 1;
SELECT * FROM DADDY d ;
SELECT * FROM DAUGHTER d2 ;


-- 야구 문제
CREATE SEQUENCE team_id_seq
INCREMENT BY 1
START WITH 1
nomaxvalue
MINVALUE 1
;
CREATE TABLE TB_TEAM (
team_id number(10) PRIMARY KEY,
LOCATION varchar2(10) NOT NULL,
team_name varchar2(10) NOT NULL,
num varchar2(15),
home varchar2(60)
);
SELECT * FROM TB_TEAM tt;
CREATE SEQUENCE player_id_seq
INCREMENT BY 1
START WITH 1
nomaxvalue
MINVALUE 1
;
CREATE TABLE TB_PLAYER (
p_num number(10) PRIMARY KEY,
p_name varchar2(10) NOT NULL,
p_position varchar2(10),
height number(3),
team_id number(10),
constraints fk_code foreign KEY (team_id)
REFERENCES tb_team(team_id) ON DELETE cascade
);
SELECT * FROM TB_PLAYER tp;
INSERT INTO TB_TEAM VALUES (team_id_seq.nextval, 'seoul', 'dusan', 024355737, 'http_dusan');
INSERT INTO TB_TEAM VALUES (team_id_seq.nextval, 'lotte', 'busan', 0422867987, 'http_busan');
INSERT INTO TB_PLAYER VALUES (player_id_seq.nextval, '류현진', '투수', 178, 1);
INSERT INTO TB_PLAYER VALUES (player_id_seq.nextval, '최정', '타자', 179, 1);
INSERT INTO TB_PLAYER VALUES (player_id_seq.nextval, '김', '포수', 175, 2);
INSERT INTO TB_PLAYER VALUES (player_id_seq.nextval, '이', '포수', 181, 2);
INSERT INTO TB_PLAYER VALUES (player_id_seq.nextval, '오타니', '타자', 188, 1);
INSERT INTO TB_PLAYER VALUES (player_id_seq.nextval, '톰', '투수', 190, 1);
INSERT INTO TB_PLAYER VALUES (player_id_seq.nextval, '김하성', '타자', 185, 2);
INSERT INTO TB_PLAYER VALUES (player_id_seq.nextval, '최지만', '투수', 178, 2);
INSERT INTO TB_PLAYER VALUES (player_id_seq.nextval, '마티스', '타자', 181, 1);
INSERT INTO TB_PLAYER VALUES (player_id_seq.nextval, '최정희', '포수', 176, 1);
-- 조회
SELECT tp.P_NUM, tp.P_NAME, tp.P_POSITION, tp.HEIGHT, tt.HOME
FROM TB_TEAM tt
LEFT OUTER JOIN TB_PLAYER tp
ON tt.TEAM_ID = tp.TEAM_ID
;