-- ◆ 오라클에서 사용되느 자료형
문자형 : 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');
'Programming > Oracle' 카테고리의 다른 글
[6일차] 뷰(View) (0) | 2013.08.27 |
---|---|
[5일차-2] 날짜함수 정리 (0) | 2013.08.26 |
[5일차-1] 통계_그룹함수 (0) | 2013.08.26 |
sqlDeveloper로 DB사용자 추가 하기 및 sql 질의 싱행해 보기 (0) | 2013.08.21 |
sqlplus에서 유저 생성 시키기 예 (0) | 2013.08.20 |