본문 바로가기

프로그래밍/네트워크 프로그래밍

네트워크 프로그래밍-DB(savepoint,column format,연산자,like, is null, rownum)

savepoint

이전에 배운 rollback 명령어의 단점은 입력했던 모든 명령어가 무위로 돌아간다는 것이다.

이때 savepoint를 사용하면 특정 지점을 저장하여 해당 지점으로 되돌릴 수 있다.


SQL> savepoint aaa;

해당 시점을 aaa라는 변수에 저장해라.

SQL> rollback to aaa;

만약 되돌리고 싶다면 rollback 명령어로 해당 시점으로 되돌리는 것이 가능하다.


column format

스키마에서 설계된 자리점을 조정하는 명령어이다.

문자형은 column [attribute 명] format a(숫자)를 쓰고

숫자형은 column [attribute 명] format 9999와 같은 형식으로 쓰인다. 말이 어려우니 빨리 예시로 넘어가도록 하겠다.


school table을 조회해본다. 여기서 저 ------에 주목해서 보면된다.


column student_name format a14; 명령어를 입력 후에 student_name의 - 표시가 14개로 바뀐 것을 확인 가능하다.

SQL> column student_name format a14;

student_name의 -표시를 14개까지만 만들어라



이번엔 숫자형 format 명령어를 입력해보면

SQL> column student_score format 999999999999999999999999;

위와 같은 결과가 출력되는 것을 확인 가능하다.




where과 연산자의 조합

 where은 이전에 말했듯이 특정 조건을 붙일 때 사용한다.


SQL> delete from school where student_name='홍길순';

이름이 홍길순인 레코드를 삭제해라.

SQL> select * from school where student_name='홍길순';

이름이 홍길순인 레코드를 조회해라(모든 attribute)


이렇듯 이런 where의 조건과 특정 연산자를 결합하여 더 제한된 조건을 생성이 가능하다.


where+between 연산자는 특정 조건 사이에 있는 데이터 추출이 가능하다.


SQL> select * from school where student_score between 300 and 400;

school 테이블에서 student_score가 300과 400사이인 레코드를 출력해라.

between은 and 명령어를 사용해서 나타내는 것이 가능하다.

SQL> select * from school where student_score>=300 and student_score<=400;

위의 between 연산자와 똑같은 의미이다.


where in 연산자를 사용하면 해당 조건을 만족하는 모든 데이터를 추출하는 것이 가능하다.

SQL> select * from school where student_name in ('홍길순', '김철수');

school 테이블에서 student_name이 홍길순이거나 김철수인 사람의 레코드를 출력해라

in 명령어는 or 명령어를 사용해서 나타내는 것이 가능하다.

SQL> select * from school where student_name='홍길순' or student_name='김철수';

위의 in 연산자와 똑같은 의미이다.


where과 like

like는 특정 문자열을 추출하는 조건을 만들고 싶을 때 사용한다.


like+[문자열]%은 해당 문자열로 시작하는 모든 조건을 추출한다.

반대로 like+%[문자열]는 해당 문자열로 끝나는 모든 조건을 추출한다.

like+%[문자열]%는 해당 문자열이 포함되는 모든 조건을 추출한다.


like+[문자열]_ 은 해당 문자열로 시작하며 해당 문자열 뒤에 임의의 문자 하나가 오는 것을 뜻한다.

반대로 like+_[문자열]는 해당 문자열로 끝나며 해당 문자열 앞에는 임의의 문자 하나가 오는 것을 뜻한다.

like+_[문자열]_는 해당 문자열이 포함되어있으며 해당 문자열 앞 뒤로 1글자씩 오는 것을 뜻한다.


SQL> select * from school where student_name like '홍%';

해당 명령의 결과로 홍길순이 출력된다.

해당 명령어는 school 테이블에서 student_name이 홍으로 시작하는 레코드를 출력하라는 뜻이다.

 

SQL> select * from school where student_name like '홍_';

해당 명령의 결과로 아무것도 출력되지 않는다.
해당 명령어는 school 테이블에서 student_name이 홍으로 시작하며 뒤에 한글자만 더 붙는 레코드를 출력하라는 뜻이다.

SQL> select * from school where student_name like '홍___';
-를 3개입력해주어야 비로소 이름이 출력된다.(원래는 2개만 입력해야 제댜로 출력되는게 정상이지만 한글이라 _를 3개 입력해줘야하는 것 같다.)


where과 is null
is null과 where이 합쳐지면 특정 attribute가 null 값일 때만 추출하는 것이 가능하다.

SQL> select * from school where student_score is null;
school 테이블에서 student_score가 null값인 레코드를 출력하라는 뜻.
student_score가 null 값인 레코드가 없다면 아무 것도 출력되지 않는다.

rownum
rownum은 출력 시 행번호도 같이 출력해주는 명령어이다.

SQL> select rownum, student_id from school;
school 테이블의 모든 student_id를 출력하라, 이때 행번호도 같이 출력하라는 뜻.
이때 rownum 다음에는 *와 같은 기호는 불가능하다. 따라서 직접 하나하나 출력하고싶은 attribute를 입력해줄 필요가 있다.