점심먹고 나서 진행된 수업.
점심 우육면 존맛탱.
 
<14:30 5교시>

점심 먹고와서 처음 한 것은 내가 작성한 sql 코드에서 오타가 나서 명령에 에러가 났을 때, 
작성한 코드가 한 두줄이면 금방 다시 쓴다 쳐도 여러 줄을 타이핑 했는데 에러가 났으면 다시 치기 너무 속상하니까 
SQL > ed
를 입력하고 엔터 쳐서 나온 메모장에서 오타를 수정하고 저장한 다음에
SQL>/
를 입력하면 수정되어 원하는 코드의 결과값이 나온다.
 
이번에는 테이블을 만들 때 제약 조건을 걸 필요성을 알아보면서 
PRIMARY KEY라는 제약조건과 NOT NULL이라는 제약 조건에 대해서 배운다.

■ 테이블을 만들 때 PRIMARY KEY 제약 조건을 걸어야 하는 이유 : NOT NULL & UNIQUE
데이터가 무수히 많이 쌓이는 과정에서 추가되고 수정되고 제거되고, 그러다 보면 순서가 뒤죽박죽되어 새로 저장하게 되는 데이터에 수동으로 부여하는 고유한 식별값이 중복되어 버리는 오류가 생길 수 있는데, 이걸 수동으로 부여하지 않고도
자동으로 중복되는 값이 없고, 그 값이 비어있는 값이 아니도록 부여하라는 명령어가 PRIMARY KEY이다.
PRIMARY KEY 값으로 제약을 걸고 나면 인위적으로 ID가 중복인 값을 넣었을 때 unique constraint라는 오류가 나타나게 된다. 

■ NOT NULL 값을 부여하게 되는 경우
데이터를 저장할 때, 고유 식별값, 이름, 주소 등의 값을 저장하게 된다면 주소는 비어 있는 값을 받아도 괜찮을지 몰라도(집은 없을 수도 있잖아, 라는 아무말을 하셨음ㅋㅋㅋ) 이름이 비어 있으면 너무 주요 정보가 비어 있기 때문에 이름 같은 것은 null 값을 받지 않고 싶다면 제약 조건으로 NOT NULL을 입력하면 된다.
NULL이란 것은 공간이 비어있음 의미하며, 이걸 NULL값으로 채워져 있다고 표현하기도 한다.
입력된 값이 없거나 소실되어 저장해야 할 값을 모를 때 NULL 값으로 채워져 있다고 한다.

위와 같은 조건으로 만들어진 Table이라면 id에는 숫자형 데이터(Number)가 들어가고, 오롯이 고유하고 비어있지 않은 값으로 저장되는 모든 데이터가 식별된다.
name에는 문자형 데이터(VARCHAR2)가 들어가고 사람의 이름은 - 주민등록번호가 달라도 동명이인일 수 있는 것처럼 - id 값이 달라도 이름이 같을 수 있지만, 비어 있는 값은 받고 싶지 않으니까 NOT NULL을 이용해 비어있지는 않지만 같을 수도 있는 값은 받을 수 있도록 제약 조건을 건다.

제약조건을 건 상태에서 다양한 경우를 시도했을 때 나타나는 에러를 모아놓은 삽질이다.
 

처음에 C:\Users\acorn이라고 사용자 폴더에 있는 acorn이 윈도우와 대화하는 창에서 sqlplus와 sql 코드를 사용할 수 있는 계정을 입력한 창에서 host를 입력하면 다시 윈도우와 대화할 수 있는 창으로 이동하고, 여기서 다시 exit을 누르면 sql 창으로 돌아오게 된다.
 
 
 
 
<15:30 6교시>

처음 명령 프롬트를 사용한 상태에서
cd와 스페이스바로 파일의 경로를 입력하면 입력된 경로로 이동된다.
그리고 이동된 경로에서 dir을 입력하면 그 경로에 구성된 파일들이 모두 보여진다.
이 경로에서 chorme.exe를 입력하면 직접 실행할 수도 있다. (짱신기)

맨처음 나타나는 경로는 내 PC >사용자 >acorn의 폴더에 있는 녀석들이고,
우리는 이 중에서 sqlplus라는 실행파일을 불러오곤 했던 것이다.
 
■ SPOOL(스풀) 뜨기
우리가 수업 시간에 입력한 sql 코드를 모두 드래그해서 Ctrl C+V 하여 메모장에 저장할 수도 있지만,
명령 프롬프트가 가지고 있는 기능 중 SPOOL 뜨기라는 것이
SPOOL 시작 지점부터 지정한 txt 파일(아래의 스크린샷에서는 hello.txt)에 SPOOL OFF로 닫기 전까지의 코드를 지정한 txt파일에 담아주는 기능을 가지고 있다.

그래서 스풀 뜨기를 하고 나서 스풀을 뜬 경로를 직접 찾아 hello.txt 파일을 확인할 수도 있고,
바로 dir을 입력해 디렉터리 파일들에서 확인할 수도 있다.

 
스풀에 담긴 내용을 불러오고 싶으면
명령 프롬프트에 바로 type 텍스트파일이름.txt(아래의 스크린샷에서는 type hello.txt)를 입력하면 스풀에 담겼던 내용이 바로 불러와진다.

 
 
■ Scott 계정으로 연습하기
C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin 위치에는 scott.sql이라는 파일이 있다.
이 파일은 우리가 한동안 데이터베이스를 다루고 select 명령문을 다양하게 활용하며 배우는 데에 필요한 예제 테이블을 다 갖추고 있는 sql 계정이어서 추가해서 배우는데, 그 방법은 골뱅이를 누르고 drag&drop하여 추가하면 바로 scott 계정이 생성된다.

 

그래서 이제 새로운 창에서 scott이라는 아이디와 TIGER라는 비밀번호로 로그인한다.
scott.sql에 담긴 표는 사원들의 번호와, 이름과, 직책과, 직속상관과, 입사일, 임금, 성과금, 부서번호가 있는 emp 표와 부서번호와 부서이름과 부서의 위치가 있는 dept표와 급여 등급과 급여의 최소값, 급여의 최대값이 있는 salgrade의 표가 모두 만들어져 있는 코드 모음이다.
아래는 emp표의 모든 것을 참조하여 선택한 내용을 보여준다.

TURNER의 성과금이 0원인데, 이녀석이 데이터베이스를 해킹했다 가정하고 5000달러 성과금을 넣어주는 코드를 만드는데 삽질을 했다.

옆에 앉은 수강생의 도움으로 TURNER의 성과금을 5000달러로 수정하는 것에 성공할 수 있었다.
UPDATE 표이름 SET 바꿀내용=에대입하고 조건 칼럼=고유식별번호;
로 입력하면 된다.

그래서 TURNER가 완전범죄를 저지르기 위해서는 5000으로 바꿔서 성과금을 받기 위해 Commit하여 저장하고, 성과금을 받고 나서 다시 성과금을 0으로 바꾼 내용을 commit해야 한다. (실제로 따라하지 마시오 범죄입니다)

철저하게 DB 조작하고 원래대로 돌리기... (ㄹㅇ실제로는 하면 안돼요)
 
 
<16:30 7교시>

 
위에는 depno이라고 오타내서 오류난거는 삽질이었다
일단 우리는 아직 select 문 한 줄로 두 개의 테이블을 참조해서 데이터를 찾아내는 문구를 배우지 않았으니까
노가다로 한 번 select 문 돌리고, 또 한 번 노가다로 select 문 돌려서 Turner가 속한 부서의 이름을 알아내야 한다.

이번에는 ALLEN이 근무하는 부서의 위치를 조회해 보기에 대해서 삽질한 내용과 답을 찾은 내용이다.
삽질한 이유는 일단 ename 칼럼을 empname이라고 알고 있던거.
오라클에서 명령어는 대소문자 상관 없지만, 조회되는 데이터의 값은 대소문자, 데이터 종류의 구별(문자열이면 따옴표 쓰기)을 확실히 해줘야 한다.

 

select 로 선택한 결과도 하나의 테이블로 생각한다. (SELECT로 골라낸 결과 값을 하나의 임시 테이블로 생각하기)
그런 관점에서 from 절 안으로 들어갈 수 있다.
더 자세한건 추후에 다룬다고 한다.

fron emp 에서 where 절로 필요 없는 row를 제거해내고, select로 칼럼만 선택해서, 필요한 row와 select로 추려진 칼럼만 남겨서 새로운 테이블 처럼 만들어지는 효과가 있음.

<17:30 8교시>
오늘 한 거 연습하며 정리하기
1. 관리자 계정 생성, 권한 부여 방법 숙지
2. 테이블 만들기(필요하다면 제약 조건 만들기)
3. insert, update, delete 하기
4. 간단한 select 하기
5. emp, dept, salgrade의 테이블 명과 칼럼명 외우기!!!!!!

+ Recent posts