본문 바로가기

Daily Report

121009 Oracle 1차 기본정리

.dual

:가상테이블을 뜻합니다


두 쿼리문의 차이는 무엇일까요?

select 30*60

from dual;


select 30*60

from emp;


결과확인

   



.emp table



number(4,0) => 4는 4byte를 뜻합니다 오라클에서는 오직 number형으로만 사칙연산이 가능합니다

                      to_number() : 정수로 만들어주는 함수입니다

varchar2(7,2) => 2000byte를 담을수 잇습니다, (7,2) 7은 7자리를 뜻하면 2는 소수점 자리를 뜻합니다 7자리중 정수자                      

                     리는 나머지 5자리입니다

null => 아직 확정되지 않은 값을 뜻합니다


참고> 사칙연산 : 1년 연봉을 계산한다고 가정했을때 연산을 한다면 

sal*12*comm을 사용한다면 

다른 값은 문제가 되지 않지만 null을 사용한 값은 연산이 되지 않습니다


수정한다면 NVL을 사용하여

select 

    ename,

    sal,

    sal*12,

    sal*12+NVL(comm,0) as "연봉"

from emp;


as(alias) :  표준 sql구약에 의하면 alias를 사용한다면 as를 항상 사용합니다 사용상의 차이는 없습니다



.distinct

:


select
     distinct deptno
from emp; 

select
     deptno

from emp

group by deptno;



날짜형을 바꾸고 싶다면?

기존 날짜는 82/12/02로 출력됩니다


방법은 환경설정에 NLS를 수정하며 바꾸는 방법과

형변환을 시켜주는 방법이 있습니다


select

   ename,

   to_char(hiredate,'YYYY-MM-DD')

from emp;


하지만 쿼리문의 경우에는 테이블의 데이타가 100만건이면 100만건 형변환을 시켜주기 때문에 가장 좋은방법은

환경설정을 바꿔주거나 처음 만들때부터 원하는 날짜로 입력합니다


추가로 기본적으로  82/12/02로 보이지만

select

    ename,hiredate

from emp

where hiredate >= '1982-01-01';




Wild Card(와일드카드)

: 문자를 대체 한다는 의미로 %, _ 사용하며 주로 like를 사용하여 문자를 검색하여 출력할때 사용합니다


A로 시작하는 이름을 검색하세요!


select

   ename,

   hiredate

from emp

where ename like 'A%';


3번째 문자가 R로 시작하는 이름을 검색하세요

where ename like '__R%';





 in연산자

:


코드를 먼저 보자면

보너스가 300 500 1400 인사람을 검색한다면

select 

   ename,

   hiredate,

   comm

from emp

where comm=300 or comm=500 or comm=1400;


이것을 in연산자로 사용하면

where comm in (300,500,1400);


*단 같은 컬럼내에서만 가능합니다



is null / is not null


코드를 보자면

이것은 맞을까 틀릴까?

where mgr = null;


정답은 틀렸습니다 

null은 확정되지않은 값으로 비교연산을 수행 할 수 없습니다


null인지 아니지를 판단하기 위해서 사용하는 것이

is null / is not null   입니다



round / trunc

: 반올림과 버림입니다 사용방법은 간단합니다


 반올림

버림 

select round(45.193,2)

from dual;

select trunc(45.196,2)

from dual; 

 45.19 45.19



문제>사원번호가 홀수인 사원들의 이름을 출력하시오

보통 이렇게 많이 생각합니다

where (to_number(empno)%2) = 1;


하지만 실행되지 않습니다 수정한다면 아래와 같습니다


select 

empno,

ename

from emp

where mod(empno,2) =1 ;