오라클 SQL DBEAVER - 제약조건 CHECK / PRIMARY KEY 기본키 / INSERT / UNIQUE / UPDATE

2021. 7. 31. 23:29dummmy

반응형

1. UNIQUE

중복을 허용하지 않는 제약 조건. 
CREATE TABLE USER_UNIQUE( 
	USER_NO NUMBER,
	USER_ID VARCHAR2(20) UNIQUE,
	USER_PW VARCHAR2(20),
	USER_NAME VARCHAR2(15)
);
-> 똑같은 ID값을 넣으려고 하면 에러
위의 예는 컬럼레벨로 제약 조건을 작성, 
CREATE TABLE USER_UNIQUE( 
	USER_NO NUMBER,
	USER_ID VARCHAR2(20),
	USER_PW VARCHAR2(20),
	USER_NAME VARCHAR2(15),
	UNIQUE(USER_ID)
);
이와 같이 칼럼을 모두 작성한 후에 
아래에 제약조건을 추가하면 테이블 레벨 제약 조건 


두 개 이상의 칼럼을 제약조건으로 묶을 경우
반드시 테이블 레벨에서 제약 조건 선언 
CREATE TABLE USER_UNIQUE3 ( 
	USER_NO NUMBER,
	USER_ID VARCHAR2(20),
	USER_PW VARCHAR2(20),
	USER_NAME VARCHAR2(15),
	UNIQUE(USER_NO, USER_ID)
);

조건이 2개인 위와 같은 경우에는, 
USER_NO가 똑같더라도 USER_ID가 다르면 다르므로 입력 가능 (OR의 개념)

 

 

2.CHECK

-- CHECK 제약조건--
--컬럼에 값을 기록할 때 지정한 값만 받고, 그 값 이외에는 값이 기록되지 않게끔 범위를 지정하는 것 
--[사용형식]
--check(컬럼명 비교연산자 값)
CHECK(GENDER IN('M','F'))
CHECK(USER_ID IS NOT NULL)

--CHECK 제약조건에 부등호를 표기해서 제약 조건 
CREATE TABLE USER_CHECK2(
	TEST_DATA NUMBER,
	CONSTRAINT CK_USERCK_DATA CHECK(TEST_DATA > 0)
);

INSERT INTO USER_CHECK2 VALUES(10);
--INSERT INTO USER_CHECK2 VALUES(-10); 조건 위배.안들어감


CREATE TABLE USER_CHECK3 ( 
	NAME VARCHAR2(15),
	PRICE NUMBER,
	CDATE DATE,
	QUAL CHAR(1),
	CONSTRAINT CK_CHECK3_PRICE CHECK(PRICE BETWEEN 1 AND 9999),
	CONSTRAINT CK_CHECK3_DATE CHECK(CDATE >=TO_DATE('2010/01/01','YYYY/MM/DD')) ,
	--2010년1월1일 이후의 날짜만 입력 가능 
	CONSTRAINT CK_CHECK3_QUAL CHECK(QUAL >='A' AND QUAL <='D')
	--ABCD만 입력을 받겠다 
	);

 

3.PRIMARY KEY (기본키) 제약조건

--PRIMARY KEY (기본키) 제약조건 
--테이블 내의 한 행에서 그 행을 식별하기 위한 고유의 값을 가지는 칼럼
	--테이블 전체에 대한 각 데이터의 식별자 역할을 수행 
--기본키 제약조건은 테이블마다 한 개만 존재할 수 있다.

--PRIMARY KEY 제약조건을 걸면, 따로 명시하지 않아도 NOT NULL과 UNIQUE제약 조건이 설정 된다.

 

4. DML 조작언어-INSERT

INSERT : 새로운 행을 특정 테이블에 추가 
INSET INTO 테이블명 VALUES (값 );

--INSERT + SUBQUERY
--INSERT문에 서브쿼리를 사용하여 VALUES 대신 값을 지정하여 추가


--1. 먼저 새로운 TABLE을 만들고 
CREATE TABLE EMP_01(
	EMP_ID NUMBER,
	EMP_NAME VARCHAR2(20),
	DEPT_TITLE VARCHAR2(40)
);

--SUBQUERY로 이미 있는 EMPLOYEE와 DEPARTMENT의 값들을 가져와서 새로운 테이블에 넣는다. 
INSERT INTO EMP_01(
					SELECT EMP_ID, EMP_NAME, DEPT_TITLE
					FROM EMPLOYEE
					LEFT JOIN DEPARTMENT ON(DEPT_CODE=DEPT_ID)
);

 

5.UPDATE

수정 명령어 
UPDATE 테이블명 SET 컬럼명 = 바꿀 값
[WHERE 컬럼명 비교연산자 비교값] 

예) 사번이 201인 사원의 주민등록번호 '앞자리'만 631226으로 변경하기 
UPDATE EMPLOYEE SET EMP_NO = '631226' || SUBSTR(EMP_NO,7)
WHERE EMP_ID;201; 


--UPDATE+SUBQUERY
--여러행을 변경하거나 여러 컬럼의 값을 변경하고자할때 서브쿼리를 사용하여
--UPDATE를 작성할수있다
--UPDATE 테이블명 SET 컬럼명 - (서브쿼리);

예)
--B, C, D 사원의 급여를
--A 사원과 같은 급여, 보너스로 수정하는
--UPDATE구문을 작성
--단, 다중열 서브쿼리로 구현

UPDATE EMP_SALARY
SET (SALARY, BONUS) = (SELECT SALARY,BONUS FROM EMP_SALARY WHERE EMP_NAME='A')
WHERE EMP_NAME IN ('B','C','D');
반응형