오라클에 JDBC 접근 가장 기초 틀 예문


Main Class


import java.sql.ResultSet;

import java.sql.Statement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.util.ArrayList;

import java.util.List;


import GogekVO;


public class yMain {

// STEP1. DB driver 초기화___________//

// 정형화된 공식

//_______________________________________//

static {

try {

Class.forName("oracle.jdbc.driver.OracleDriver");

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}


public static void main(String[] args) throws Exception{

// STEP2. 연결______________________//

Connection conn = null;

//____________________________________//

// STEP3. 접근______________________//

//_____________________________________//

// DB에 접근하기 위한 정보가 필요하다.

String url = "jdbc:oracle:thin:@localhost:1521:xe";

conn = DriverManager.getConnection(url, "test", "test");

System.out.println("--connect success!!---");

// STEP4. 명령처리 객체 (기본적으로 AutoCommit으로 설정되어있다)______//

//___________________________________________________________________//

Statement stmt = null;

stmt  = conn.createStatement();

/*

* 설명

* 모든 SQL 명령을 처리(stmt) :DDL, DCL, DML .

* select : executeQuery(SQL)

* insert, delete, update : exexcuteUpadate(SQL);

* stmt.executeQuery("create table tsb3(no int, name varchar2(12))");

* stmt.executeQuery("drop table tsb1");

*/

stmt.executeQuery("insert into tsb3 values(1, '민우')");

// 결과행 처리객체 //

ResultSet rs = null;

rs = stmt.executeQuery("select * from tsb1");


// 데이터 그릇 준비

//<> 은 제네릭으로서, 지정한 객체만 받겠다는 의미이다.

List<GogekVO> list = new ArrayList<GogekVO>();

//List list = new ArrayList();

while(rs.next()){

int rsNo = rs.getInt("NO"); // 필드명은 가급적 대문자로 쓴다.

String rsName = rs.getString("NAME");

/*

// 임시로 데이터를 출력

System.out.print(rsNo + "   ");

System.out.print(rsName);

System.out.println();

*/

// 모든행을 읽어와서 읽기

GogekVO vo = new GogekVO(rsNo, rsName);

list.add(vo);

}

// 출력

for (int i = 0; i < list.size(); i++) {

GogekVO vo = list.get(i);

System.out.print(vo.getNo()+"  ");

System.out.print(vo.getName());

System.out.println();

}

// STEP5. 닫기______________________//

//_____________________________________//

stmt.close();

conn.close();

}

}



GogekVO Class


// VO 객체 : 값을 저장관리하는 객체(Value Object)

// VO는 가급적 getter / setter를 만들도록한다.


public class GogekVO {

// DB 필드명과 동일하게 변수명을 부여하면 편리하다.

int no;

String name;

public GogekVO(int no, String name){

this.no = no;

this.name = name;

}

// GET / SETTER_____________________//

public int getNo() {

return no;

}

public void setNo(int no) {

this.no = no;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}







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

[SQL] IN, AS 구문 정리  (0) 2013.08.30
[7일차] Join  (0) 2013.08.29
[4일차-2] select_연산자_함수  (0) 2013.08.27
[4일차-1] SubQuery(하위쿼리)  (0) 2013.08.27
[3일차] 제약조건  (0) 2013.08.27


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%' ;


select * from gogek

where substr(gojumin,8,1) in('2','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' 카테고리의 다른 글

[7일차] Join  (0) 2013.08.29
오라클에 JDBC 접근 가장 기초 틀 예문  (0) 2013.08.28
[4일차-1] SubQuery(하위쿼리)  (0) 2013.08.27
[3일차] 제약조건  (0) 2013.08.27
[2일차] 테이블생성 및 DML 기초  (0) 2013.08.27


SubQuery(하위쿼리)

: 하위쿼리의 결과값을 이용해서 주쿼리를 수행



-- 최불암과 동일한 부서 직원을 추출

select * from sawon 

where deptno = 10;


select deptno from sawon where saname='최불암';


--2개의 쿼리를 결합

select * from sawon 

where deptno=(select deptno from sawon where saname='최불암') ;


--장동건과 연봉이 동일한 직원 추출

select * from sawon 

where sapay = (select sapay from sawon where saname='장동건');



--이미자보다 연봉을 많이 받는 직원을 추출

select * from sawon 

where sapay > (select sapay from sawon where saname='이미자');


--주의) 하위쿼리의 결과가 여러개 발생시 => in연산자 사용

--최불암 ,이미자의 소속부서 직원을 추출

select * from sawon

where deptno in (select deptno from sawon where saname='최불암' or saname='이미자') ;

--where deptno in (10,20) ; <=해석


select * from sawon

where deptno = (select deptno from sawon where saname='최불암')

      or

      deptno = (select deptno from sawon where saname='이미자') ;

      

--고객테이블 

select * from gogek;

select length(goname) from gogek;


--마징가의 이름과 동일한 길이의 이름을 갖는 고객 추출

select * from gogek 

where length(goname)=(select length(goname) from gogek where goname='마징가');

      

select length(goname) from gogek where goname='마징가';

      

--류민과 거주지가 동일지역(광역시)의 고객 추출      

select * from gogek 

where substr(goaddr,1,2)=(select substr(goaddr,1,2) from gogek where goname='류민');


select substr(goaddr,1,2) from gogek where goname='류민'      

    

-- 몰리와 동일한 출생월을 갖는 고객을 추출

select * from gogek

where substr(gojumin,3,2) = 

                (select substr(gojumin,3,2) from gogek where goname='몰리');

      


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

오라클에 JDBC 접근 가장 기초 틀 예문  (0) 2013.08.28
[4일차-2] select_연산자_함수  (0) 2013.08.27
[3일차] 제약조건  (0) 2013.08.27
[2일차] 테이블생성 및 DML 기초  (0) 2013.08.27
[1일차] 계정생성  (0) 2013.08.27


[제약조건]: 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

+ Recent posts