-- ◆ 오라클에서 사용되느 자료형

  문자형 : char(크기)      <= 고정크기  , 속도빠름

  

          varchar2(크기)  <= 가변크기  . 속도 조금 느림, 

                             거의 절대적으로 대부분 이것을 사용한다. , 

                             최대크기 4000byte, 한글 : 3byte를 사용한다. 약 1000글자

                             

          clob            <= 대용량 문자용, long object binary, 

                             용량제한이 없다(저장공간이 허용하는 한, 32bitOS 2G, 64bitOS 4G정도) 

                             

  숫자형 : number(길이) 

          number(크기, 소숫점)

          int : number(38)와 동일 , 숫자형은 귀찮으면 그냥 int를 사용한다.

          

  날짜형 : date : 년월일시분초


  

-- ◆ 테이블 생성 예

create table sungjuk

(

  no int, --필드명 자료형순으로 선언

  name varchar2(100),

  kor number(3), -- 0~999까지 저장  (3은 세자리 수 를 의미)

  eng number(3),

  mat number(3)

);


-- ◆ 테이블 구조 확인하기

desc sungjuk;



-- ◆ 데이터 추가 (DML)

insert into sungjuk values(1,'일길동',88,99,77);

insert into sungjuk(name,no,kor,eng,mat) values('이길동',2,88,99,77);


commit; -- insert된 내용을 DB에 적용(저장)

        -- insert, update, delete만 Transaction에 저장된다. (select는 불가)


rollback; -- 현재까지 DML 명령을 취소.




-- ◆ 데이터 수정 (DML)

upadate sungjuk set kor = 100 where no=1;


-- 이런경우 이름이 이길동인 레코다가 모두 수정된다(주의)

upadate sungjuk set kor = 100;



-- ◆  데이터 삭제 (DML)

--           테이블        조건절

delete from sungjuk where no = 2;



-- ◆ 조회

-- * : 모든필드를 추출


-- select 추출필드목록    <= 필드선택

-- from   테이블(뷰)

-- where  조건절         <= 레코드선택 (생략되면 모든 레코드에 적용됨)

select * from sungjuk where no = 1;



-- ◆ 레코드의 값을 합, 평균구하기

select no,name,kor,eng,mat, kor+eng+mat total, (kor+eng+mat)/3 as average;

 -- 출력 결과 예 :  no   name      kor    eng    mat    total     average

                           1    이길동    100,    99,     77,     276,        92


-- ◆ [제약조건] : Constraint

1. 데이터의 무결성을 위해서 사용

2. 제양조건은 테이블정의시 필드에 설정

3. 종류

1) not null : 필수입력

2) unique : 고유해야된다. (도메인내에 동일한 값을 저장할 수 없다)

3) check : 유효성(범위, 값..) <=테이블내에서 검색조건을 부여

4) foreign key : 다른테이블에서 검색조건 검사

5) primary key : not null + unique + index 결합형태

6) default : 기본값이 입력



-- ex1) not null 연습

create table mytab

(

  no int not null ,

  name varchar2(20)

);

insert into mytab values(1,'일길동');

select * from mytab;



-- ex2) unique 연습


create table mytab2

(

  no int not null unique,  -- 빈값과 동일한 값을 허용하지 않는다.

  name varchar2(20) not null

);



-- ex3) check 제약

-- primary key : 테이블당 1개만 존재 (기본키)

create table tab3

(

  no int primary key, -- (not null + unique + index)

  name varchar2(20) not null,

  kor number(3) check(kor>=0 and kor <=100),-- 0~100 사이의 값만 허용

  eng number(3),

  mat number(3)

);


-- ◆ 필드 수정

alter table tb3 modify eng number(3);


-- ◆ 제약조건 추가

alter table tb3 add constraint ck_eng check(eng between 0 and 100);


-- 예)

create table tab4

(

  no int primary key, 

  name varchar2(20) not null,

  sex varchar2(20) check(sex='남자' or sex='여자'), -- 남자, 여자 두가지 값만 받는다.

  job varchar2(30)

);


-- ◆ 제약추가

-- 입력받을 값이 여러가지일 경우 check in을 사용하여 하용값만 받게 한다.

alter table tab4

      add constraint ck_job check( job in('부장','차장','과장','대리','주임','사원') );

      

commit;



-- ◆ select 절 안에서의 연산자와 함수


select  필드1,필드2,..      <=컬럼(필드)선택

from    테이블(뷰)

where   조건절              <=행(레코드)선택 

order by 필드 [asc | desc]  <=정렬방식


--[연산자]-------

산술 : + - * /

관계 : > >=  <  <=  =(같냐?)  !=  <>(같지않냐?)  not(부정)

논리 :  A and B   

        A or  B

      

기타 : 필드 between A and B    <= A ~ B사이냐?

       필드 in(A,B,C)          <=  필드=A ro 필드=B or 필드=C


문자열 결합 : ||

 (|| 의 의미는 문자열 결합을 의미한다)


문자열 유사검색 : 필드 like '%_'

                  _ : 문자 1자리

                  % : 모든

                  

문자열 함수  : substr(문자열,시작,갯수)

         1 2 3 4 5 6 7 8

select '우리나라대한민국' from dual;

                               시작,갯수 

select substr('우리나라대한민국',5,2) from dual;

////////////////////////////////////////////////////////////////




--연산자 <=가상의 임시 테이블(dual)

--         heading(연산결과에 대한 필드명 부여)

--     필드 as alias(별명) 

--     필드    alias(별명) 

--     필드    "escape문자포함"   

select 1+1 as plus ,(2-1) minus1 from dual;

--사원테이블

select * from sawon;

select sabun,saname,deptno,sajob , sapay, sapay*0.1 bonus from sawon;

select saname || '님의 년봉은 '  || sapay || '입니다' as "년봉 설명" from sawon


select sabun 사번,saname 이름,deptno 부서번호,sajob 직위,

       sahire 입사일자,sapay 년봉,samgr 부서장

from sawon

order by deptno ;


--사원테이블 10 부서 직원을 모두 추출

select * from sawon where deptno=10 ;

--사원테이블 남자 직원을 모두 추출

select * from sawon where sasex='남자';

--사원테이블 2000년이후 입사자를 추출 : 2000.1.1 00:00:00

--날짜 표현방법

select * from sawon where sahire >= '2000-1-1';


--입사일자 2000 ~ 2003년인 직원 추출

--         2000.1.1 00:00:00 ~ 2003.12.31 23:59:59

--                             '2003-12-31 00:00:00'

select * from sawon

where sahire>='2000-1-1' and sahire<'2004-1-1';


--날짜에서는 between사용하지 말것(왜? : date타입은 시간까지 고려)

select * from sawon

where sahire between '2000-1-1' and '2004-1-1';


--급여가  2000 ~ 3000사이인 직원 추출

select * from sawon

where sapay>=2000 and sapay<=3000 ;


select * from sawon

where sapay between 2000 and 3000 ;


--10번 부서에서 남자 직원중 직급이 사원을 추출

select * from sawon

where deptno=10 and sasex='남자'  and  sajob='사원';


--10,30번 부서직원 추출

select * from sawon

where deptno=10 or deptno=30 ;


select * from sawon

where deptno in(10,30) ;



--직급이 과장,대리,사원인 직원을 모두 추출

select * from sawon

where sajob='과장' or sajob='대리' or sajob='사원' ;


select * from sawon

where sajob in('과장','대리','사원') ;



--직급이 과장,대리,사원인 직원을 빼고 모두 추출

select * from sawon

where sajob not in('과장','대리','사원') ;


select * from sawon

where not( sajob='과장' or sajob='대리' or sajob='사원') ;


------[문자열 유사검색]---------------------------

-- 성씨가 '최'씨인 직원을 모두 추출

select * from sawon 

where  saname like '최%';


--이름중에 2번째 글자가 '미'인 직원을 추출

select * from sawon

where saname like '_미%'; 


--고객테이블 '서울'사는 고객을 추출

select * from gogek

where goaddr like '서울%';


--고객테이블에서 강서구 거주자 추출

select * from gogek

where goaddr like '%강서구%';


--고객테이블에서 여자만 추출

select * from gogek

where gojumin like '______-2%' 

      or

      gojumin like '______-4%' ;

      

--고객테이블에서 80년대 출생자   추출   

select * from gogek

where gojumin like '8%';


select * from gogek

where substr(gojumin,1,1)='8' ;



--고객테이블에서 계울에 출생한 고객 추출

select * from gogek

where gojumin like '__01%' or 

      gojumin like '__02%' or

      gojumin like '__12%'    ;

      

select * from gogek

where substr(gojumin,3,2)='01' or

      substr(gojumin,3,2)='02' or 

      substr(gojumin,3,2)='12' ;

      

select * from gogek

where substr(gojumin,3,2) in('01','02','12');









+ Recent posts