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

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









1. 공개된 기능의 리스트 목록

2. 규격 표준을 위한 기능도 함

3. 강한 커플링을 피하기 위함


※ 1의 개념만으로 2,3이 자동으로 처리된다.

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

자바의 클래스 동적으로 생성 시키기 예  (0) 2013.10.16
열거형 enum 간단 예  (0) 2013.07.25
내부 클래스를 사용하는 경우  (0) 2013.07.25
익명 클래스 예  (0) 2013.07.25
JAVA 배열 기초 예문  (0) 2013.07.19


열거형 enum


enum Lesson{ JAVA, XML, EJB, FLEX }

Lesson le = Lesson.XML;


System.out.println( le );  // 콘솔에 XML이라는 글자가 찍힘 







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

자바의 클래스 동적으로 생성 시키기 예  (0) 2013.10.16
인터페이스 간단 개념  (0) 2013.08.12
내부 클래스를 사용하는 경우  (0) 2013.07.25
익명 클래스 예  (0) 2013.07.25
JAVA 배열 기초 예문  (0) 2013.07.19


- A클래스와 B 클래스가 서 맞참조 하고 있는 경우,

   차라리 내부클래스를 사용하는 것이 편리하다.

- 개발 구현상 어쩔 수 없는 경우말고는 가급적 사용을 지양.

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

인터페이스 간단 개념  (0) 2013.08.12
열거형 enum 간단 예  (0) 2013.07.25
익명 클래스 예  (0) 2013.07.25
JAVA 배열 기초 예문  (0) 2013.07.19
클래스 변수 정리  (0) 2013.07.18

익명클래스

 - 클래스 선언과 생성을 하는 게 특징이다.

 - 단 한번만 사용될 수 있고 오직 하나의 객체만 생성할 수 있는 1회용 클래스이다.

 -  생성자를 가질 수 없고, 오직 단하나의 클래스를 상속 받거나

    단 하나의 인터페이스만을 구현할 수 있다.

 - 자바의 정석 p 343~344 "익명 클래스" 부분 참고



익명 클래스 예1)


public class InnerEx{


// 익명 클래스 선언

Hello h = new Hello{


// 멤버변수

int a = 10;


// 메스드

void fx(){

// 메서드 구현

}

}// end class

}



익명 클래스 예2)


//익명 클래스 실용 예.

// 볼드체가 익명클래스 부분이다.

this.addWindowListener(new WindowAdapter() {

@Override

public void windowClosing(WindowEvent e) {

// TODO Auto-generated method stub

System.exit(0);

}

});


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

열거형 enum 간단 예  (0) 2013.07.25
내부 클래스를 사용하는 경우  (0) 2013.07.25
JAVA 배열 기초 예문  (0) 2013.07.19
클래스 변수 정리  (0) 2013.07.18
생성자 개념 정리 및 생성자 오버로딩 예문  (0) 2013.07.17

package mymain;

import java.util.Random;

public class MyMain {


public static void main(String[] args) {

// String 배열 선언 및 생성

String [] str = new String[5];

// 값 설정

str[0] = "개";

str[1] = "고양이";

str[2] = "비둘기";

str[3] = "참새";

str[4] = "까치";

// 값 출력

for (int i = 0; i < str.length; i++) {

System.out.println(str[i]);

}

// String 배열 생성 방법2

// 생성과 함께 값을 설정.

String [] str2 = {"한국어","일본어","영어","중국어","독일어"};

// 값 출력

for (int i = 0; i < str2.length; i++) {

System.out.println(str2[i]);

}

// int형 배열 선언 및 생성

int []num = new int[10];

// 배열에 값 쓰기

for (int i = 0; i < num.length; i++) {

Random rmd = new Random();

num[i]= rmd.nextInt(50);

}

// 배열의 값 읽어오기

for (int i = 0; i < num.length; i++) {

System.out.println(num[i]);

}

}


}

package mymain;


/*

       ◆ static  클래스 변수 정리


  static : 프로그램 시작시 생성된다.

  1. static 변수 : 클래스내의 객체간 공유변수

  2. static : 메서드 : 객체 생성없이 사용가능 (Ex: Math.abs())

  3. static class         : inner class(내부클래스)에서 사용

  4. static 초기화         :  

 */



/*

  변수

  1. 인스턴스 변수 : 클래스내에 선언된 변수 (객체가 생성되면)

        2. 클래스 변수(static 변수) : 선언되는 시점이 인스턴스 변수와 다르다.

        프로그램 시작시 생성

        3. 객체 생성없이 사용가능 (예: Math.abs());

        4. 클래스 변수는 inner class(내부클래스)에서 사용된다.

 */


class ExStatic{

/*

  인스턴스 변수는 객체를 생성하고 나서 사용할 수 있지만

  클래스 변수는 객체 생성 없이 사용이 가능하다.

  이미 프로그램 시작시 클래스 변수는 생성되어 있기 때문이다.

*/


// 인스턴스 변수

int a;

// 클래스 변수

// static이라도 접근제한자의 영향을 받는다.

// 즉, private static int static_a; 라고 접근제한자를 사용하면

// 외부에서 사용이 불가능하다.

static int static_a; 

}


public class MyMain {

// static 초기화

// 가장먼저 실행된다.

// main 보다 먼저 실행된다.

static

{

System.out.println("(순서1) 내가 먼저 실행 돼");

System.out.println("(순서2) JDBC 라이브러리를 여기서 초기화 ");

}

public static void main(String[] args) {

// 클래스 변수라 객체 생성 없이 사용가능

ExStatic.static_a = 10;

System.out.println("(순서3)" + ExStatic.static_a);

}


}



package mymain;


/*

  ■ 생성자 메소드

 

  myMemo : 생성자는 객체생성시 객체를 초기화하는 특수메서드이다.

  1. 생성자의 목적은 클래스내의 멤버변수를 초기화하는 것이다.

  2. 생성자는 return값이 없다.

  3. 생성자는 중복정의 가능 (오버로딩)

  4. 생략가능 : 초기화 포기

        5. this() : 자신의 생성자를 표현

  (자신의 생성자를 호출할 때 사용함. 

       어떻게 사용하는지에 따라 다르겠지만 그다지 자주 사용되지는 않는다)

 */


class MyDate

{

// 기본 생성자

public MyDate(){

System.out.println("기본 생성자를 호출하였습니다.");

}

// 생성자 오버로딩

public MyDate(int y, int m, int d){

year = y;

month =m;

day = d;

}

// 인스턴스 변수____________________________________________// 

private int;

        private  year;

  private month, day;

// Getter/Setter____________________________________________//

// 초기화하지 않으면 자동 0값으로 초기화된다.

// 단, 객체형 변수는 초기화하지 않으면 null값으로 초기화된다

public int getYear() {

return year;

}


public void setYear(int year) {

this.year = year;

}


public int getMonth() {

return month;

}


public void setMonth(int month) {

this.month = month;

}


public int getDay() {

return day;

}


public void setDay(int day) {

this.day = day;

}

}





public class MyMain {


public static void main(String[] args) {


// 오버로딩한 생성자를 호출

MyDate date = new MyDate(2014, 7, 17);

// 날짜 값 출력.

System.out.println(date.getYear());

System.out.println(date.getMonth());

System.out.println(date.getDay());


}


}



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

JAVA 배열 기초 예문  (0) 2013.07.19
클래스 변수 정리  (0) 2013.07.18
메소드 호출 방식에 따른 분류  (0) 2013.07.17
가변인수 (ellipsis) 기초 예문  (0) 2013.07.17
자바 cmd 컴파일  (0) 2013.07.11

+ Recent posts