참고
책 p.177-179
2020-07-22-03.sql
2020-07-23-01.sql
추가
- 오라클 창 이상할게 창 - 팩토리 설정으로 창 재설정
- NULLABLE의 의미가 정확히 뭐지..?
- 오라클에서 문자열 표현 -> '' 싱글쿼트 (자바에서는 "문자열", '문자')
- 영문자1개=1byte / 한글1글자=3byte
- SUBSTRING (START INDEX, 개수) (오라클)
- SUBSTRING (START INDEX, END INDEX) (자바)
DML?
- INSERT, UPDATE, DELETE
- 조작어
- !! 실행 전 SELECT로 검증해야함
- ROLLBACK 가능
- 트리거:이벤트 (인서트/업데이트/딜리트) 발생 전/후에 해당되는 쿼리
: EX) 카트 테이블에서 고객이 5개 사가면, 자동으로 재고 데이터 5개 차감됨
1. INSERT
- 테이블에 새로운 자료를 삽입할 때 사용
- 새롭게 삽입하고자하는 데이터가 테이블에 존재하지 않아야 함
INSERT INTO 테이블명 [(컬럼명[,컬럼명,...])]
VALUES(값1[,값2,...]);
- 테이블명[(컬럼명[,컬럼명,...])]에 기술된 컬럼의 갯수, 순서, 타입과 VALUES 값의 갯수, 순서, 타입은 일치해야 한다.
- 테이블명 다음 컬럼명이 생략되면, 테이블 생성시 정의한 모든 컬럼의 값을 기술된 순서에 맞게 VALUES절에 정의 해야함
- 테이블명[(컬럼명[,컬럼명,...])]에서 컬럼명을 기술하는 경우는 일부 컬럼에만 값을 정의하는 경우에 사용됨.
- 컬럼의 제약사항 중 NOT NULL 항목은 생략 불가
예제1)
사원테이블에 다음의 자료를 입력하시오
-
실행 전 SELECT로 검증
SELECT FROM EMPLOYEE; -- = ALL 전부 다
-
1행에 자료 INSERT
INSERT INTO EMPLOYEE(E_EMP_NO,E_NAME,E_ADDR,E_POSITION,E_DEPARTMENT)
VALUES('E101','홍길동','OO시 중구 OO동','사원','개발팀')
- 전화번호는 NULLBALE 이어서 꼭 안넣어도됨.
-
잘 들어갔나 SELECT로 확인
SELECT * FROM EMPLOYEE;
-
2행에 자료 INSERT
INSERT INTO EMPLOYEE
VALUES('E201','강감찬','OO시 서구 OO동','02-123-3456','부장','운영팀');
- 반드시 컬럼명에 정의된 순서대로 하나라도 빠뜨리지않고 기입. NULLABLE도 예외없음.
- NULLABLE 전화번호를 안넣고 싶으면 ''(화이트스페이스)로 대체해서 기입하면 NULL로 기입됨.
-
잘 들어갔나 SELECT로 확인
SELECT * FROM EMPLOYEE;
-
3행에 자료 INSERT
INSERT INTO EMPLOYEE
VALUES('E202','홍길순','대한민국 대전광역시 유성구 유천동 금성백조아파트 106동 4002호','010-1234-5678','사원','개발팀');
- 만약 주소(varchar(50)) 범위가 넘는 길이를 넣으려고하면 오류나서 실행 안 됨.
- error: value too large for column "user"."EMPLOYEE"."E_ADDR" (actual: 85, maxium: 50)
-
길이 수정 후 3행 삽입
INSERT INTO EMPLOYEE
VALUES('E202','홍길순','대전 유성구 유천동 금성백조 106-4002','010-1234-5678','사원','개발팀');
-
번외
- 처음에 테이블 생성시 EMPLOYEE 테이블에 E_TEL_NO를 VARCHAR(12)로 설정했음, (15)로 바꿔줘야함
ALTER TABLE EMPLOYEE
MODIFY E_TEL_NO VARCHAR(15);
2. UPDATE
UPDATE 테이블명
SET 컬럼명=값[,컬럼명=값,...][**WHERE** 조건];
- [WHERE 조건] 절이 생략되면 테이블의 모든행에 존재하는 컬럼에 새로운 값으로 변경
예제1) UPDATE
사원테이블 (EMPLOYEES)에서 사원들의 급여를 15000으로 변경하시오.
-
실행 전 SELECT로 검증
-
급여 컬럼(SALARY)를 15000으로 UPDATE
-
다음 예제를 위해 ROLLBACK
예제2) 조건에 따른 UPDATE
사원테이블 (EMPLOYEES) 에서 부서코드가 50번인 사원들의 급여를 15000으로 변경하시오.
- 실행 전 SELECT로 검증
- WHERE 조건에는 관계연산자, 논리연산자가 들어간다.
-
부서코드(DEPARTMENT_ID)가 50인 사원들의 급여를 15000으로 UPDATE
-
다음 예제를 위해 ROLLBACK
예제3) 연산이 들어간 UPDATE
회원테이블 (MEMBER) 에서 회원들의 마일리지를 20% 추가지급하시오.
-
실행 전 SELECT로 검증
-
마일리지(MEM_MILEAGE)를 20% 추가해서 UPDATE
- 혹은 UPDATE MEMBER SET MEM_MILEAGE*1.2;
- 다음 예제를 위해 ROLLBACK 후 COMMIT
3. DELETE
- 저장된 테이블 내의 행(들)을 삭제
- 테이블 자체를 지우는건 DROP
DELTE 테이블명
[WHERE 조건];
- !! WHERE 조건이 없으면, 해당 테이블의 모든 행을 전부 삭제함
- 간단한 만큼 조심해서 써야함
예제1) 테이블 내 모두 DELETE
장바구니테이블(CART) 내의 자료를 모두 삭제하시오
1. 실행 전 SELECT로 검증
SELECT * FROM CART;
-
CART 테이블 내 자료 전부 DELETE
DELETE CART;
-
다음 예제를 위해 ROLLBACK 후 COMMIT
ROLLBACK;
COMMIT;
예제2) 조건에 따른 DELETE
장바구니테이블(CART)에서 2005년 6월 이전 자료를 모두 삭제하시오.
1. 실행 전 SELECT 검증
SELECT * FROM CART;
- CART 테이블 내, 2005년 6월 이전(= 2005년 5월 31일까지) 자료 DELETE
DELETE CART
WHERE SUBSTR(CART_NO,1,8) < '20050601';
- SUBSTR(컬럼명,숫자1,숫자2) : '숫자1' 자리부터 '숫자2' 개 부분 문자열**
- ROLLBACK 후 COMMIT
ROLLBACK;
COMMIT;