[제약조건]: Constraint

1.데이터의 무결성을 위해서 사용(Data Integrity)

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

3.종류

  1) not null  : 필수입력

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

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

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

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

  6) default   : 기본값이 입력


--1] not null 연습

--drop table tb1; --테이블 삭제


create table TB1

(

   no int not null ,

   name varchar2(20) not null

)

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

--insert into tb1(no) values(2);

--insert into tb1(name) values('이길동');

select * from tb1;


--2] unique 연습

create table tb2

(

  no int not null unique,

  name varchar2(20) not null

)

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

--insert into tb2 values(1,'이길동'); -- X

insert into tb2 values(2,'일길동');


select * from tb2;

--테이블 구조확인

desc tb2;

desc user_constraints;

--제약조건 확인

select constraint_type,constraint_name from user_constraints

where table_name='TB2';


select * from user_constraints where table_name='TB2';


--3[check제약]

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

create table tb3

(

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

   name varchar2(20) not null,

   kor  number(3) check( kor>=0 and kor<=100),

   eng  number(3),

   mat  number(3)

)

--필드 수정                                eng>=0 and eng<=100동일 

alter table tb3 modify eng number(3);

--제약조건 추가

alter table tb3 

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

alter table tb3 

      add constraint ck_mat  check(mat between 0 and 100);



insert into tb3 values(1,'일길동',55,77,88);

--insert into tb3 values(2,'이길동',200,55,77); --check제약 위반

insert into tb3 values(2,'이길동',88,30,500);


delete from tb3 where no=2;

select * from tb3;


create table tb4

(

   no int primary key,

   name varchar2(20) not null,

   sex  varchar2(20) check(sex='남자' or sex='여자'),

   job  varchar2(30)

)

--제약추가                    -- job='부장' or job='차장' or job='과장' .....

alter table tb4

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


insert into tb4 values(1,'일길동','남자','대리');

--insert into tb4 values(2,'이길동','남','대리');

--insert into tb4 values(2,'이길동','여자','대 리');

--insert into tb4 values(2,'이길동','여자','대리 ');


delete from tb4 where no=2;

select * from tb4;

commit;


--4 [default] :기본값

create table tb5

(

   no int primary key,

   name varchar2(20) not null,

   sex  varchar2(10) default '남자'  --입력되지 않으면 기본값

)


insert into tb5 values(1,'일길동','여자');

insert into tb5(no,name) values(2,'이길동');--입력하지 말던지

insert into tb5 values(3,'삼길동',default); --default

insert into tb5 values(4,'사길동','남자',20);

--필드추가

alter table tb5  add age int default 0;


select * from tb5;


--5 [foregin key]

--부서테이블

create table dept

(

   dno   int primary key,

   dname varchar2(30),

   loc   varchar2(30)

)


insert into dept values(10,'인사부','205');

insert into dept values(20,'영업부','305');

insert into dept values(30,'경리부','505');


select * from dept;


--직위테이블

create table job

(

   job_no int primary key, --직위번호

   job_name varchar2(20),  --직위명

   job_pay  int            --급여 

)


insert into job values(100,'부장',3000000);

insert into job values(101,'차장',2500000);

insert into job values(102,'과장',2000000);

insert into job values(103,'대리',1800000);

insert into job values(104,'주임',1500000);

insert into job values(105,'사원',1000000);


select * from job;


create table emp

(

  emp_no    int primary key, --사번

  emp_name  varchar2(30),

  dno       int   references dept(dno)

)


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

insert into emp values(2,'이길동',40);


alter table emp add job_no int;

--외래키 설정

alter table emp

   add constraint fk_job_no foreign key(job_no) references job(job_no);

--desc emp;

update emp set job_no=105 where emp_no=1;


insert into emp values(3,'삼길동',20,103);

--insert into emp values(4,'사길동',20,303);


select * from emp;


'Programming > Oracle' 카테고리의 다른 글

[4일차-2] select_연산자_함수  (0) 2013.08.27
[4일차-1] SubQuery(하위쿼리)  (0) 2013.08.27
[2일차] 테이블생성 및 DML 기초  (0) 2013.08.27
[1일차] 계정생성  (0) 2013.08.27
[6일차] 뷰(View)  (0) 2013.08.27

테이블생성 및 DML 기초


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

문자형: char(크기)     <= 고정크기  char(20)     'abc' =>전체공간 20개 잡힌다.

        varchar2(크기) <= 가변크기  varchar2(20) 'abc' =>전체공간 3개 잡힌다.

                       <= 최대크기  4000  한글=>3byte

        clob           <= character large object binary(문자 대용량) 

                       <= 용량제한 없다(저장공간이 허용한는 한:2G~4G)

숫자형: number(길이)                       

        number(전체크기,소숫점)

        int  == number(38) 와 동일

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

        

--테이블 생성 : 데이터를 저장할 수 있는 물리적구조(DDL)

create table sungjuk

(

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

    name   varchar2(100),

    kor    number(3), --  0 ~ 999까지 저장

    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,99,44,66);

--null

insert into sungjuk(no,kor,eng,mat) values(3,88,44,55);



commit; -- insert된 내용을 DB에 적용(저장) <= insert,update,delete만 Transaction에 저장

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


--[데이터 수정(DML)]

--      테이블    필드=수정값      조건절

update sungjuk set kor = 100     where no=1;


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

update sungjuk set mat = 100     where name='이길동'; 


--[데이터 삭제(DML)]

--          테이블        조건절

delete from sungjuk where no = 2;



--조회

-- * : 모든필드를 추출


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

from    테이블(뷰)

where   조건절        <=레코드선택 (생략되면 모든레코드)

       

select * from sungjuk;


select no,name,kor,eng,mat ,

       kor+eng+mat tot,         --계산(연산)필드

       (kor+eng+mat)/3 as ave

from sungjuk;

'Programming > Oracle' 카테고리의 다른 글

[4일차-1] SubQuery(하위쿼리)  (0) 2013.08.27
[3일차] 제약조건  (0) 2013.08.27
[1일차] 계정생성  (0) 2013.08.27
[6일차] 뷰(View)  (0) 2013.08.27
[5일차-2] 날짜함수 정리  (0) 2013.08.26

계정생성



참고사이트 : oracleclub.com


범위주석

주석문은 실행 안된다.

*/


-- 1라인 주석


-- 1.사용자 계정 생성 쿼리(DDL)

--          계정               암호

-- create user 유저명 test identified by 비밀번호;




-- 2.생성된 계정에 권한 부여(DCL)

-- connect  :접속권한

-- resource :테이블를 생성할 수 있는 권한

-- create view : 뷰를생성할 수 있는 권한

-- grant connect,resource,create view  to test;



-- 접속사용자 변경

-- connect hr/1111

-- conn    hr/1111

-- conn    test/test


-- 현재 접속자 확인

-- show user;



-- 현재 실행경로 확인

-- host

-- sqlplus 복귀

-- exit



'Programming > Oracle' 카테고리의 다른 글

[3일차] 제약조건  (0) 2013.08.27
[2일차] 테이블생성 및 DML 기초  (0) 2013.08.27
[6일차] 뷰(View)  (0) 2013.08.27
[5일차-2] 날짜함수 정리  (0) 2013.08.26
[5일차-1] 통계_그룹함수  (0) 2013.08.26

뷰(View)

1.가상의 테이블 : 사용시는 테이블과 동일하게..

2.장점

 1) 편리성 : 여러번 반복되는 긴 명령어를 간단히 사용할 수 있다.

 2) 보안성 : 주민번호등 특정한 정보가 노출되지 않게 할 수 있다.

3.뷰 : SQL 명령이 저장된다.  

       cf) batch화일과 유사

4.조회목적으로만 사용(select)       

5.inline view : select문내에 포함된 뷰(임시뷰)


desc user_views

--뷰내용 확인하기

select text from user_views where view_name='GOGEK_VIEW_BIRTHDAY'


--남자직원출력

select * from sawon where sasex='남자'


--뷰로 생성

create or replace view sawon_view_man

as

  select * from sawon where sasex='남자'


--뷰사용

select * from sawon_view_man


--여자만 뷰로 생성

create or replace view sawon_view_women

as

  select * from sawon where sasex='여자'

--뷰사용

select * from sawon_view_women



--사원테이블

create or replace view sawon_view_sahire

as

  select 

     sabun,saname,sasex,deptno,sajob,sahire,samgr,sapay,

     to_char(sahire,'YYYY') 입사년도,

     to_char(sahire,'MM') 입사월,

     to_char(sahire,'DD') 입사일

  from sawon


--편리성

select * from sawon_view_sahire


--고객테이블

select * from gogek

update gogek set gojumin='021212-3123456' where gobun=15;


create or replace view gogek_view_birthday

as

  select gobun,goname,goaddr,godam,

         case

            when substr(gojumin,8,1) in(1,3) then '남자'

            else '여자'

         end as gosex,

         to_number(substr(gojumin,1,2)) + 

         ( 

           case 

             when substr(gojumin,8,1) in(1,2) then  1900

             else 2000

           end

         ) 

         as 출생년도,

         to_number(substr(gojumin,3,2)) 월,

         to_number(substr(gojumin,5,2)) 일

  from gogek


--보안성 : 주민번호정보가 노출되지 않는다..

select * from gogek_view_birthday


--test1에게는 gogek_view_birthday에 대한 select권한만 부여


grant select on gogek_view_birthday to test1


-- inline view

--case 1

select sabun,saname,sapay,(select max(sapay) from sawon) 최대급여 from sawon;


--case 2 : inline

create or replace view sawon_view_rank

as

  select sabun,saname,rank() over(order by sapay desc) as rank,sapay from sawon

--급여순위 5위출력

select * from sawon_view_rank where rank <=5


select * from 

  (select sabun,saname,rank() over(order by sapay desc) as rank,sapay from sawon)--inline view

where rank<=5  


--case 2

select * from 

(select s.* ,rank() over(order by sapay desc) as rank 

  from

   (select * from sawon) s -- alias명 :임시테이블(뷰)명 

 )

where rank between 1 and 10



--고객테이블에서 나이순 번호를 매기기

select * from gogek_view_birthday

order by 출생년도



날짜형 함수 정리


// 강의 내용 정리 --------------------------------------------------------------------------

//-----------------------------------------------------------------------------------------


-- sysdate는 현재 날짜를 출력한다.

-- '현재날짜'는 임시 컬럼, dual은 임시 테이블 예약어다.

select sysdate 현재날짜 from dual;


-- 어제, 현재, 내일의 날짜 구하기

select sysdate-1 어제, sysdate 현재, sysdate+1 내일 from dual;


-- 다음달, 지난달 구하기 --

-- add_months()함수가 지난달, 다음달, 또는 특정의 달을 구한다.

select sysdate 현재, add_months(sysdate, 1) 다음달,

                    add_months(sysdate,-1) 지난달 from dual;



-- 특정 날짜 부터 현재까지의 개월 수 구하기 --

-- months_between()함수를 사용하면 특정 구간의 개월 수를 구할 수 있다.

select months_between(sysdate, '2000-1-1') from dual;

-- 소수점 제거 floor 함수를 사용.

select floor(months_between(sysdate, '2000-1-1')) from dual;


-- 날짜형을 문자로 출력하기 --

-- YYYY, MM, DD, HH, MI, SS 서식을 이용하여 문자형으로 출력할 수 있다.

select to_char(sysdate, 'YYYY') 년,

       to_char(sysdate, 'MM') 월 from dual;

       

-- 실제 테이블(sawon)에 있는 사원의 입사년도(sahire컬럼)의 입사년도만 출력. 

select to_char(sahire, 'YYYY') 입사년도 from sawon;



-- 나머지 자세한 사항은 아래를 내용을 참고하도록 한다.


// 강의 내용 -------------------------------------------------------------------------------

//-----------------------------------------------------------------------------------------


날짜 + n : 일수를 더한다


add_months(날짜,숫자) :월수 더한다(빼기도 한다)

months_between(날짜1,날짜2)


--현재 시스템 날짜 구하기

select sysdate 현재,sysdate+1 내일, sysdate-1 어제 from dual;


select sysdate, add_months(sysdate,1) 다음달,

                add_months(sysdate,-1) 지난달 from dual;

--개월수 구하기                

select months_between(sysdate,'2000-1-1') from dual;


--나 얼마나 살았냐?(개월단위)

select months_between(sysdate,'1980-1-1') 개월 from dual;


select * from sawon;


--사원테이블에서 근무월수를 알고 싶다

select sabun,saname,sahire, 

       floor(months_between(sysdate,sahire)) 근무월수,

       trunc(months_between(sysdate,sahire),0) 근무월수1,

       floor(months_between(sysdate,sahire)/12) 근무년수,

       floor(mod(months_between(sysdate,sahire),12)) 잔여월수

from sawon;


-- to_char(날짜,'YYYY')

select 

       to_char(sysdate,'YYYY') 년 ,

       to_char(sysdate,'MM') 월 ,

       to_char(sysdate,'DD') 일 ,

       to_char(sysdate,'HH') 시 ,

       to_char(sysdate,'MI') 분 ,

       to_char(sysdate,'SS') 초 

from dual;


select * from sawon;


--입사년도별 인원수 구하기

select to_char(sahire,'YYYY') 입사년도 from sawon;


select to_char(sahire,'YYYY') 입사년도,count(*) from sawon

group by to_char(sahire,'YYYY')

order by to_char(sahire,'YYYY');


--입사년대별 인원수


select floor(to_char(sahire,'YYYY')/10) || '0' 입사년대 from sawon;


--  입사년대    인원수

    1980          3

    1990          8

    2000


--통계함수 / 그룹함수

count(필드) <= null 포함시키지 않는다

count(*)    <= 전체계산 


sum(필드) : 합

avg(필드) : 평균

min(필드) : 최소값

max(필드) : 최대값


--그룹통계

select 그룹을 짓을 필드,통계함수 from 테이블

group by 그룹을 짓을 필드

having   조건(그룹합수에 대한 결과) 



--산술처리 함수

ceil(실수)   :  10.5 =>

floor(실수)  :

round(값,소숫점자릿수) : 


select ceil(10.5),floor(10.5),  

       10/6,round(10/6,1) 반올림, trunc(10/6,1) 잘라낸다 

from dual;



select * from sawon

--사원테이블에서 전체사원수 구하기

select count(*) 사원수,count(sabun) 갯수, count(samgr) 관리자 from sawon;


--전체직원의 급여합계

select sum(sapay) 급여합계, avg(sapay) 급여평균 from sawon;

select sum(sapay) / count(*)  급여평균 from sawon;


--10,20,30,40번부서의 급여합계

select sum(sapay) 급여합계, count(*) 인원수 from sawon where deptno=10;

select sum(sapay) 급여합계, count(*) 인원수 from sawon where deptno=20;

select sum(sapay) 급여합계, count(*) 인원수 from sawon where deptno=30;

select sum(sapay) 급여합계, count(*) 인원수 from sawon where deptno=40;


--각부서별 급여합계 및 인원수 구해라..

--select * from sawon order by deptno

select deptno,count(*) 인원수,sum(sapay) 급여합계 

from sawon

group by deptno  -- 부서별로 그룹화

order by deptno ;


--성별 인원수

--select * from sawon order by sasex;

select sasex, count(*) from sawon

group by sasex


--부서별 성별 인원수

-- select * from sawon order by deptno,sasex; --1차,2차정렬


select deptno,sasex, count(*) from sawon

group by deptno,sasex

order by deptno,sasex ;



-- 직급별 인원수=> 그룹통계에 대한 조건절 having절

select sajob ,count(*) from sawon

group by sajob

having count(*)>=5 ;


--그룹통계는 연산필드에서도 적용

select * from gogek;


select substr(gojumin,8,1),count(*) from gogek

group by substr(gojumin,8,1)


--연산자 : case ~ when ~then ~end

select 

       case

         when substr(gojumin,8,1) in('1','3') then '남자'

         else '여자'

       end

from gogek;


select 

       case substr(gojumin,8,1)

         when  '1' then '남자'

         when  '3' then '남자'

         when  '2' then '여자'

         when  '4' then '여자'

       end as 성별

from gogek;




select 

       case

         when substr(gojumin,8,1) in('1','3') then '남자'

         else '여자'

       end as 성별,

       count(*) 인원수 from gogek

group by case

         when substr(gojumin,8,1) in('1','3') then '남자'

         else '여자'

       end


--고객테이블에서 고객의 출생월별 인원수

select substr(gojumin,3,2) 월 from gogek;

select  substr(gojumin,3,2) 월,count(*) from gogek

group by substr(gojumin,3,2);



--고객테이블에서 고객의 출생계절별 인원수

select substr(gojumin,3,2) 월,

       case

          when substr(gojumin,3,2) in('03','04','05')  then '봄'

          when substr(gojumin,3,2) in('06','07','08')  then '여름'

          when substr(gojumin,3,2) in('09','10','11')  then '가을'

          else '겨울'

       end as 계절

from gogek;


select case

          when substr(gojumin,3,2) in('03','04','05')  then '봄'

          when substr(gojumin,3,2) in('06','07','08')  then '여름'

          when substr(gojumin,3,2) in('09','10','11')  then '가을'

          else '겨울'

       end as 계절,

       count(*) 인원수

from gogek

group by

       case

          when substr(gojumin,3,2) in('03','04','05')  then '봄'

          when substr(gojumin,3,2) in('06','07','08')  then '여름'

          when substr(gojumin,3,2) in('09','10','11')  then '가을'

          else '겨울'

       end





1


2 관리자 계정으로 접속



3 새로운 DB유저 등록및 권한 설정



4 + 버튼 누른다





6 만들어진 사용자계정의 SQL 워크시트를 연다



7 새로운 계정에 SQL문을 작성해 본다.


'Programming > Oracle' 카테고리의 다른 글

[6일차] 뷰(View)  (0) 2013.08.27
[5일차-2] 날짜함수 정리  (0) 2013.08.26
[5일차-1] 통계_그룹함수  (0) 2013.08.26
개발자가 필요한 오라클 간단 정리  (0) 2013.08.21
sqlplus에서 유저 생성 시키기 예  (0) 2013.08.20

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

  문자형 : 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');









▶ 유저 생성 시키기 예


// step1. 마스터 계정 접속

C:\USER>sqlplus system/oracle (계정아이디/비번)


// step2. 유저 생성 질의 실행

SQL> create user test2 identified by test2; (아이디와 비번 설정)


// step3. 유저의 권한 설정

-- connect : 접속권한

-- resource : 테이블을 생성할 수 있는 권한

-- create view : 뷰를 생성할 수 있는 권한

SQL> grant connect,resource,create view to test2;



// test2 계정으로 접속 (계정아이디/비번)

SQL> conn test2/test2



// test2 계정으로 바뀌었는지 확인 (현재 접속 계정을 확인) 

SQL> show user;








+ Recent posts