'분류 전체보기'에 해당되는 글 17건

  1. 2012.03.08 SEQUENCE-① 생성, 조회
  2. 2012.03.08 COMMIT과 ROLLBACK
  3. 2012.03.08 DELETE
  4. 2012.03.08 UPDATE
  5. 2012.03.08 INSERT-②
  6. 2012.03.08 채식주의자의 채식코딩 소개
  7. 2012.03.08 데이터입력(INSERT)-①

SEQUENCE는 아주 중요하다!(적어도 내가 보기엔..-_-;)
왜냐하면!! 게시판에 글 번호를 매길때 바로 이 시퀀스를 사용하기 때문이다!

그렇다면 SEQUENCE란 무엇인가?
간단하게, 증가(감소)하는 일련번호를 생성하는 객체라고 보면 된다.
여러 테이블에서 공유가 가능하다고 한다(이 기능(?)은 아직 안 써봐서 모르겠지만.. 1씩 증가하는 시퀀스 하나만 만들어놓으면 여러 게시물 테이블이 이 시퀀스 하나를 공유해서 쓰면 된다는 말이겠지?).

일단 만들어야 쓰든가 말든가 하겠지?

1.SEQUENCE 생성

create sequence sequence
increment by 1
start with 1
maxvalue 100; 

create Sequence sequence //Sequence를 만드는데 이름은 sequence로 한다. 대소문자 구별 없다. 그냥 식별하려고 쓴거임.
increment by 1 //1씩 증가한다는 얘기다. -1이면 1씩 감소하겠지?
start with 1 //sequence의 시작 번호다. 기본값은 1이다.
maxvalue 100; //생성 가능한 시퀀스의 최대값이다.

이 외에도 nomaxvalue,numinvalue,cycle,chche등도 있는데 일단 패스하자. 아직 나도 잘 모르니까 -_-;

2.SEQUENCE 조회

어떤 시퀀스가 있는지 조회하고 싶을때 쓰는 명령문이다. 물론 이크립스의 SQL Explorer에 오른쪽 트리 보면 나오긴 한다.
select min_value, max_value, increment_by, last_number
from user_sequences
where sequence_name='sequence';
아까 만든 시퀀스가 조회될 거다. 마찬가지로 조건 안 쓰면 모든 시퀀스가 검색되니 조심하고. 별로 어렵지 않다.

3.CURRVAL 과 NEXTVAL 함수

얘네들도 아주 중요한 뽀인트 중에 하나다.

 sequence.currval
 sequence.nextval
사용법은 이렇다. 시퀀스이름.currval(혹은 nextval)이라고 입력하면 된다.

조회하고 싶을때는
 select sequence.currval
 from dual;
이렇게 쓰는데 dual은 가상의 테이블(?)이다. 일단 이렇게 알아두자;; 잘 모르겠다;;

CURRVAL은 마지막으로 리턴했던 일련번호를 리턴한다.
이게 뭔말이냐면.. 그냥 현재의 일련번호를 확인한다고 보면 된다.

NEXTVAL은 다음 번호를 생성하는 함수인데, 어떻게 작동하느냐하면
 ① 일련번호를 리턴한다.
 ② 일련번호를 증가(감소)치만큼 증가(감소)시킨다.
이런 식이다.

얘네 둘은 
 ① INSERT,UPDATE문에서 사용한다. 
 ② 서브쿼리,GROUP BY, HAVING, ORDER BY, DISTINCT와 함께 사용할 수 없다.
 ③ 컬럼의 기본값으로 사용할 수 없다.

'SQL 언어 > 시퀀스(SEQUENCE)' 카테고리의 다른 글

SEQUENCE-② 변경, 삭제  (0) 2012.03.12
Posted by Engineer135
,
지금까지 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
,

자바 프로그래밍을 공부한지 이제 겨우 3개월차인 완전 쌩초보 입문자입니다 ㅠ.ㅠ

개인적인 공부를 위해 블로그를 개설하게 됐어요.

그래서 블로그에 있는 내용들은 아주 기초적인 부분임에도 불구하고

틀린 부분도 많을 겁니다. 그냥 이해한대로 쓸 것이기 때문에 ㅋ

보시는 분들은 이점 양해해주시구요 ㅋ

내용은 최대한 알기 쉽게 쓰려고 노력하렵니다 (왜냐면 제가 나중에 제가 쓴글을 보고 이해를 해야하기때문이죠;;)

그럼 이만~ ^^


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
,