'SQL 언어/데이터 조작어(DML)'에 해당되는 글 5건

  1. 2012.03.08 COMMIT과 ROLLBACK
  2. 2012.03.08 DELETE
  3. 2012.03.08 UPDATE
  4. 2012.03.08 INSERT-②
  5. 2012.03.08 데이터입력(INSERT)-①
지금까지 insert,update,delete로 행한 작업들은.. 아직 완전히 수행된 게 아니다!
왜냐하면 지금까지 한 작업들은 메모리에만 저장되어 있을 뿐, 하드디스크에 영구적으로 저장된 것이 아니기 때문이다.

예를 들어, DataBase에 Student 테이블이 저장되어있다.
사용자가 이 테이블에 insert,update,delete등을 수행하기 위해 DataBase에 접속한다고 치자.
그러면 DBMS(이건 뭐지?데이타베이스메니지먼트시스템인가?맞는 듯?)에 Student테이블의 복사본이 만들어지고,
사용자는 실질적으로 이 복사본에 삽입,수정,삭제를 하고 있는 것이다.
그러므로 이러는 동안엔 하드디스크에 저장된 DataBase의 Student테이블의 내용은 전~혀 변하지 않는다.
사용자가 작업한 내용은 오직 메모리에만 반영되고 있을 뿐이다.
그렇다면 이 내용을 하드디스크에 저장하려면 어떻게 하면 될까?

바로 COMMIT 명령어가 그 역할을 수행하는 거지!

그렇다면 ROLLBACK은 뭐?
COMMIT하기 전에는 삽입,수정,삭제한 내용이 메모리에만 저장되어 있다고 했는데,
ROLLBACK은 이렇게 메모리에 반영된 내용들을 지울때(혹은 되돌릴때?) 쓰는 명령어다.
영어를 봐라 roll back! 되돌아가다... 뭐 이런 어감이지 않은가?
메모리의 내용들을 되돌리는 것이기 때문에, COMMIT을 실행한 후(디스크에 변경 내용 저장됨)에는 소용이 없다. 
 
정리하면

COMMIT: 지금까지 작업한 내용을 영구적으로 디스크에 저장!
ROLLBACK: 변경된 작업 내용을 전부 취소!


'SQL 언어 > 데이터 조작어(DML)' 카테고리의 다른 글

DELETE  (0) 2012.03.08
UPDATE  (0) 2012.03.08
INSERT-②  (0) 2012.03.08
데이터입력(INSERT)-①  (0) 2012.03.08
Posted by Engineer135
,
이제 마지막 단계인 데이터 삭제 방법을 알아보자.

1.단일 행 삭제
delete from student
where studno=1;
studno가 1인 학생의 데이터를 삭제한다. 여기서도 update와 마찬가지로 조건식을 꼭 써줘야 한다.
안그러면 student 테이블의 정보가 모두 날아가버린다.

2.서브쿼리를 이용한 삭제
자.. 먼저 서브쿼리를 이용한 삭제는 언제 쓰는지 한번 알아보자.
'학생 테이블에서 언론정보학과에 소속된 학생을 모두 삭제하라'는 예제가 있다.
여기서 문제는 학생 테이블에는 학과번호 컬럼은 있지만, 학과명 컬럼은 없다는 것이다.
대신 확과 테이블에는 학과명과, 학과번호가 모두 존재한다. 그렇다면 방법이 떠오르지 않는가? 이럴때 서브쿼리를 이용하면 된다.
delete from student
where deptno=(select deptno
                      from department
                      where dname='언론정보학과');
자, 이렇게 하면 서브쿼리에서
department테이블의
dname이 언론정보학과인 레코드의
deptno컬럼에 저장된 값이 조회되고, 이 값이 student의 deptno 컬럼 값에 들어가게 된다.
이렇게 다른 테이블의 내용과 join해서 값을 조회할 필요가 있을 때! 서브쿼리를 사용하는 것이다.
join이 무엇인지는 다음에 또 포스팅하기로 하고 일단 여기까지!


'SQL 언어 > 데이터 조작어(DML)' 카테고리의 다른 글

COMMIT과 ROLLBACK  (0) 2012.03.08
UPDATE  (0) 2012.03.08
INSERT-②  (0) 2012.03.08
데이터입력(INSERT)-①  (0) 2012.03.08
Posted by Engineer135
,
이번에는 입력된 데이터를 수정하는 update에 대해 알아보자.

1.단일행 데이터 수정 
 update student
 set studno=7
 where name='찰스';
간단하기도 하지.
update 테이블명 set 컬럼=원하는값 where 조건식!
업데이트문에서 중요한 거은 조건문을 꼭 써야한다는 거다.
만약 조건문을 쓰지 않으면? 모든 학생의 studno컬럼의 값이 7이 되는 불상사가 일어나겠지!?
그리고 set는 여러컬럼을 ,로 구분해서 계속 쓸 수 있다.
예를 들어 set studno=7, name='버블', ~ 이런 식으로 말이지.

2.서브쿼리를 이용한 데이터 수정
update student
set (grade,deptno)=(select grade,deptno
                           from student
                           where studno=1)
where studno=2;
studno가 1인 학생의 grade와 deptno를 조회해서 studno가 2인 학생의 grade와 deptno에 반영하라는 뜻이다.
즉 2번학생의 grade,deptno를 1번학생과 동일하게 수정하라는 말이다.
참 쉽죠~?

'SQL 언어 > 데이터 조작어(DML)' 카테고리의 다른 글

COMMIT과 ROLLBACK  (0) 2012.03.08
DELETE  (0) 2012.03.08
INSERT-②  (0) 2012.03.08
데이터입력(INSERT)-①  (0) 2012.03.08
Posted by Engineer135
,

NULL의 입력

데이터를 입력하는 시점에서 해당 컬럼의 값을 모르거나 확정되지 않았을 때는 null값을 입력해야 한다.
null을 입력하는 방법에는 두가지가 있다.

1.묵시적인 방법
 insert into절에 해당 칼럼의 이름과 값을 생략
 단, 해당 칼럼에 not null제약조건이 지정된 경우에는 불가능!

 insert into department(deptno,dname)
                     values(300,'컴퓨터공학과');
이와 같은 경우 deptno,dname 칼럼을 제외한 나머지 칼럼은 자연스럽게 null이 입력된다.

2.명시적인 방법
 values 절의 칼럼 값에 null 혹은 '' 라고 쓴다.
 insert into department
 values(301,'에너지절약학과','',null);
이 경우에는 '',null로 입력한 부분이 null값을 갖는다.


'SQL 언어 > 데이터 조작어(DML)' 카테고리의 다른 글

COMMIT과 ROLLBACK  (0) 2012.03.08
DELETE  (0) 2012.03.08
UPDATE  (0) 2012.03.08
데이터입력(INSERT)-①  (0) 2012.03.08
Posted by Engineer135
,
  
SQL언어는 DB를 검색(조회)하고, 데이터 삽입, 수정, 삭제 등을 하는 언어라고 할 수 있다.

그중에서도 먼저 입력하는 방법에 대해 포스팅을 하고자 하는데.. 이유는 다른 것보다 쉬우니까 ㅋ

INSERT

테이블에 데이터를 입력하기 위해선 insert를 쓰면 된다.

크게 두가지 방법이 있는데

 1. 단일행 입력 - 한번에 하나의 행(레코드)를 테이블에 입력

가장 기본적인 입력방법이다. 사용법은
 
 insert into student (studno,name,grade,deptno)
                 values(2004,'찰스',3,101);

이게 끝이다. 
student 는 테이블이름이고
(studno,name,grade,deptno)는 컬럼리스트고
values 쓰고 컬럼에 대응하는 값들을 괄호안에 입력해주면 된다.

이렇게 하면 student란 테이블에 studno가 2004,name은 찰스,grade는 3,deptno는 101인 행(레코드)가 추가된다.

이중에서 (studno,name,grade,deptno)는 생략이 가능하다. 
이런 경우 테이블 생성시 정의한 칼럼의 순서와 동일한 순서로 values를 입력하면 된다.
그리고 입력시 주의 사항은 글자와 날짜의 경우 반드시 ''안에 써야한다. '찰스' <-이런 식으로. 숫자는 그냥 써도 OK.

 2. 다중행 입력 - 서브쿼리를 이용해 한번에 여러 행을 동시에 입력

 insert into student (studno, name, deptno)
                select (empno,ename,deptno)
 from emp
 where deptno>=20;

서브쿼리는 이렇게 생긴 건데 서브쿼리에 대한 자세한 내용은 다음에 포스팅하겠다.
하나하나 살펴보면,

insert into student (studno, name, deptno)
                select (empno,ename,deptno) //values가 아닌 select를 쓴다. empno,ename,deptno 컬럼에 있는 데이터를 
                                                               student 테이블의 studno,name,deptno에 입력하겠다는 얘기이다. 
from emp // empno,ename,deptno컬럼은 emp라는 테이블에 있고,
where deptno>=20; // 조건은 deptno가 20이상인 행(레코드)들만 대상으로 한다.

이렇게 하면 여러개의 행을 동시에 입력할 수 있다.
물론 데이터 형식이 같아야 하겠지??

오늘은 여기까지. (계속 수정하고 업데이트할 예정입니다~)

'SQL 언어 > 데이터 조작어(DML)' 카테고리의 다른 글

COMMIT과 ROLLBACK  (0) 2012.03.08
DELETE  (0) 2012.03.08
UPDATE  (0) 2012.03.08
INSERT-②  (0) 2012.03.08
Posted by Engineer135
,