본문 바로가기

DBMS

DML, DDL, 제약 조건(CONSTRAINT)

반응형
SMALL

DML(데이터 조작 언어)

1. SELECT : 조회
    SELECT 컬럼명, ...

    FROM 테이블명
    [WHERE 조건식];

 

2. INSERT : 추가
원하는 컬럼만 골라서 값을 저장할 때 사용한다.
    INSERT INTO 테이블명 (컬럼명, ...)
    VALUES (값, ...);

모든 컬럼에 값을 넣을 때 사용한다.
    INSERT INTO 테이블명
    VALUES (값, ...);

 

3. UPDATE : 수정
    UPDATE 테이블명
    SET 컬럼명1 = 값1, 컬럼명2 = 값2, ...
    [WHERE 조건식];

 

4. DELETE : 삭제
    DELETE FROM 테이블명
    [WHERE 조건식];

 


제약 조건(CONSTRAINT)

1. PRIMARY KEY(PK)
    - 고유한 값이며 각 행의 구분점으로 사용된다.
    - 중복이 없고 NULL값을 허용하지 않는다.

 

2. FOREIGN KEY(FK)
    - 다른 테이블의 PK를 사용하며 중복이 가능하다.
    - 보통 테이블끼리 관계를 맺을 때 사용한다.
    - NULL을 허용하지만 좋은 상황은 아니다.

3. UNIQUE KEY(UK)
    - NULL은 허용하지만 중복을 허용하지 않는다.

 

4. NOT NULL
    - NULL을 허용하지 않는다.

5. CHECK(컬럼명 = 값1 OR 컬럼명 = 값2, ...)
    - 특정 컬럼에 특정 값만 허용하고 싶을 때 사용하는 제약조건
    - 우리가 원하는 특정 값이 들어왔는지 체크해준다.

 


DDL (Data Definition Language; 데이터 정의어)

1. CREATE : 테이블 생성
    CREATE TABLE 테이블명(
    컬럼명 자료형(용량) [제약조건],
     ...
    );

 

2. DROP : 테이블 삭제
    DROP TABLE 테이블명;

3. ALTER : 테이블 수정
    ALTER TABLE 테이블명
       - 테이블명 수정 : RENAME TO 새로운 테이블명;
       - 컬럼 추가 : ADD(새로운 컬럼명 자료형(용량));
       - 컬럼명 수정 : RENAME COLUMN 기존 컬럼명 TO 새 컬럼명;
       - 컬럼 삭제 : DROP COLUMN 기존 컬럼명;
       - 컬럼 타입 수정 : MODIFY(기존 컬럼명 자료형(용량));

 

4. TRUNCATE : 테이블 내용 전체 삭제
    TRUNCATE TABLE 테이블명;

 

CREATE TABLE TBL_MEMBER(
	MEMBER_NAME VARCHAR2(1000), 
	MEMBER_AGE NUMBER
);

-- ==========================
-- SELECT
SELECT *
FROM TBL_MEMBER;

-- INSERT 
INSERT INTO TBL_MEMBER(MEMBER_NAME, MEMBER_AGE)
VALUES('류호근', 22);

INSERT INTO TBL_MEMBER
VALUES('홍길동', 24);

INSERT INTO TBL_MEMBER(MEMBER_NAME)
VALUES('오진수'); -- MEMBER_AGE NULL 확인

-- UPDATE
UPDATE TBL_MEMBER 
SET MEMBER_NAME = '장보고' -- MEMBER_NAME을 홍길동에서 장보고로 UPDATE 한다.
WHERE MEMBER_AGE = 24; -- MEMBER_AGE가 24인 ROW에서

-- DELETE
DELETE
FROM TBL_MEMBER
WHERE MEMBER_NAME  = '류호근'; -- MEMBER_NAME이 '류호근'인 ROW 삭제


CREATE TABLE TBL_STUDENT(
   STUDENT_NUMBER NUMBER,
   STUDENT_NAME VARCHAR2(1000),
   STUDENT_MATH NUMBER,
   STUDENT_ENG NUMBER,
   STUDENT_KOR NUMBER,
   STUDENT_GRADE VARCHAR2(1000)
);
SELECT * FROM TBL_STUDENT;

/* [실습]
 * 학생 테이블에 데이터를 추가한다.
 * 학생번호, 이름, 수학, 영어, 국어
 * '김철수', 90, 90, 90
 * '홍길동', 70, 25, 55
 * '이유리', 89, 91, 77
 * '김웅이', 48, 100, 92
 * '신짱구', 22, 13, 9
 * */
INSERT INTO TBL_STUDENT
(STUDENT_NUMBER, STUDENT_NAME, STUDENT_MATH, STUDENT_ENG, STUDENT_KOR)
VALUES(1, '김철수', 90, 90, 90);

INSERT INTO TBL_STUDENT
(STUDENT_NUMBER, STUDENT_NAME, STUDENT_MATH, STUDENT_ENG, STUDENT_KOR)
VALUES(2, '홍길동', 70, 25, 55);

INSERT INTO TBL_STUDENT
(STUDENT_NUMBER, STUDENT_NAME, STUDENT_MATH, STUDENT_ENG, STUDENT_KOR)
VALUES(3, '이유리', 89, 91, 77);

INSERT INTO TBL_STUDENT
(STUDENT_NUMBER, STUDENT_NAME, STUDENT_MATH, STUDENT_ENG, STUDENT_KOR)
VALUES(4, '김웅이', 48, 100, 92);

INSERT INTO TBL_STUDENT
(STUDENT_NUMBER, STUDENT_NAME, STUDENT_MATH, STUDENT_ENG, STUDENT_KOR)
VALUES(5, '신짱구', 22, 13, 9);

SELECT * FROM TBL_STUDENT;

-- [실습]
-- 전체 학생들의 이름과 평균 점수를 조회하기(별칭도 넣기)
SELECT STUDENT_NAME 이름,
   ROUND((STUDENT_MATH + STUDENT_ENG + STUDENT_KOR) / 3, 2) "평균 점수"
FROM TBL_STUDENT;


/* [실습]
 * 학생의 평균 점수를 구하고 학점을 수정하기
 * A : 90점 이상
 * B : 80점 이상 90점 미만
 * C : 50점 이상 80점 미만
 * F : 50점 미만 
 * */
SELECT * FROM TBL_STUDENT;


UPDATE TBL_STUDENT
SET STUDENT_GRADE = 'A'
WHERE ROUND((STUDENT_MATH + STUDENT_ENG + STUDENT_KOR) / 3, 2) >= 90;

UPDATE TBL_STUDENT
SET STUDENT_GRADE = 'B'
WHERE ROUND((STUDENT_MATH + STUDENT_ENG + STUDENT_KOR) / 3, 2) >= 80
AND ROUND((STUDENT_MATH + STUDENT_ENG + STUDENT_KOR) / 3, 2) < 90;

UPDATE TBL_STUDENT
SET STUDENT_GRADE = 'C'
WHERE ROUND((STUDENT_MATH + STUDENT_ENG + STUDENT_KOR) / 3, 2) >= 50
AND ROUND((STUDENT_MATH + STUDENT_ENG + STUDENT_KOR) / 3, 2) < 80;

UPDATE TBL_STUDENT
SET STUDENT_GRADE = 'F'
WHERE ROUND((STUDENT_MATH + STUDENT_ENG + STUDENT_KOR) / 3, 2) < 50;

/* [실습]
 * 학점이 잘 들어갔는지 확인하기 위해서
 * 학생 번호, 이름, 평균, 학점 조회하기 (별칭 넣어서)
 * */
SELECT STUDENT_NUMBER "학생 번호",
   STUDENT_NAME 이름,
   ROUND((STUDENT_MATH + STUDENT_ENG + STUDENT_KOR) / 3, 2) 평균,
   STUDENT_GRADE 학점
FROM TBL_STUDENT;


/* [실습]
 * 학생의 수학, 영어, 국어 점수 중 한 과목이라도 50점 미만이 아니고
 * 학점이 B 이상인 학생만 학생 번호, 이름, 학점 출력하기
 * */
SELECT * 
FROM TBL_STUDENT;

SELECT STUDENT_NUMBER "학생 번호", STUDENT_NAME 이름, STUDENT_GRADE 학점
FROM TBL_STUDENT
WHERE NOT(STUDENT_MATH < 50 
	OR STUDENT_ENG < 50 
	OR STUDENT_KOR < 50)
AND (STUDENT_GRADE >= 'A' OR STUDENT_GRADE >= 'B');

SELECT STUDENT_NUMBER "학생 번호", STUDENT_NAME 이름, STUDENT_GRADE 학점
FROM TBL_STUDENT
WHERE NOT(STUDENT_MATH < 50 
	OR STUDENT_ENG < 50 
	OR STUDENT_KOR < 50)
AND STUDENT_GRADE IN('A', 'B'); -- IN 사용


/* [실습]
 * 학생의 수학, 영어, 국어 점수 중
 * 한 과목이라도 30점 미만이면 퇴학시키기(DB에서 삭제)
 * */
DELETE FROM TBL_STUDENT
WHERE STUDENT_MATH < 30
   OR STUDENT_ENG < 30
   OR STUDENT_KOR < 30;

SELECT * FROM TBL_STUDENT;


-- ==========================
-- DDL
CREATE TABLE TBL_USER(
	USER_NAME VARCHAR2(1000),
	USER_AGE NUMBER
);
SELECT * FROM TBL_USER;

-- 테이블명 수정
ALTER TABLE TBL_USER RENAME TO TBL_MY_USER;
-- 컬럼 추가
ALTER TABLE TBL_MY_USER ADD(USER_GENDER CHAR(4));
-- 컬럼명 수정
ALTER TABLE TBL_MY_USER RENAME COLUMN USER_NAME TO USER_NICKNAME;
-- 컬럼 삭제
ALTER TABLE TBL_MY_USER DROP COLUMN USER_GENDER;
-- 컬럼 타입 수정
ALTER TABLE TBL_MY_USER MODIFY(USER_NICKNAME VARCHAR2(500));


INSERT INTO TBL_MY_USER
VALUES('A', 22);

INSERT INTO TBL_MY_USER
VALUES('B', 25);

INSERT INTO TBL_MY_USER
VALUES('C', 30);


SELECT * FROM TBL_MY_USER;
TRUNCATE TABLE TBL_MY_USER;


DROP TABLE TBL_MY_USER;


/* [실습]
 * 자동차 테이블 생성
 * - 자동차 번호
 * - 자동차 브랜드
 * - 출시 날짜
 * - 색상
 * - 가격
 * */
CREATE TABLE TBL_CAR(
   CAR_NUMBER NUMBER,
   CAR_BRAND VARCHAR2(1000),
   CAR_RELEASE_DATE DATE,
   CAR_COLOR VARCHAR2(1000),
   CAR_PRICE NUMBER
);
SELECT * FROM TBL_CAR;


/* ALTER TABLE TBL_CAR : 테이블을 수정하겠다 TBL_CAR
 * ADD : 추가한다.
 * CONSTRAINT : 제약 조건
 * PK_CAR : 제약 조건 이름
 * PRIMARY KEY(CAR_NUMBER) : PK라는 제약조건을 (CAR_NUMBER) 컬럼에
 * */
ALTER TABLE TBL_CAR ADD CONSTRAINT PK_CAR PRIMARY KEY(CAR_NUMBER);


-- 제약조건 삭제
ALTER TABLE TBL_CAR DROP CONSTRAINT PK_CAR;

DROP TABLE TBL_CAR;


CREATE TABLE TBL_CAR(
   CAR_NUMBER NUMBER PRIMARY KEY,
   CAR_BRAND VARCHAR2(1000),
   CAR_RELEASE_DATE DATE,
   CAR_COLOR VARCHAR2(1000),
   CAR_PRICE NUMBER
);
SELECT * FROM TBL_CAR;


ALTER TABLE TBL_CAR DROP CONSTRAINT SYS_C007010;
DROP TABLE TBL_CAR;


-- 제약 조건을 CREATE TABLE 할 때 한 번에 설정
CREATE TABLE TBL_CAR(
   CAR_NUMBER NUMBER CONSTRAINT PK_CAR PRIMARY KEY,
   CAR_BRAND VARCHAR2(1000),
   CAR_RELEASE_DATE DATE,
   CAR_COLOR VARCHAR2(1000),
   CAR_PRICE NUMBER
);
SELECT * FROM TBL_CAR;


/* [실습]
 * 동물 테이블
 * 고유 번호
 * 종류
 * 나이 
 * 먹이
 * */
CREATE TABLE TBL_ANIMAL(
   ANIMAL_NUMBER NUMBER,
   ANIMAL_KIND VARCHAR2(1000),
   ANIMAL_AGE NUMBER,
   ANIMAL_FEED VARCHAR2(1000)
);

-- 제약조건 추가(PK)
ALTER TABLE TBL_ANIMAL ADD CONSTRAINT PK_ANIMAL PRIMARY KEY(ANIMAL_NUMBER);

-- 제약조건 삭제(PK)
ALTER TABLE TBL_ANIMAL DROP CONSTRAINT PK_ANIMAL;

-- 컬럼 추가(성별)
ALTER TABLE TBL_ANIMAL ADD(ANIMAL_GENDER CHAR(4));

-- 컬럼 이름 수정(고유 번호)
ALTER TABLE TBL_ANIMAL RENAME COLUMN ANIMAL_NUMBER TO ANIMAL_NUM;

-- 컬럼 삭제(먹이)
ALTER TABLE TBL_ANIMAL DROP COLUMN ANIMAL_FEED;

-- 컬럼 수정(종류 컬럼을 다른 자료형으로)
ALTER TABLE TBL_ANIMAL MODIFY(ANIMAL_KIND NUMBER);

-- 동물 테이블 삭제
DROP TABLE TBL_ANIMAL;





 

반응형
LIST