1. 오라클 설치
오라클 접속 ( 툴 이용 )
2. SQL ( Structured Query Language )
: 데이터베이스 명령어
: 데소문자 구별이 없다. (리터럴 제외, 즉 실제값은 대소문자 구별됨)
: 문장의 끝은 ;
<종류>
가. DML ( Data Manipulation Language )
- insert (데이터 삽입)
- delete (데이터 삭제)
- updata (데이터 수정)
- merge (데이터 병합)
==> 트랜잭션 (transaction) 고려해야 된다.
나. DDL ( Data Definition Language )
- create (객체 생성)
- alter (객체 수정)
- drop (객체 제거)
* 객체 종류( Object )
- 테이블
- 인덱스
- 뷰
- 시퀀스
- 시노님
다. TCL ( Transaction Control Language )
=> 트랜잭션 관련 명령어
- commit
- rollback
라. 권한할당 / 권한취소
- grant (권한 할당)
- revoke (권한 취소)
마. qurey
- select ( 데이터 조회 )
3. 관계형 데이터베이스
=> 데이터를 테이블 형태로 관리하며, 테이블간에 관계를 맺으면서 데이터를 관리하는 방법
열(컬럼)
이름 나이 주소 ==> 컬럼헤딩
-----------------------
홍길동 20 서울 ==> 행(레코드 : 자바의 인스턴스)
이순신 44 ==> 비어있는 컬럼 ( null 값을 갖는다고 표현 )
유관순 18 경기
* 제약조건 5가지
=> 테이블의 올바른 데이터 설정하기 위해서.
가. primary key 제약조건 (PK)
=> 레코드를 식별하기 위해서 특정 컬럼에 지정. (유일하기 때문에)
=> 지정된 컬럼은 반드시 유일한 값을 갖는다.
또한 null값을 갖지 못한다.
=> 중복데이터 저장을 방지할 수 있다.
=> 예> 주민번호, 사원번호, 학번
나. unique 제약조건 (UK)
=> 컬럼에 유일한 값을 저장하기 위한 제약조건.
null값 허용.
다. not null 제약조건 (NN) (개체 무결성)
==> 컬럼에 null 값을 허용 안함.
라. check 제약조건 ( CK )
=> 컬럼에 저장할 데이터의 조건체크해서 저장여부 결정
예> age > 20
마. foreign key 제약조건 ( FK ) (참조 무결성)
=> 다른 테이블의 PK값을 갖거나 또는 null 값을 가질수 있는 제약조건
4. select 문
- 데이터 조회시 사용되는 SQL문.
문법 :
select 컬럼명,컬럼명2
from 테이블명;
select * from 테이블명;
select salary, salary+100 -- 연산 가능
from 테이블명;
* 주의할점은 null을 연산하면 결과는 null이다.
NVL (컬럼값, 초기값)
select 컬럼명 as별명, 컬럼명 별명
from 테이블명;
=> 모든 레코드 대상으로 출력된다.
5. 특정 레코드 검색
select 컬럼명,컬럼명2 ( * : 모든 컬럼)
from 테이블명
where 조건식;
가. 비교연산자
where 컬럼 = 값;
where 컬럼 > 값;
where 컬럼 >= 값;
where 컬럼 < 값;
where 컬럼 <= 값;
where 컬럼 != 값;
* 리터럴 종류
a. 수치
b. 문자 => ' '
c. 날짜 => ' '
==> 리터럴은 대소문자 구분됨
나. 논리연산자
AND, OR, NOT
다. 범위 지정
BETWEEN a AND b ( a부터 b까지 , a 와 b 포함 )
라. IN 연산자
=> 일치하는 값만 출력
예> salary IN(2000,4000,6000);
==> salary = 2000 OR salary= 4000 OR salary = 6000
마. LIKE 연산자
==> 일부분만 일치해도 출력
==> 2가지 심볼(symbol) 사용
% : 없거나 여러문자 대치
_ : 한문자 대치
예> s로 시작하는 사원?
where first_name LIKE 's%';
s로 끝나는 사원?
where first_name LIKE '%s';
s문자를 갖는 사원?
where first_name LIKE '%s%';
s로 끝나는 사원?
where first_name LIKE '____s';
바. null 값 찾기
: IS NULL
예>
where commission_pct IS NULL;
사. NOT 연산자
: 부정
예>
where commission_pct IS NOT NULL;
6. 함수 ( function )
가. 대문자로 변경 : upper(컬러명)
나. 소문자로 변경 : loewr(컬럼명)
다. NVL : null값을 다른값으로 변경
라. 변환함수
수치데이터 문자데이터 날짜데이터
to_char()
=> 문자데이터로 변경
to_number()
=> 수치데이터로 변경
to_data()
=> 날짜데이터로 변경
예>
where salary = '2000';
* 특정 포맷 지정 가능
to_char (hire_data , 'YYYY')
마. 그룹함수
- max(컬럼값)
=> 최대값
- min(컬럼값)
=> 최소값
- sum(컬럼값)
=> 합계
- avg(컬럼값)
=> 평균
- count(컬럼값)
=> 레코드 개수
- count(*)
=>
=======> 결과값이 하나이다. 따라서 다른 컬럼과 같이 사용불가, 같이 사용하려면 일반
컬럼을 그룹으로 묶는다.
바. 날짜 함수
- sysdate
==> 년/월/일
- timestamp
==> 년/월/일 시:분:초.소수점9자리까지
==> 정밀도가 높다.
예 > select sysdate,timestamp
from dual; //daul 은 임시테이블
select 123*234
from dual;
7. 정렬
==> SELECT문의 마지막 문이다.
: 오름차순(기본) : asc,ASC
==> order by 컬럼명 ASC;
order by 컬럼명;
: 내림차순 : desc,DESC
==> order by 컬럼명 DESC;
select
where
groub by
having
order by
* 다중정렬
order by 컬럼명 DESC , 컬럼명 ASC;
-----------------------------------------------------------------------------------------
8.DDL (Data Definition Language)
- create
- alter
- drop
* 스키마 ( schema )
: 특정 사용자가 접속해서 생성한 객체들의 대표이름.
: 사용자 개정명과 동일하다.
스키마라고 하면 계정을 의미한다.
: 스키마는 반드시 소유자가 있다.
다른 스키마는 접속 불가. ( 권한 없기 때문에 )
==> 스키마.테이블명;
예> select * from hr.employee; -- hr 스키마의 employees 테이블 접근
* 객체 종류
- 테이블 : 데이터 저장
- 뷰 : 테이블의 창 , 보안과 편리한 조회
- 시퀀스 : 테이블의 특정 컬럼의 값을 자동으로 증감시키는 객체. 예> 게시판의 글번호
- 인덱스 : 테이블의 검색속도를 향상시키기 위해서, 책의 인덱스
PK,Unique 컬럼에는 자동으로 부여된다.
- 시노님 : 테이블의 별명 예> hr.employees
9. 테이블 생성
문법>
create table 테이블명(
컬럼명 데이터형 제약조건
컬럼명 데이터형 ,
컬럼명 데이터형
);
* 데이터형
가. 수치형 : number(자릿수) ==> 정수
number(자릿수, 소수점자릿수) ==> 실수
예>
age NUMBER(3), ==? 000 ~ 999
나. 문자형 : char( 바이트 ) ==> 캐릭터 --> 고정형( 크기고정 )
예> name char(10) ===> 'aaa' 저장해도 10byte가 크기 지정됨
=> 최대 2000바이트까지
varchar2( 바이트 ) ==> 박캐릭터투, 바차투 --> 가변형 (크기가변)
예> name varchar2(10) ===> 'aaa' 저장해도 3byte가 크기 지정됨
=> 최대 4000바이트까지
다. 날짜형 : data
timestamp
* 실습
가. scott 계정생성 => 관리자만 가능
create user 계정명
identified by 비번;
예>
create user scott
identified by tiger;
나. 권한 부여
==> 접속권한(connect),객체생성권한(resource)
==> 관리자만 부여
grant 권한, 권한2
to 계정;
예>
grant connect, resource
to scott;
* 권한 과 롤 (role)
권한 : 사용자가 특정 작업을 가능하게 할 수 있는것.
권한 종류
a. 시스템 권한 : 관리자만 부여 가능
b. 객체 권한 : 객체를 소유한 사용자가 부여 가능
권한 형태
: create table
: create view
: create index
: drop table
: create session
롤( role )?
==> 권한들의 묶음을 의미.
==> 권한부여 및 취소를 편리하게 하기 위해서....
예> connect, resource
다. person 테이블 생성
--> scott 계정에서
create table person(
num NUMBER(4), -- 숫자
name VARCHAR(10), -- 이름
age NUMBER(3), -- 나이
address VARCHAR(100) --주소
);
* default 키워드 사용
==> null 방지 기능 및 특정값 입력 가능한 방법.
create table person2(
num NUMBER(4), -- 숫자
name VARCHAR2(10), -- 이름
age NUMBER(3) DEFAULT 20, -- 나이
address VARCHAR2(100) -- 주소
);
예 >
--게시판
create table board(
writeday DATE DEFAULT SYSDATE, --작성한 날짜를 항상입력하는게아니라 자동적으로
...
);
10. 데이터 저장
==> insert 문
문법>
insert into 테이블명 ( 칼럼명, 컬럼명2 )
values( 값, 값2 );
=> 컬럼명과 값이 일대일 대응.
지정하지 않은 컬럼에는 null값이 저장됨
예>
insert into person ( num, name, age )
values( 10, '홍길동', 20 );
insert into person ( num, name, age, address )
values( 11, '이순신', 44, '전라');
insert into person ( num, name, age )
values( 12, '유관순', 18, '서울' );
나.
insert into 테이블명
values( 값, 값2, 값3, 값4 );
==> 반드시 테이블의 모든 컬럼에 데이터 저장해야 된다.
또한 반드시 테이블의 컬럼순서대로 저장해야 된다.
예> insert into person
values(15,'이순신',44,'전라');
-- 에러난다.
insert into person
values('이순신',15,44,'전라');
11. 제약조건 ( constraints )
가. primary key
==> 레코드 식별하기 위해서 특정 컬럼에 부여 가능.
==> 자동으로 인덱스 생성된다.
==> 제약조건은?
: 반드시 유일한 값 + null값이 아닌값을 저장해야 된다.
==> 일반적으로 테이블당 하나씩 생성한다.
==> 문법 >
가. 컬럼레벨 지정 방식
==> 컬럼을 지정시 같이 제약조건 지정하는 방식
num NUMBER(4) CONSTRAINT 제약조건이름 PRIMARY KEY
==> 제약조건이름은 '테이블명_컬럼명_PK'형식을 지정.
또는
num NUMBER(4) PRIMARY KEY ==> SYSXXXX 자동으로 지정.
예 >
drop table person purge;
create table person3(
num NUMBER(4) constraint person3_num_PK primary key, -- 숫자
name VARCHAR2(10), --이름
age NUMBER(3) DEFAULT 20, --나이
address VARCHAR2(100) --주소
);
insert into person3 ( num, name, age )
values(10,'이순신',44,);
insert into person3 ( num ,name, age )
values(10,'이순신',44); -- 에러발생(중복값:10)
insert into person3 ( name, age )
values('이순신',44); --에러발생(null)
insert into person3 ( num, name, age )
values(null,'이순신',44); --에러발생(null)
나. 테이블 레벨 지정 방식
==> 컬럼을 모두 지정하고 마지막으로 제약조건 지정하는 방식.
drop table person purge;
create table person4(
num NUMBER(4), -- 숫자
name VARCHAR2(10), --이름
age NUMBER(3) DEFAULT 20, --나이
address VARCHAR2(100), --주소
CONSTRAINT person4_num_PK PRIMARY KEY(num)
);
12. DML( insert, delete, update, merge ) 관련 작업 고려 사항
==> 요청한 작업이 DB에 반영이 안된 상태이다.
언제든지 요청작업을 취소가 가능하다.
==> 요청작업 확정 : commit
요청작업 취소 : rollback
==> 트랜잭션(transaction)과 관련됨.
*트랜잭션 정의?
==> 작업단위
==> '여러 작업들의 묶음'으로서 하나의 작업처럼 처리하는 개념.
예> 계좌이체
500
A --------> B ==>A에서 수정(1000 --> 500 : update)
1000 B에서 사입(null --> 500 : insert)
결과 : 성공시 :
A --------> B
500 500
실패시 :
A --------> B
1000 0
==> 반드시 DML작업은 트랜잭션이 발생된다.
따라서 트랜잭션을 종료시키는 작업이 필요하다.( commit, rollback )