도시발전지수 : (버거킹 + 맥도날드 + kfc ) / 롯데리아
DML : Data Manipulate Language
1. SELECT ***************
2. INSERT : 테이블에 새로운 데이터를 입력하는 명령
3. UPDATE : 테이블에 존재하는 데이터의 컬럼을 변경하는 명령
4. DELETE : 테이블에 존재하는 데이터(행)를 삭제하는 명령
INSERT 3가지.
1.테이블의 특정 컬럼에만 데이터를 입력할 때 ( 입력되지 않은 컬럼은 NULL 로 설정 된다 )
INSERT INTO 테이블명 ( 컬럼1, 컬럼2.....) VALUES (컬럼 1의 값1, 컬럼2의 값2 .... ) ;
DESC emp;
INSERT INTO emp ( empno, ename ) VALUES (9999, 'brown') ;
SELECT *
FROM emp
WHERE empno = 9999;
INSERT INTO emp ( ename ) VALUES ( 'brown') ;
empno 컬럼의 설정이 NOT NULL이기 때문에 EMPNO 컬럼에 NULL값이 들어갈 수 없어서 에러가 발생 .
DESC emp ;
empno 를 보면 not null 못쓴다고 써있지? 그건 empno 는 항상 써져야한다는거야
INSERT INTO emp (ename) VALUES ('sally' ) ;
--학생정보를 파일에다가 기록을 할 때, empno 라는 것을 입력을 안하고 이름만 쓰면
2. 테이블의 모든 컬럼에 모든 데이터를 입력할 떄
***단 값을 나열하는 순서는 테이블의 정의된 컬럼 순서대로 기술 해야한다.
테이블 컬럼 순서확인 방법 : DESC 테이블명
INSERT INTO 테이블명 VALUES (컬럼 1의 값1, 컬럼2의 값2 .... ) ;
DESC dept;
INSERT INTO dept VALUES ( 98, '대덕' , '대전 ' ) ;
SELECT *
FROM dept;
컬럼을 기술하지 않았기 떄문에 테이블에 정의된 모든 컬럼에 대한 값을 기술해야 한다
만약 3개중에 2개만 기술하여 에러발생
INSERT INTO dept VALUES ( 97, 'DDIT') ;
3. SELECT 결과를 ( 여러 행일 수도 있다 ) 테이블에 입력
INSERT INTO 테이블명 [(cool,....) ]
SELECT 구문;
INSERT INTO emp (empno , ename ) ------values 는 없어.
SELECT 9997, 'cony' FROM dual
UNION ALL
SELECT 9996, 'moon' FROM dual ;
--동시에 2개 데이타를 삽입함
SELECT *
FROM emp ;
날짜 컬럼 값 입력하기
-- EMP 쿼리에 넣기 위해서
INSERT INTO emp VALUES ( 9996, 'JAMES' , 'CLERK' , NULL , SYSDATE, 3000, NULL, NULL ) ;
INSERT INTO emp VALUES ( 9996, 'JAMES' , 'CLERK' , NULL , TO_DATE ( ' 2020/09/01' , 'YYYY/MM/DD ' ) ,
3000, NULL, NULL ) ;
//제약조건을 걸어야
SELECT *
FROM emp ;
--------------------UPDATE 개념
UPDATE : 테이블에 존재하는 데이터를 수정할때
1. 어떤 데이터를 수정할지 데이터를 한정 (WHERE)
2. 어떤 컬럼에 어떤 값을 넣을지 기술
UPDATE 테이블명 SET 변경할 컬럼명 = 수정할 값 [ , 변경할 컬럼명 = 수정할 값 .... ]
[WHERE]
dept 테이블의 deptno 컬럼의 값이 99번인 데이터의 dname 컬럼을 대문자 ddit 로, loc 를 한글 ' 영민'으로 변경
SELECT *
FROM dept;
UPDATE dept SET dname = 'ACCOUNTING' , loc = 'NEW YORK'
WHERE deptno = 10
ROLLBACK;
업데이트 쿼리는
2. 서브쿼리를 활용한 데이터 변경 ( *** 추후 MERGE 구문을 배우면 더 효율적으로 작성할 수 있다.
테스트 데이터 입력
INSERT INTO emp ( empno, ename, job) VALUES (9000, 'brown' , NULL ) ;
9000번 사번의 deptno, job 컬럼의 값을 SMITH 사원의 DEPTNO , JOB 컬럼으로
동일하게 변경 .
UPDATE emp SET deptno = 값1, job = 값1
WHERE empno = 9000 ; -- where 절을 잊어버리면 안됨. 잊어버리면 전체가 다 바뀜 내가
실수한 것처럼
SELECT deptno
FROM emp
WHERE ename = 'SMITH' ;
SELECT job
FROM emp
WHERE ename = 'SMITH' ;
UPDATE emp SET deptno = (SELECT deptno
FROM emp
WHERE ename = 'SMITH' ),
job = (SELECT job
FROM emp
WHERE ename = 'SMITH' )
WHERE empno = 9000;
3. DELETE : 테이블에 존재하는 데이터를 삭제 ( 행 전체를 삭제 )
**** emp 테이블에서 9000번 사번의 deptno 컬럼을 지우고 싶을때 (NULL ) ??
--> DEPTNO 컬럼을 NULL 업데이트 한다.
DELETE [FROM ] 테이블명
[WHERE .....]
예시
emp 테이블에서 9000번 사번의 데이터(행)를 완전히 삭제
DELETE dept
WHERE deptno = 98 ;
SELECT *
FROM emp;
UPDATE , DELETE 절을 실행하기 전에
WHERE 절에 기술한 조건으로 SELECT 를 먼저 실행하여 , 변경, 삭제되는 행을 눈으로 확인해보자
DELETE emp ;;; 쓰지마.... 큰일나
WHERE empno = 7369;
SELECT *
FROM emp
WHERE empno = 7369;
다시 돌아오는 기능 : ROLLBACK ;
DELETE dept
WHERE deptno = 98 ;
SELECT *
FROM dept
delete 절도 논리적으로 표현할 수 있다.
;;쓰지마 delete emp ;
;;쓰지마 TRUNCATE TABLE emp ;
delete는 기록을 남기는데 두번째거는 기록을 남기지 않는다.
DML 구문 실행시
DBMS는 복구를 위해 로그를 남긴다
즉 데이터 변경 작업 + alpah 의 작업량이 필요
하지만 개발 환경에서는 데이터를 복구할 필요가 없기때문에
삭제 속도를 빠르게 하는 것이 개발 효율성에 좋음
로그없이 테이블의 모든 데이터를 삭제하는 방법 : TRUNCATE TABLE 테이블명;
댓글
댓글 쓰기