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);
  }
 }
}
===================================================================================

2008. 8. 19. 16:31

Part 5. 자바에서 자주 사용되는 클래스 III - 문자열 관련 클래스

다른 클래스들은 new 연산자를 통해서만 객체를 생성할 수 있지만, String 클래스는 문자열 상수를 지정하면 바로 String 객체가 생성 된다.

문자열 관련 클래스 : String, StringBuffer 등이 있다.
String 클래스와 StringBuffer 클래스의 차이점
String 클래스는 메서드에 의해 처리된 결과를 저장할 문자열을 새롭게 생성하지만
StringBuffer 클래스는 메모리 상의 자신의 값이 수정 된다는 점이 다르다.

String 관련 메소드

int length()

String 클래스의 문자열 길이를 반환한다.

boolean equals(Object anObject)

두 String 클래스 객체의 내용이 같은지를 비교한다.

boolean equalsIgnoreCase

(String anotherString)

대소문자 구분 없이 문자열이 같은지를 비교한다.

String substring(int beginIndex)

beginIndex로 주어진 값부터 문자열의 마지막까지의 문자열을 반환해주는 메서드

String concat(String str)

이 메서드를 호출한 String 클래스객체의 내용과 인자로 주어진 문자열을 합친 새로운 String 클래스객체를 반환한다.

String replace

(char oldChar, char newChar)

기존의 oldChar로 표시된 모든 문자들을 newChar로 표시된 문자로 모두 바꾸어준다

String toLowerCase()

String 클래스 객체의 모든 문자를 소문자로 바꾼다

String toUpperCase()

String 클래스 객체의 모든 문자를 대문자로 바꾼다.

char charAt(int index)

index로 지정된 곳의 문자값을 반환한다.

int indexOf(int ch)

주어진 문자가 존재하는 위치를 알려준다. 존재하지 않으면 -1을 되돌린다.

int lastIndexOf(int ch)

주어진 문자가 존재하는 마지막 위치를 알려준다. 존재하지 않으면 -1을 되돌린다.

String trim( )

문자열의 시작과 끝 사이에 있는 공백을 없앤다.

static String valueOf(Object obj)

주어진 객체나 기본 데이터형을 문자열로 바꾼다.

===================================================================================
package training;
public class Ex02 {
 public static void main(String[] args) {
  // String  객체 생성하는 2가지 방법
  // 1. new 연산자로 다른 클래스와 동일하게 생성
  String str01=new String("안녕");
  String str02=new String("안녕");
  System.out.println(str01==str02);
  // 2. 문자열 상수를 바로 레퍼런스 변수에 대입
  // 최초로 사용된 문자열 상수는 메모리 할당을 한다.
  String str03="안녕";
  // 이미 사용된 문자열상수일 경우는 메모리할당을 하지않고
  // 최초로 사용되어서 메모리할당한 상수를 가리킴
  String str04="안녕";
  System.out.println(str03==str04);
 }
}
===================================================================================
package training;
public class Ex03 {
 public static void main(String[] args) {
  // String 클래스의 특징을 살펴보기 위한 예제
  String str1="Java Programming";
  // str1이 저장하고 있는 데이터를 대문자로 변환
  str1.toUpperCase();
  System.out.println(str1);
  // 불변객체 : 생성당시의 값이 절대 변하지 않고 유지된다.
  // 메소드를 호출하면 또 다른 메모리를 할당하여
  // 변환된 값을 저장하게 된다.
  System.out.println(str1.toUpperCase());
  String str2=str1.toUpperCase();
  System.out.println(str1);
  System.out.println(str2);
  // 대문자로 변환한 메소드 호출후에 str1에 대문자가
  // 저장되도록 해 보세요.
  str1=str1.toUpperCase();
  System.out.println(str1);
 }
}
===================================================================================
package training;
public class Ex04 {
 public static void main(String[] args) {
  String str01="Java";
  String str02="JAVA";
  System.out.println(str01.length());
  System.out.println(str01.equals(str02)); // 대,소문자 구별
  System.out.println(str01.equalsIgnoreCase(str02)); // 대,소문자 무시
  String str03="Programming";
  String str04=str01.concat(str03); // 문자 결합
  System.out.println(str04);
  // 012345678901234
  // JavaProgramming
  System.out.println(str04.substring(4,8));
  System.out.println(str04.substring(4));
  System.out.println(str04.replace('a','e'));
  // char 형 배열
  char []str={'J','a','v','a'};
  System.out.println(str);
  // 한문자씩 출력하기 - 배열일 경우에는 []연산자에 인덱스
  System.out.println(str[0]);
  System.out.println(str[1]);
  System.out.println(str[2]);
  System.out.println(str[3]);
  // String 객체에 저장된 데이터를 문자 한개씩 출력
  System.out.print(str01.charAt(0)+" ");
  System.out.print(str01.charAt(1)+" ");
  System.out.print(str01.charAt(2)+" ");
  System.out.print(str01.charAt(3)+"\n");
  // 문자열 중에서 문자 한개를 검색
  System.out.println(str04.indexOf('a'));
  System.out.println(str04.lastIndexOf('a'));
  String str05="    pinksung    "; // 사용자가 입력한 아이디
  String str06="pinksung"; // 디비에 저장된 아이디
  System.out.println(str05.equals(str06));
  str05=str05.trim(); // 앞뒤에 입력된 공백문자 제거
  System.out.println(str05.equals(str06));
 }
}
===================================================================================
package training;
public class Ex05 {
 public static void main(String[] args) {
  StringBuffer sb01=new StringBuffer("Java");
  System.out.println("문자열의 길이 : " +sb01.length());
  System.out.println("실제 할당된 메모리 크기 : " +sb01.capacity());
  System.out.println(sb01);
  // 실제 데이터를 저장할 기억공간보다 더 여유롭게 메모리 할당
  sb01.append("Programming");
  System.out.println(sb01);
  String str01="Java";
  str01.replace('a','e'); // String은 불변객체로 메소드 호출후에도 초기값이 유지된다.
  System.out.println(str01);
  System.out.println(sb01);
  sb01.replace(0,4,"MFC"); // StringBuffer는 자신의 값이 변경된다.
  System.out.println(sb01);
  sb01.delete(0,3);
  System.out.println(sb01);
  sb01.deleteCharAt(3);
  System.out.println(sb01);
 }
}
===================================================================================
2008. 8. 19. 16:21

Part 5. 자바에서 자주 사용되는 클래스 II - Wrapper 클래스

기본 데이터형(int, boolean, double 등)의 본질은 그대로 두고 인터페이스만 제공받을 수 있도록 하는 것이 Wrapper 클래스이다.

===================================================================================
package training;
public class Ex01 {
 public static void main(String[] args) {
  int a=10; // 기본데이터형
  // 레퍼 클래스로 변환한 후에는 다양한 메소드를 사용할 수 있다.
  Integer wrapA=new Integer(a);
  Integer wrapB=new Integer("20");
  // wrapA wrapB
  int c;
  // 언박싱 : 레퍼클래스는 힙영역에 데이터를 저장하고 있는데
  // 스택 영역으로 가지고 나오는 것을 intValue() 메소드로
  int n=wrapA.intValue();
  int m=wrapB.intValue();
  c=n+m;
  System.out.println(c);
  // 박싱 : 기본데이터형은 스택영역에 데이터를 저장하고 있는데
  // 힙 영역으로 가지고 들어가는 것을 valueOf() 메소드로
  wrapA=Integer.valueOf(n);
  wrapB=Integer.valueOf(m);
 }
}
===================================================================================

2008. 8. 18. 23:46

Chap 7. 조인

외래키는 중복 될 수 있다.

EQUI JOIN
조인 대상이 되는 두 테이블에서 공통적으로 존재하는 컬럼의 값이 일치되는 행을 연결하여 결과를 생성하는 조인 방법
주의 사항 : 컬럼의 이름이 같을 경우, 혼돈이 오기 때문에 컬럼명 앞에 테이블명을 기술한다.

ex )                                                 
select *                                            deptno(공통) 컬럼을 중심으로
from emp, dept                                   emp테이블과 dept테이블을 조인해서
where emp.deptno = dept.deptno;        결과를 출력

특정 컬럼을 추출하기 위해서는
select ename, dname                         emp 테이블의 ename(이름),
from emp, dept                                   dept 테이블의 dname(부서명)을
where emp.deptno = dept.deptno;         deptno(공통) 컬럼을 중심으로 출력

별칭 부여
select e.ename, d.dname, e.deptno, d.deptno
from emp e, dept d
where e.deptno=d.deptno;
emp테이블을 e(별칭)로 dept테이블을 d(별칭)로 하여 해당 테이블의 컬럼을
e.ename, d.dname로 명시하고 결과값을 출력

EQUI JOIN에 AND 연산을 추가하여 검색
select ename, dname                       emp 테이블의 이름이 SCOTT인 사람의
from emp e, dept d                           이름과 부서명을 출력
where e.deptno=d.deptno
and e.ename='SCOTT';

NON-EQUI JOIN
특정 범위 내의 결과값을 출력하기 위해 WHERE 절에 조인 조건에 연산자를 사용하거나
BETWEEN AND 연산자를 사용할 수 있다.

SELF JOIN
자신의 테이블만으로는 원하는 결과를 알아낼 수 없는 경우, 테이블이 두 개 존재하는 것처럼 자기 자신의 테이블과 조인하는 것을 SELF JOIN이라 한다. 이 경우 FROM 절에 같은 테이블 이름을 두 번 반복하게 되므로 반드시 테이블 별칭을 사용해야 한다.
select employee.ename || '의 매니저는' || manager.ename
from emp employee, emp manager
where employee.mgr=manager.empno;
질의 사항
where 절을 이해하지 못하겠음
employee테이블의 mgr컬럼(번호)과 manager의 empno컬럼(번호)이 동일한지 확인하고
왜 select manager.ename || '의 매니저는' || employee.ename 이렇게 하면 안되는 것인지

OUTER JOIN
외부 조인은 조인 조건에 만족하지 못하였더라도 해당 행을 나타내고 싶을 때 사용한다.
외부 조인은 "(+)" 연산자를 사용하여 NULL 값이기에 배제된 행을 결과에 포함시킬 수 있다.

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

Chap3,4 SQLPLUS 명령어 & 연산자  (1) 2008.08.20
Chap 2. SQL의 기본  (2) 2008.08.20
Chap 8. 서브쿼리  (0) 2008.08.20
Chap 6. 그룹함수  (0) 2008.08.14
Chap 5. SQL 주요 함수  (0) 2008.08.13
2008. 8. 18. 17:38

축! 하루 방문객 10인 달성!

하루 방문객이 며칠전부터 10명을 넘어서기 시작했네~~~ ^^

검색되고 있다는 거고.. ^^

축하~

p.s 나도 초심으로 돌아가고자 하루 300~500 명 되는 방문객을 뒤로 하고
블로그를 옮겼다네~

네이버는 아무래도 키워드 검색으로 들어오는 사람이 많을 지니....

블로그로 브랜드 구축을 하고 싶네

2008. 8. 14. 17:24

Chap 6. 그룹함수

그룹함수는 전체 데이터를 그룹별로 구분하여 통계적인 결과를 구하기 위해서 사용된다.

count : 행의 개수를 카운트한다.
sum : 해당 열의 총 행의 합을 구한다.
avg : 해당 열의 총 행의 평균을 구한다.
min : 해당 열의 총 행 중 최소값을 구한다.
max : 해당 열의 총 행 중 최대값을 구한다.

group by 절
정의
select 컬럼명
from 테이블명
where 조건 (연산자)
group by 컬럼명;

having 절
group by절에 의해 생성된 결과 값 중 원하는 조건에 부합하는 자료를 보고자 할때

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

Chap3,4 SQLPLUS 명령어 & 연산자  (1) 2008.08.20
Chap 2. SQL의 기본  (2) 2008.08.20
Chap 8. 서브쿼리  (0) 2008.08.20
Chap 7. 조인  (1) 2008.08.18
Chap 5. SQL 주요 함수  (0) 2008.08.13