2008. 8. 13. 15:17

Chap 5. SQL 주요 함수

select 문은 from 절을 반드시 기술해야 하는데 기술할 해당 테이블이 없을 때 DUMMY 테이블인 DUAL을 사용한다.

ROUND(반올림) 함수
지정한 자리 수 이하에서 반올림한 결과 출력
select round(45.293, 2) : 소수점 2자리에서 반올림을 하여 값을 출력하라.
select round(45.293, -1) : 일의 자리에서 반올림을 하여 값을 출력하라.

TRUNC(버림) 함수
지정한 자리 수 이하를 버린 결과 출력
select trunc(45.293, 2) : 소수점 2자리에서 버린 값을 출력

MOD(나머지 구하는) 함수
나누기 연산을 한 후, 몫이 아닌 나머지를 결과로 되돌려주는 함수.

문자 처리 함수
upper : 대문자로 변경
select upper(컬럼명) from 테이블;
lower : 소문자로 변경
select lower(컬럼명) from 테이블;
initcap : 이니셜만 대문자로 변경
select initcap(컬럼명) from 테이블;
length : 문자열의 길이 출력
select length(컬럼명) from 테이블;
instr : 특정문자가 출현하는 위치 출력
select 컬럼명, instr(컬럼명, '찾는문자') from 테이블;
substr : 문자의 일부분을 추출
select 컬럼명, substr(컬럼명, 1, 2) : 첫문자에서 2글자 추출
select 컬럼명, substr(컬럼명, -3, 2) : 맨뒤 세번째문자에서 2글자 추출
sysdate : 시스템에 저장된 현재 날짜 출력

형변환 함수
to_number : 문자 데이터를 숫자 데이터로 변환
to_char : 숫자나 날짜 데이터를 문자 데이터로 변환
to_date : 문자 데이터를 날짜 데이터로 변환
select sysdate - to_date('2008/01/01', 'yyyy/mm/dd') from dual;
오늘 날짜에서 08년1월1일을 뺀 날이 몇일인가

null 변환 함수 nvl
select ename, sal, comm, sal*12+nvl(comm, 0) from emp;
comm 값이 null인 사람은 0으로 처리해서 출력하라

'수업 > 오라클 + 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 6. 그룹함수  (0) 2008.08.14
2008. 8. 13. 14:32

Part 4. 상속 IV 인터페이스

여러가지 다양한 기능을 하는 하위 클래스를 설계하기 위해서 다중상속이 가능한 인터페이스가 필요하다.
인터페이스 내에는 상수 또는 추상메서드만 포함될 수 있다.
정의
접근_지정자 interface 인터페이스 이름{
상수;
접근_지정자 추상메서드();
}
인터페이스에 속한 모든 메서드는 추상메서드이므로 명시적으로 abstract 지시어를 붙이지 않아도 추상 메서드로 인식한다.
===================================================================================
package pack01;
// 추상 클래스 2개 
abstract class Hello{
 public abstract void sayHello();
}
abstract class Goodbye{
 public abstract void sayGoodbye();
}
// 서브 클래스 1개 : extends 다음에는 한개의 슈퍼클래스만 상속 가능
class SubTest extends Hello, Goodbye { // 컴파일 에러
 public void sayHello(){
 }
 public void sayGoodbye(){
 }
}*/
public class Ex01 {
 public static void main(String[] args) {
 
 }
}
===================================================================================
package pack02;
//추상 클래스 1개, 인터페이스 1개 
abstract class Hello{
 public abstract void sayHello();
}
interface Goodbye{
 void sayGoodbye();
}
// 서브 클래스 1개 : extends 다음에는 한개의 슈퍼클래스만 가능
class SubTest extends Hello implements Goodbye {
 public void sayHello(){
 }
 public void sayGoodbye(){
 }
}
public class Ex01 {
 public static void main(String[] args) {
 
 }
}
===================================================================================
package pack03;
// 인터페이스 2개
interface Hello{
 void sayHello();
}
interface Goodbye{
 void sayGoodbye();
}
// implements 다음에는 여러개의 인터페이스를 기술할 수 있다.
class SubTest implements Hello, Goodbye {
 public void sayHello(){
 }
 public void sayGoodbye(){
 }
}
public class Ex01 {
 public static void main(String[] args) {
 
 }
}
===================================================================================
package pack04;
interface Hello{
 void sayHello();
}
interface Goodbye extends Hello{
 void sayGoodbye();
}
class SubTest implements Goodbye{
 public void sayHello(){
 }
 public void sayGoodbye(){
 }
}
public class Ex01 {
 public static void main(String[] args) {
 }
}
=============================  도형의 넓이 계산  ==================================
package pack05;
interface IColor{
 int RED=1; // static final이 생략된
 int GREEN=2; // 이름이 있는 상수
 int BLUE=3;
}
// 동일한 접근방식을 위한 표준안을 제공하기 위해서
abstract class Shape{
 double area; // 추상클래스에 면적을 저장할 변수 선언
 abstract void Calc();
 void prn(){ // 일반 메소드도 정의
  System.out.println(area);
 }
}
// 면적만 구하는 원에서 색상도 있는 원으로 업그레이드
class Circ extends Shape implements IColor{
 int color;
 Circ(){
  color=RED;
 }
 int r=5;
 void Calc(){
  area=r*r*Math.PI;
 }
}
class Rect extends Shape{
 int w=10, h=10;
 void Calc(){
  area=w*h;
 }
}
public class Ex01 {
 public static void poly(Shape ref){ // 업캐스팅 후에는
  // 반지름이 5인 원의 면적
  // 다운캐스팅은 2번 형 검사를 한다.
  // 1. 컴파일시의 발생하는 형검사는 캐스트 연산자로 가능
  // 2. 런타임시 발생하는 형검사는 instanceof 연산자로
  if(ref instanceof Circ){
   Circ c=(Circ)ref;
   System.out.println("반지름이 "+c.r+" 인 원의 면적");
  }
  else if(ref instanceof Rect){
   Rect r=(Rect)ref;
   System.out.println("너비가 "+r.w+" 높이가"+r.h+" 인 사각형의 면적");
  }
  /*Circ c=(Circ)ref;
  System.out.println("반지름이 "+c.r+" 인 원의 면적");*/
  ref.Calc(); // 오버라이딩한 함수를 호출하면 인스턴스에
  ref.prn(); // 의해서 호출될 함수가 결정된다.
 }
 public static void main(String[] args) {
  poly(new Circ());
  poly(new Rect());
  /*Circ c=new Circ();
  c.Calc();
  c.prn();
  Rect r=new Rect();
  r.Calc();
  r.prn();*/
 }
}
===================================================================================
2008. 8. 13. 13:58

Part 4. 상속 III 추상 클래스와 Final

추상 클래스는 동일한 메서드로 접근 가능한 서브 클래스들을 설계하도록 하기 위해서이다.

추상 클래스는 객체를 생성할 수 없다.
정의
abstract class 클래스명 {
  abstract void 메서드명();
}
추상 메서드를 하나라도 가지면 추상 클래스로 설계해야 한다.
추상 메서드는 추상 클래스의 상속을 받는 서브 클래스에서 어떻게 동작할지 반드시 구현 되어야 한다.
===================================================================================
package training;
// 추상클래스 : 한개 이상의 추상메소드를 갖는 객체 생성을 못함
abstract class AbstractClass {
// 몸체가 없는 메소드 : 추상 메소드
 abstract void Method01();
}
// 서브클래스 : 슈퍼클래스로 추상클래스가 사용됨
// 추상 클래스를 슈퍼클래스로 갖는 서브클래스에서는
// 추상메소드를 오버라이딩 해야 한다는 강제성을 부여 받게 된다.
class SubClass extends AbstractClass{
 void Method01(){
  System.out.println("Method01");
 }
}
public class Ex01 {
 public static void main(String[] args) {
  AbstractClass ac=null; // 레퍼런스 변수 선언은 가능
  // ac=new AbstractClass(); // 객체 생성을 못함
  ac=new SubClass(); // 업캐스팅
  ac.Method01(); // 업캐스팅 후에는 서브클래스에서 오버라이딩된 메소드가 호출 됨
 }
}
===================================================================================
// 추상 클래스를 이용한 다형성 : 구체적인 동작은 다르더라도 접근방식은 동일하게
package training;
abstract class Shape{
 public abstract void draw(); // 동일해야하는 접근 방식을 추상메소드로
}
class Circ extends Shape{
 public void draw(){
  System.out.println("원을 그리다");
 }
}
class Rect extends Shape{
 public void draw(){
  System.out.println("사각형을 그리다");
 }
}
class Tri extends Shape{
 public void draw(){
  System.out.println("삼각형을 그리다");
 }
}
public class Ex02 {
 public static void poly(Shape s){
  s.draw();
  // 3 객체 모두에 적용될 공통적인 로직을 기술한다. (길면 길수록 유용)
 }
 public static void main(String[] args) {
  poly(new Circ());
  poly(new Rect());
  poly(new Tri());
  /*Shape s=null; // 객체는 생성하지 못하더라도 레퍼런스 변수 선언은 가능하다.
  s=new Circ();
  s.draw();
  s=new Rect();
  s.draw();
  s=new Tri()
  s.draw();*/
 }
}
===================================================================================
final
사용 범위 : 변수, 메서드, 클래스
final 변수 : 변수를 상수화 시켜서 저장된 값이 변하지 않는다.
final 메서드 : 서브클래스에서 오버라이딩을 허용하지 않는다.
final 클래스 : 상속이 허용되지 않는다.

===================================================================================
package training;
class FinalTest{
 final int A=10; // 이름이 있는 상수
 // int a=10; // a는 변수
 final public int getA(){
  return A;
 }
}
final class SubTest extends FinalTest{
 // FinalTest 클래스의 final getA() 메소드는 오버라이딩이 불가능
 /*public int getA(){
  return A;
 }*/
}
/*class SubEx extends Subtest{ // final SubTest는 서브클래스를 만들 수 없다.
 
}*/
public class Ex04 {
 
 public static void main(String[] args) {
  FinalTest ft=new FinalTest();
  // ft.a=20; // final로 선언된 변수는 상수화되어 값을 변경할 수 없기에 대입연산자 왼쪽에 못옴
  // 10=20; // 상수는 값이 변할수 없기에 대입연산자 왼쪽에 못옴
  System.out.println(ft.A);
 }
}
===================================================================================