2008. 8. 20. 18:40

Chap 9. 테이블 생성 및 변경, 삭제하기

오라클에서 제공하는 자료형

자료형의 종류

의미

CHAR(N)

주어진 크기만큼 고정 길이의 문자 저장
1바이트~2000바이트

VARCHAR2(N)

주어진 크기만큼 가변 길이의 문자 저장
1바이트~4000바이트

NVARCHAR2(N)

국가별 국자 집합에 따른 크기의 문자 또는 바이트의 가변 길이 문자
 1바이트~4000바이트

NUMBER(p, s)

정밀도와 스케일로 표현되는 숫자

DATE

날짜 형식을 저장

ROWID

테이블내 행의 고유 주소를 가지는 64진수 문자
해당 6바이트(제한된 ROWID) 또는 10바이트(확장된 ROWID)

BLOB

대용량의 바이너리 데이터를 저장
최대 4GB

CLOB

대용량의 텍스트 데이터를 저장
최대 4GB

BFILE

대용량의 바이너리 데이터를 파일 형태로 저장
최대 4GB

TIMESTAMP(n)

DATE 형의 확장된 형태

INTERVAL YEAR TO MONTH

년과 월을 이용하여 기간을 저장

INTERVAL DAY TO SECOND

일, 시, 분, 초를 이용하여 기간을 저장
두 날짜 값의 정확한 차이를 표현한는데 유용


1. 테이블 생성
create table 테이블명
(컬럼명 자료형)
=======사번, 이름, 급여로 테이블 구성=============================================
CREATE TABLE em01
 (empno NUMBER(4),
 ename varchar2(20),
 sal NUMBER(7, 2));
====================================================
식별자의 선언
컬럼명이나 테이블명을 선언하기 위해서는 다음과 같은 원칙을 지켜야 한다.
1. 시작은 반드시 영문자
2. 예약어(SELECT 등)는 쓸 수 없다.
3. 유일한 단어이어야 한다.
4. _,$는 사용가능하다.

서브쿼리를 이용한 테이블 생성
테이블의 구조와 데이터까지 복사하는 경우
create table emp01
as
select * from emp;
원하는 컬럼만 복사하는 경우
create table emp01
as
select empno, ename, sal from emp;
테이블의 구조만 복사
create table emp01
as
select * from emp
where 1=0;      // where 조건 절이 항상 거짓이 되므로 빈 테이블이 생성된다.

2. 테이블의 구조 변경
컬럼 추가
alter table 테이블명                   alter table emp01
add (컬럼명 자료형);                add (email varchar2(10));
컬럼 변경
alter table emp01
modify (email varchar2(40));
컬럼 삭제
alter table emp01
drop column email;
테이블 제거
drop table emp01;
================================================================================
EMP 테이블의 사원번호, 이름, 직급, 매니저 칼럼과 동일한 칼럼명과 유형을 갖는 테이블을 EMP01란 이름으로 생성하라.
create table emp01
as
select empno, ename, job, mgr from emp;
이미 존재하는 EMP01 테이블에 EMP 테이블과 동일한 구조로 입사일자 칼럼을 추가하라.
alter table emp01
add(hiredate date);
EMP01 테이블의 직급 칼럼의 크기를 20으로 변경하라.(기존 job varchar2(9))
alter table emp01
modify (job varchar2(20));
EMP01 테이블에서 매니저 칼럼을 삭제하라.
alter table emp01
drop column mgr;
================================================================================
테이블 명을 변경하는 RENAME 문
형식 : RENAME old_name TO new_name
EMP01 테이블의 이름을 EMP02로 변경하라.
rename emp01 to emp02;

'수업 > 오라클 + PL/SQL' 카테고리의 다른 글

Chap 11. 트랜잭션 관리  (0) 2008.08.27
Chap 10. 테이블에 데이터 추가, 수정, 삭제하기  (0) 2008.08.21
Chap3,4 SQLPLUS 명령어 & 연산자  (1) 2008.08.20
Chap 2. SQL의 기본  (2) 2008.08.20
Chap 8. 서브쿼리  (0) 2008.08.20
2008. 8. 20. 17:59

Chap3,4 SQLPLUS 명령어 & 연산자

3. SQLPLUS 명령어
SQLPLUS 명령어는 한줄을 넘어가서 다음 줄까지 이어져야 하는 경우 반드시 연결문자(-)를 써야 명령문이 이어진다.

LIST (L) : 버퍼에 있는 내용을 나타냄
RUN(R, /) : 버퍼에 저장된 쿼리문을 실행시킴
EDIT(ED) : 버퍼에 저장된 쿼리문을 메모장에서 편집
SAVE 파일명 : 최근에 수행한 쿼리문을 파일로 저장
SAVE 파일명 REPLACE : 저장한 파일 덮어쓰기
@파일명 : 파일을 실행
GET : 파일로 저장한 쿼리문 불러오기
SPOOL : 실행결과 화면 갈무리
SPOOL OFF : SPOOL 해제
SET : 시스템 변수 설정 [
1. HEADING :  컬럼 제목의 출력 여부 결정 (ON, OFF)
2. LINESIZE : 한 화면에 출력되는 라인수 결정
3. PAGESIZE : 한 페이지에 출력되는 페이지의 크기 결정 ]

4. 연산자
WHERE 컬럼명 연산자 비교대상값;
비교연산자( > , >= , < , <= , = )
문자열 데이터 조회
SQL문에서는 대소문자를 구분하지 않지만, 테이블내에 저장된 데이터 값은 대소문자를 구분한다.
컬럼의 자료형이 날짜형(DATE)일 경우에는 비교 연산을 하기 위해서는 단일 따옴표(' ') 안에 내용을 기술한다.
임의의 문자 또는 문자열을 포함한 값을 찾을때는 Like 연산자를 사용한다.
% : 0~n개의 문자열을 대체
_ : 단 1글자의 문자열을 대체
IN 연산자 : 특정 필드가 여러 개의 값 중에 하나인지를 확인
형식 : 컬럼명 IN (value_list)
BETWEEN A AND B
NOT 연산자
IS NULL(IS NOT NULL) : 임의의 컬럼이 NULL인지 아닌지를 비교 검색
정렬 출력 : ORDER BY 컬럼명 (DESC, ASC)
================================================================================
테이블 EMP 중에서 부서번호가 10번인 사원에 관한 모든 정보만 출력하라.  
select *
from emp
where deptno=10;
테이블 EMP 중에서 급여가 2000 미만이 되는 사원의 정보 중에서
사번과 이름, 급여를 출력하라.
select ename, sal
from emp
where sal <= 2000;

'수업 > 오라클 + PL/SQL' 카테고리의 다른 글

Chap 10. 테이블에 데이터 추가, 수정, 삭제하기  (0) 2008.08.21
Chap 9. 테이블 생성 및 변경, 삭제하기  (0) 2008.08.20
Chap 2. SQL의 기본  (2) 2008.08.20
Chap 8. 서브쿼리  (0) 2008.08.20
Chap 7. 조인  (1) 2008.08.18
2008. 8. 20. 17:45

Chap 2. SQL의 기본

SQL 접속
sqlplus scott/tiger -> 기본계정 scott로 접속

데이터 구조 살펴보기
desc 테이블명;

select * from emp; -> emp 테이블의 모든 컬럼을 조사.

산술연산자의 사용이 가능하다.
+, -, *, / 의 사칙연산이 가능

NULL도 데이터이다
1. 0(zero)도 아니고, 2. 빈공간도 아니다.
3. 미확정, 알수 없는 값을 의미하며, 4. 어떤값인지 알 수 없지만 어떤 값이 존재하고 있다.
5. ? 혹은 무한대의 의미이므로 연산, 할당, 비교가 불가능하다.

특정 컬럼의 로우가 null 일때 0(zero)로 대체하기 위한 nvl함수
형식 nvl ( 컬럼명, 0)

중복되는 컬럼을 한 번씩만 보여주기 위한 distinct
================================================================================
EMP 테이블에서 칼럼 JOB를 표시하되 중복된 값은 한번만 표시하라.
select distinct job
from emp;
사원들이 어떤 부서에 소속되어 있는지 소속 부서번호 출력하되 중복되지 않고
한번씩 출력하는 쿼리문을 작성하자.
select distinct deptno
from emp;
================================================================================

'수업 > 오라클 + PL/SQL' 카테고리의 다른 글

Chap 9. 테이블 생성 및 변경, 삭제하기  (0) 2008.08.20
Chap3,4 SQLPLUS 명령어 & 연산자  (1) 2008.08.20
Chap 8. 서브쿼리  (0) 2008.08.20
Chap 7. 조인  (1) 2008.08.18
Chap 6. 그룹함수  (0) 2008.08.14
2008. 8. 20. 16:06

Chap 8. 서브쿼리

서브쿼리란 하나의 테이블에서 검색한 결과를 다른 테이블에 전달하여 새로운 결과를 검색하는 경우에 사용하는 기능이다.

서브퀴리에 기술되는 select 문은 괄호()로 묶어주어야 하며, 서브쿼리가 실행이 된 후,
메인쿼리가 실행 된다.

단일행 서브쿼리
하나의 행만 검색하여 그 결과를 메인쿼리에 보내는 것
// 존스의 deptno를 emp 테이블에서 검색하고 dept테이블에 적용시켜 dname을 검색
select dname
from dept
where deptno=(select deptno
                      from emp
                      where ename='JONES');
서브쿼리에서는 그룹함수의 사용이 가능하다.
// emp 테이블에서 평균급여보다 높은 직원의 이름과 급여를 출력하라.
select ename, sal
from emp
where sal > (select avg(sal)
                   from emp);

다중행 서브쿼리
서브쿼리에서 반환되는 결과가 하나 이상의 행일 때 사용한다.

종류

의미

IN

메인 쿼리의 비교 조건(‘=’ 연산자로 비교할 경우)이 서브 쿼리의 결과 중에서 하나라도 일치하면 참입니다.

ANY, SOME

메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 하나 이상이 일치하면 참입니다.

ALL

메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 모든 값이 일치하면 참입니다.

EXIST

메인 쿼리의 비교 조건이 서브 쿼리의 결과 중에서 만족하는 값이 하나라도 존재하면 참입니다.

================================================================================
1.SMITH와 동일한 직급을 가진 사원의 이름과 직급을 출력하라.(단일행 서브 쿼리 이용)
select ename, job
from emp
where job=(select job
                 from emp
                 where ename='SMITH')
/
2. 부서별로 가장 급여를 많이 받는 사원의 정보를 출력하라.(IN 연산자 이용)
select *
from emp
where sal in(select max(sal)
                   from emp
                   group by deptno)
/
3. 직급이 'SALESMAN'인 사원이 받는 급여들의 최대 급여보다 많이 받는 사원들의 이름과 급여를 출력하되
   부서번호가 20번인 사원은 제외한다.(ALL 연산자 이용)
select ename, sal
from emp
where sal > all (select max(sal)
                        from emp
                        where job='SALESMAN')
/
4. 직급이 'SALESMAN'인 사원이 받는 급여들의 최소 급여보다 많이 받는 사원들의 이름과 급여를 출력하되
부서번호가 20번인 사원은 제외한다.(ANY 연산자 이용)
select ename, sal
from emp
where sal > any (select min(sal)
                  from emp
                  where job='SALESMAN'
                  and deptno not in(20))
================================================================================

'수업 > 오라클 + PL/SQL' 카테고리의 다른 글

Chap3,4 SQLPLUS 명령어 & 연산자  (1) 2008.08.20
Chap 2. SQL의 기본  (2) 2008.08.20
Chap 7. 조인  (1) 2008.08.18
Chap 6. 그룹함수  (0) 2008.08.14
Chap 5. SQL 주요 함수  (0) 2008.08.13
2008. 8. 20. 14:35

Part 5. 자바에서 자주 사용되는 클래스 IV - 컬렉션 클래스와 제네릭

/*배열은 원소의 자료형태가 결정
int []s=new int[5];
String []name=new String[5];

컬렉션 클래스의 설계 원리
- 자료구조(알고리즘) - 해쉬 테이블 혹은 ArrayList가 일반화되어 정의
- 원소들을 자바의 최상위 클래스 Object 형으로 저장하도록 설계
- 원소가 추가되는 순간에 업캐스팅

ArrayList []s=new ArrayList(); // 점수를 저장하기 위한 용도 : 원소가 Object형
ArrayList []name=new ArrayList(); // 이름을 저장하기 위한 용도 : 원소가 Object형
[1.4버전까지의 컬렉션 클래스의 단점]
1. 하나의 ArrayList 객체의 원소 자료형이 혼합되어서 사용될수 있다는 단점
2. 원소를 추출한 후에는 다운캐스팅을 위한
   명시적인 형변환을 해야함(캐스트 연산자로)
   name.add("이강국");
   name.add(10); // 원소의 자료형이 혼합되어 사용 됨
   String str=(String)name.get(0); // Object 형이므로, 다운캐스팅이 필요하다.

제너릭 클래스 : 컬렉션 클래스에서 사용되는 JDK5.0에서 새롭게 나온 개념
하나의 클래스가 알고리즘을 적용받을 수 있는 원소의 자료형을 다양하게 하기 위해서
제너릭 클래스란 개념을 5.0에서 가져다 사용
제너릭 클래스는 로직만 구현하고 원소들의 자료형태에 대해서는 언급하지 않음

객체를 생성할 때에는 자료형을 언급해야 함.
ArrayList<Integer> []s=new ArrayList<Integer>(); // 원소 : Integer
ArrayList<String> []name=new ArrayList<String>(); // 원소 : String
name.add("조현상");
name.add(10); // 에러 남 : 원소의 자료형이 혼합되어 사용되지 못함
String str=name.get(0); // 다운캐스팅이 필요없다.*/

// 문자를 가져다가 대문자로 출력하기
package training;
import java.util.ArrayList;
public class Ex01 {
 public static void main(String[] args) {
  // JDK 1.4에서 사용되던 컬렉션 클래스
  ArrayList list = new ArrayList();
  list.add("apple"); // 내부적으로 저장될때에는 Object 형으로 업캐스팅됨 
  list.add("banana");
  list.add("orange");
  list.add("3"); // 단점 : 원소들의 자료형이 혼합되어 사용
  // list에 저장된 원소들을 갖다가 대문자로 출력하기
  for(int i=0;i<list.size();i++){
   System.out.println(list.get(i)+" ");
   // 대문자로 변환하기 위한 메소드로 toUpperCase가
   // String 클래스에서 제공된다.
   // 단점 : 다운 캐스팅을 위해 캐스트 연산자를 기술해야 한다.
   String item=(String)list.get(i);
   System.out.println(item.toUpperCase());
  } 
 }
}
===============점수 5개로 총점과 평균을 구하기 1. 배열 ==============================
// 배열 : 배열의 크기가 변경되지 않는다. 배열에 원소를 추가하거나 삭제할 수 없다.
// ArrayList : 배열의 크기가 변경 되고 배열에 원소를 추가하거나 삭제할 수 있다.
public class Ex03 {
 public static void main(String[] args) {
  int [] a={90, 85, 70, 80, 95};
  int tot=0;
  for(int i=0;i<a.length;i++){
   System.out.println(a[i] + " ");
   tot+=a[i];
  }
  System.out.println("\n 총점 : " + tot);
  System.out.println("\n 평균 : " + tot/a.length);
 }
}
===============점수 5개로 총점과 평균을 구하기 2. ArrayList===========================
import java.util.ArrayList;
public class Ex04 {
 public static void main(String[] args) {
  ArrayList list=new ArrayList();
  System.out.println("원소의 갯수 : "+list.size());
  list.add(90);
  list.add(85);
  list.add(70);
  list.add(80);
  list.add(95);
  System.out.println("원소의 갯수 : "+list.size());
  int tot=0;
  for(int i=0;i<list.size();i++){
   System.out.println(list.get(i) + " ");
   tot=tot+(Integer)list.get(i);
   // tot=tot+list.get(i);
  }
  System.out.println("\n 총점 : " + tot);
  System.out.println("\n 평균 : " + tot/list.size());
 }
}
===================================================================================
package training;
import java.util.ArrayList;
public class Ex01 {
 public static void main(String[] args) {
  // JDK 1.4에서 사용되던 컬렉션 클래스
  ArrayList list = new ArrayList();
  list.add("apple"); // 내부적으로 저장될때에는 Object 형으로 업캐스팅됨 
  list.add("banana");
  list.add("orange");
  list.add("3"); // 단점 : 원소들의 자료형이 혼합되어 사용
  // list에 저장된 원소들을 갖다가 대문자로 출력하기
  for(int i=0;i<list.size();i++){
   System.out.println(list.get(i)+" ");
   // 대문자로 변환하기 위한 메소드로 toUpperCase가
   // String 클래스에서 제공된다.
   // 단점 : 다운 캐스팅을 위해 캐스트 연산자를 기술해야 한다.
   String item=(String)list.get(i);
   System.out.println(item.toUpperCase());
  } 
 }
}
===================================================================================
package training;
import java.util.ArrayList;
public class Ex02 {
 public static void main(String[] args) {
  // 단점 : 원소들의 자료형이 혼합되어 사용되지 않도록
  // 단점 : 다운 캐스팅하지 않도록
  // JDK5.0부터 컬렉션 클래스를 제너릭 클래스 형태로 제공
  // 객체 생성 시, 원소의 자료형들을 결정하기
  // 제너릭_컬렉션 클래스 <원소의 자료형>
  ArrayList<String> list = new ArrayList<String>();
  list.add("apple");  
  list.add("banana");
  list.add("orange");
  // list.add(3); // 원소들의 자료형이 혼합되어 사용되지 않도록
  for(int i=0;i<list.size();i++){
   System.out.println(list.get(i)+" ");  
   String item=list.get(i);
   // String형으로 다운캐스팅 하지 않아도 된다.
   System.out.println(item.toUpperCase());
  } 
 }
}
===================================================================================
package training;
import java.util.Enumeration; // import를 하기 위해서 <ctrl>+<shift>+o(영문)
import java.util.Hashtable;
public class Ex03 {
 public static void main(String[] args) {
  // key, value를 쌍으로 저장하는 해쉬 테이블
  // "이강국" 65.5
  Hashtable<String, Double>ht=new Hashtable<String, Double>();
  ht.put("이강국", 63.5);
  ht.put("김재필", 68.5);
  ht.put("김경윤", 70.5);
  System.out.println(ht.get("이강국"));
  // 해쉬 테이블에 저장된 모든 정보를 얻어오기
  Enumeration<String> name=ht.keys();
  while(name.hasMoreElements()){
   String key=name.nextElement();
   Double weight=ht.get(key);
   System.out.println(key + " : " + weight);
  }
 }
}
===================================================================================