[오라클 교재 329 제약조건]
create table user1(
id nchar(10),
name varchar(20)
);
insert into user1(id, name) values('ppk','너구리');
select * from user1;
create table pk_user1(
id nchar(10) primary key, --pk 설정
name varchar(20)
);
insert into pk_user1(id, name) values('ppk','너구리');
insert into pk_user1(id, name) values('ppk','너구리'); -- unique(중복) 제약조건 오류가 남 ( 같은 값이 들어와서)
insert into pk_user1(id, name) values('','너구리'); --not null 제약조건 오류
create table pk_user2(
id nchar(10) ,
name varchar(20),
primary key (id) -- 마지막행에 pk 설정하기
);
insert into pk_user2(id, name) values('ppk','너구리');
insert into pk_user2(id, name) values('ppk','너구리'); -- unique(중복) 제약조건 오류
insert into pk_user2(id, name) values('','너구리'); --not null 제약조건 오류
create table pk_user3(
id nchar(10) ,
name varchar(20),
constraint pk_user3_1 primary key (id) -- 마지막행에 pk 제약조건으로 설정하기
);
create table pk_user4(
id nchar(10) ,
name varchar(20),
constraint pk_user3_2 primary key (id,name) -- 두가지 컬럼을 합쳐서 pk를 만든다/ 이 경우에는 제약조건으로 추가하는 방법만 가능하다 (이름은 생략가능)
);
insert into pk_user4(id, name) values('ppk','너구리1'); --정상실행
insert into pk_user4(id, name) values('ppk','너구리2'); --정상실행
insert into pk_user4(id, name) values('ppk','너구리1'); --유니크제약조건 오류
insert into pk_user4(id, name) values('ppk',''); --not null 제약조건 오류/ 둘중어디에서 null값이 들어가면 안됨
create table user11(
id nchar(10),
name varchar(20) not null -- not null 제약조건 설정해주기
);
desc user11;
insert into user11(id, name) values('ppk','너구리'); --정상실행
insert into user11(id, name) values('ppk',''); -- not null 제약조건 오류
create table user11(
id nchar(10),
name varchar(20),
constraint user11_1 not null (id)-- not null 제약조건은 이렇게 설정하지 못함, 칼럼 옆에서 설정해줘야함
);
--값을 필수로 받아야 하는 경우에 not null 제약조건을 설정하는 것
create table fk_user11(
id nchar(10) not null,
name varchar(20) not null,
foreign key(id) references pk_user1(id) --fk 설정해주기 user1의 id를 참조함 / fk는 참조하는 테이블의 pk를 참조해야함 and 참조하는 컬럼 형이 동일해야함
);
drop table pk_user1;
drop table fk_user11;
create table pk_user1(
id nchar(10) primary key,
name varchar(20)
);
create table fk_user11(
id1 nchar(10) not null,
age number(3),
foreign key(id1) references pk_user1(id) --참조하는 컬럼명이 달라도 의미만 동일하면 됨 (id, id1)
);
insert into pk_user1(id,name) values('ppk','너구리'); --정상
insert into fk_user11(id1,age) values('ppk','17'); --정상
insert into fk_user11(id1,age) values('ppk2','17'); -- 참조오류발생 (parent key not found 오류)/ id가 없는 값을 넣을 수 없음
insert into pk_user1(id,name) values('ppk2','영심이');
select * from fk_user11;
[교재 338 유니크제약조건]
create table uk_user1(
id nchar(10) unique,
name varchar(20)
);
insert into uk_user1(id, name) values ('ppk','영심이'); --정상
insert into uk_user1(id, name) values ('ppk','영심이'); --유니크제약조건 오류
insert into uk_user1(id, name) values ('','영심이'); --정상
insert into uk_user1(id, name) values ('','하늘이'); --정상
select * from uk_user1;
--유니크제약조건 : 중복은 가능하지만 null 값은 안되는 것을 확인할 수 있다
create table uk_user2(
id nchar(10) not null unique,
name varchar(20) not null unique
);
insert into uk_user2(id, name) values ('ppk','영심이'); --정상
insert into uk_user2(id, name) values ('ppk','영심이'); --유니크제약조건 오류
insert into uk_user2(id, name) values ('','영심이'); --not null 제약조건 오류
insert into uk_user2(id, name) values ('','하늘이'); --not null 제약조건 오류
--따라서 not null제약조건과 unique 제약조건을 같이 걸어버리면 pk와 동일한 역할을 하게 되는것이다.
--unique 제약조건을 쓰는 이유가 null값을 받기 위해서 쓰는거기때문에 not null 제약조건과 같이 쓰진 않는다
[교재 339 체크 제약조건]
create table ck_user2(
id nchar(10) not null unique,
loc varchar(20) not null check (loc in('서울','기타'))
);
--check 할 컬럼명을 써주고 어떤걸 체크할건지 in안에 써준다
--입력되는 데이터를 점검하는 기능을 한다
insert into ck_user2(id, loc) values ('ppk','서울'); --정상
insert into ck_user2(id, loc) values ('ppk','경기'); --체크제약조건 오류
select * from ck_user2;
create table ck_user3(
id nchar(10) not null unique,
loc varchar(20) not null,
check (loc in('서울','기타')) --이 형식으로 더 많이 써주는 편이다
);
insert into ck_user3(id, loc) values ('ppk','서울'); --정상
insert into ck_user3(id, loc) values ('ppk','경기'); --체크제약조건 오류
insert into ck_user3(id, loc) values ('young','기타'); --정상
select * from ck_user3;
create table default_user1(
id nchar(10),
name varchar(20),
age number(3)
);
insert into default_user1(id) values ('young1');
select * from default_user1;
--이름과 나이에 null값이 들어간 것을 확인
create table default_user2(
id nchar(10),
name varchar(20) default '서울',
age number(3) default 21
);
create table default_user3(
id nchar(10),
name varchar(20) default '서울',
age number(3) default '21' -- 숫자에 작은 따옴표써서 만들어보기
);
insert into default_user3(id) values ('young1');
select * from default_user3;
--똑같이 잘 들어간다
+[교재 341 not null 제약조건]
제약조건 추가하기, 삭제하기
create table user100(
id nchar(10),
name varchar(20),
age number(3)
);
-- 테이블 생성을 한 후에 id 에다가 pk를 추가하고 싶을때
alter table user100
add primary key (id);
alter table default_user100
add constraint user100_pk primary key (id);
--원래 기본형태에는 constraint [명칭] 이 들어가지만 생략도 가능
select * from all_constraints
where table_name='DEFAULT_USER100'; -- 제약조건 확인하기/ 테이블네임의 값을 써줄때에는 무조건 대문자로 써줘야함 !!!
--제약조건의 이름이 SYS_C007120로 생성
※
alter table default_user100
add constraint user100_pk primary key (id);
--제약조건 이름설정해주면 설정한 이름으로 들어간다
alter table default_user100
drop constraint SYS_C007120;
--제약조건 삭제하기 제약조건 이름으로 넣어줘야한다
insert into default_user100(id) values('ppk'); --정상
insert into default_user100(id) values('ppk'); --정상
alter table default_user100
add primary key (id); -- 하면 중복되는 값이 들어가있어서 오류가난다
delete from default_user100; --레코드 삭제하기
alter table default_user100
add primary key (id); --다시 하면 실행 된다
[교재 346 테이블 수정]
create table user100(
id nchar(10),
name varchar(20),
age number(3)
);
--컬럼 추가하기
alter table user100
add email varchar(50) not null;
--확인하기
desc user100;
--컬럼 삭제하기
alter table user100
drop column email;
--확인하기
desc user100;
alter table user100
drop column email;
select * from user100;
insert into user100(id, loc, age) values ('ppk','서울',100);
alter table user100
drop column age; --제거 됨
--컬럼 추가하기
alter table user100
add age number(3);
--컬럼 디폴트값 지정해주기
alter table user100
add age number(3) default 17;
--1 테이블 제거
drop table user100;
--2 테이블 생성
create table user100(
id nchar(10),
loc varchar(20)
);
--3 레코드 추가
insert into user100(id, loc) values ('ppk','서울');
--4 보기
select * from user100;
--5 컬럼추가하면서 디폴드값 설정
alter table user100
add age number(3) default 17;
--6 컬럼 제거
alter table user100
drop column age;
--7 컬럼 추가 디폴트 없이
alter table user100
add age number(3);
-- 컬럼 형 바꾸기 ( 대부분 사이즈를 키우는 것 )
alter table user100
modify (id nchar(20)); --정상
alter table user100
modify (id nchar(8)); -- 사이즈 오류 나머지는 공백으로 10이 잡혀있기 때문에
alter table user100
modify (loc varchar(30)); --정상
alter table user100
modify (loc varchar(10)); -- 정상
alter table user100
modify (loc varchar(7)); --정상
alter table user100
modify (loc varchar(5)); --사이즈 오류남
--테이블 만들기
create table user200(
id nchar(10),
loc varchar(20),
age varchar(3)
);
--컬럼형 바꾸기
alter table user200
modify (age number(3)); --정상
--컬럼형 다시 바꾸기
alter table user200
modify (age varchar(3)); --정상 ( 현재 안에 데이터가 없음)
select * from user200;
insert into user200(id, loc, age) values ('ppk','서울','25');
alter table user200
modify (age number(3)); --오류남 (문자를 숫자를 바꿀 수는 없다)
--테이블 만들기
create table t100(
id varchar(10),
pwd varchar(20)
);
[교재 356 뷰의 장점]
--자동증가 값을 만들어준다 (시퀀스는 오라클에만 있다)
create SEQUENCE s_table
INCREMENT BY 1
start with 1001;
--컬럼 확인하기
DESC t100;
insert into t100( id, pwd) values (s_table.nextval, '1234');
insert into t100( id, pwd) values (s_table.nextval, '1234');
insert into t100( id, pwd) values (s_table.nextval, '1234');
insert into t100( id, pwd) values (s_table.nextval, '1234');
select * from t100;
-- 1001,1002,1003,1004 로 보임
insert into t100( id, pwd) values (s_table.nextval, '1234가나다라마바사');
insert into t100( id, pwd) values (s_table.nextval, '1234가나다라마바사');
insert into t100( id, pwd) values (s_table.nextval, '1234가나다라마바사');
insert into t100( id, pwd) values (s_table.nextval, '1234가나다라마바사');
-- 총오류 4번이 나고
insert into t100( id, pwd) values (s_table.nextval, '4567');
-- 이거 넣으면 1009번으로 들어간다 (1005번으로 들어가는게 아님)
--삭제하고 다시 추가추가 하면
delete from t100 where id='1009';
insert into t100( id, pwd) values (s_table.nextval, '4567');
insert into t100( id, pwd) values (s_table.nextval, '4567');
1010,1011 로들어감
오류나, 삭제도 다 카운팅 들어간다
--t300 테이블 만들어서
create table t300(
id varchar(10),
pwd varchar(20)
);
insert into t300( id, pwd) values (s_table.nextval, '4567');
insert into t100( id, pwd) values (s_table.nextval, '1234');
select * from t300;
select * from t100;
--t100, t300 번갈아가면서 추가하면 번갈아 가면서 카운팅 된다
--3씩 증가하는 시퀀스만들기
create SEQUENCE s_table2
INCREMENT BY 3
start with 1001;
--t400테이블 만들기
create table t400(
id varchar(10),
pwd varchar(20)
);
insert into t400( id, pwd) values (s_table2.nextval, '4567');
insert into t400( id, pwd) values (s_table2.nextval, '4567');
insert into t400( id, pwd) values (s_table2.nextval, '4567');
select * from t400;
--3씩 증가하는 걸 볼 수 있다
[교재 342 임시테이블]
select 5+7
from dual;
-- dual 이라는 임시테이블을 만듦 12 (5+7) 라는 값이 임시테이블에 저장됨
[ 교재 251 암시적인 형 변환(자동형변환) ]
select '5'+'7'
from dual;
--이값은 57로 나오는게 아니라 12로 나옴. 즉 자동 형 변환이 되는 것이다
select '5'||'7'
from dual;
-- 문자연결은 || 를 쓴다 (오라클에서만 가능하다)
select concat('5','7')
from dual;
--concat은 다른 DBMS에서도 사용할 수 있다
select concat('5','ABC')
from dual;
select concat('5','ABC','99')
from dual;
--오류가 난다 / CONCAT은 2개의 문자열만 연결 할 수 있다
select '5'||'7'||'연결'
from dual;
--여러 문자열 연결이 가능하다
--문자열 길이 나타내기
select length('한글') from dual; --2
select length('한글'),length('abcd') from dual; --2, 4
select lengthB('한글'),length('abcd') from dual; --B를 추가해서 써주면 바이너리값인 6 으로 나옴
'SQL' 카테고리의 다른 글
[ 6일차 ] SQL 연습문제+NCS 예상문제풀이 (0) | 2022.06.10 |
---|---|
[ 5일차 ] SQL default값 설정하기, 뷰 테이블 별칭 실습+ lower,upper,initcap,replace,substr 함수 (0) | 2022.06.10 |
[ 4일차 ] inner join, left outer join, right outer join, full outer join (0) | 2022.06.09 |
[ 4일차 ] SQL 실습하기 ① (0) | 2022.06.09 |
[ 4일차 ] VIEW, run SQL Command line으로 계정 만들기,암호 바꾸기,권한 부여하기 (0) | 2022.06.09 |