'전체 글'에 해당하는 글 141건

◆ Null에 대한 처리 ◆

1. Null과 관련된 함수
   ㄱ. nvl 함수
     형식: select nvl(x, y)
        X값이 null일 경우 Y로 출력하고, null이 아닐 경우 X값 대로 출력하게함.


select nvl(null, -800), nvl(0, -800), nvl('이순신', '장군'), nvl(null, '장군') from dual;

 


select employee_id as "사원번호", first_name as "성", last_name as 명, salary 기본급, commission_pct as "수당 퍼센트1",
          nvl(commission_pct, 0) as "수당 퍼센트2",
          nvl(salary * commission_pct, 0) as "수당",
          (salary + nvl(salary * commission_pct, 0)) * 12 as "연봉"
from employees;

※ select에서 기입되는 컬럼명의 최종 출력 컬럼명을 별명처리로 위의 그림(예제2)처럼 바꿀수 있다.(as는 생략가능)
※ 다만 별명안에 공백이 있을 경우 "" 가 반드시 있어야 함
   권장 ex: select employee_id as "사원번호"
      ex: select employee_id "사원번호"
      ex: select employee_id 사원번호

 


   ㄴ. nvl2 함수
     형식: select nvl2(x, y, z)
        X값이 Null이면 Y값 출력, X값이 Null이 아니면 Z값 출력 

select nvl2(0, 100, 200), nvl2(null, 100, 200), nvl2('일', '이', '삼'), nvl2(null, '이', '삼') from dual;

 


   ㄷ. coalesce 함수
     형식: select coalesce(A, B, C, D)
        A가 Null이 아닐경우 A 출력,
        A가 Null일 경우, B 출력,
        B가 Null일 경우, C 출력,
        C가 Null일 경우, D 출력,
        D가 Null일 경우, Null 출력

 

select coalesce(0, 1, 2, 3),
          coalesce(null, 1, 2, 3),
          coalesce(null, null, 2, 3),
          coalesce(null, null, null, 3),
          coalesce(null, null, null, null)
from dual;

 

 

- where 절에서 null로 데이터를 구할때 = 연산자 대신 is 혹은 is not 으로 사용
  (null 이 존재하지 않는 데이터이기 때문에 = 연산자는 처리가 되지 않아 실행 불가)

 

select employee_id as "사원번호", first_name ||' ' ||last_name as "성명", salary as "급여", commission_pct as "커미션 퍼센트"
from employees
where commission_pct is null;   

 

 

select employee_id as "사원번호", first_name ||' ' ||last_name as "성명", salary as "급여", commission_pct as "커미션 퍼센트"
from employees
where commission_pct is not null;

 


- || (백스페이스키 왼편에 붙은 키를 쉬프트키를 누른상태에서 입력)
 결과물에서 여러개의 다른 컬럼을 한개의 컬럼으로 합하여 표시하고자 할때 사용.
 ||의 경우 2개 이상이 가능하므로 이것을 주로 사용.

 

 


select first_name ||' '||  last_name as "성명" from employees;

 


- concat: ||와는 다르게 2개의 컬럼까지만 가능

select concat('이순신의 입사일자는 ', sysdate) from dual;

 

 

select concat('이순신의 입사일자는 ', sysdate, ' 이고,') from dual;

 


- distinct: 결과물중 행 데이터가 동일할 경우 한개만 출력하는 명령

 

select distinct job_id, department_id from employees;

 

- 데이터 타입중 문자 및 날짜 타입은는 좌(왼)측 정렬

- 데이터 타입중 숫자 타입은 우(오른)측 정렬

 

 

◆ like 연산자 ◆

- like는 = 연산자와 비슷한 기능을 가짐.

select * from employees where job_id = 'AD_VP';

 

select * from employees where job_id like 'AD_VP';

 

- like연산자는 = 연산자와는 다르게 Wild Character 인 %, _를 사용하여 보다 구체적인 조건을 사용할 수 있다.
   - %: 글자가 있고 없고 관계없이 모든 글자를 뜻함

select job_id from employees where job_id like 'AD%';

 

    - _: 글자가 무엇이든 상관없이 1글자를 뜻함

select distinct job_id from employees where job_id like '___C%';

 


- escape: like 연산자를 사용할때 데이터내 % 문자가 와일드캐릭터로 인식되어 정확한 데이터 추출이 불가능할때 한글자 단위로 사용함
     (escape 사용할때 탈출 문자는 아무거나 가능하나 보통 \를 사용함)

 

 

select * from tbl_watch where bigo like '%99.99\%%' escape '\';

WRITTEN BY
빨강꼬마

,

이하 내용중
 1. Select 문의 처리 순서
 2. 연산자 우선 처리 순위
는 매우 중요함.


- 반드시 select는 아래의 처리 순서로 기억하여 코딩하는 것이 매우 중요
 - SELECT 문의 처리순서

 ⑤ SELECT [컬럼명]
  - 조회하려는 테이블내 행에서 조회할 컬럼명
 ① FROM [테이블명]
  - 조회하려는 대상 테이블의 이름
 ② WHERE [조건절]
  - 조회하려는 조건에 맞는 특정한 행만 추출해서 메모리에 올리는 것
 ③ GROUP BY 절
 ④ HAVING [그룹함수조건절]
 ⑥ ORDER BY 절

※ 위 순서를 기억하여 from절 부터 코딩하는 습관을 기르도록 하자.

 

- 특정 계정내 테이블과 뷰를 확인하는 명령어
  (특정 계정은 system등과 같이 로그인하는 계정을 의미하며, 해당 계정으로 로그인 한 상태에서 아래 명령어를 입력)

 


select * from tab;

 

- where 구문의 조건절 및 연산자
 - or / in / and 조건절
  - or: 이거 아니면 이거
  - in: in(x,y)  / not 이 붙을때는 컬럼명 앞이 아닌 not in 으로 쓸수 있음
  - and: 이거와 이거를 함께 만족하는 조건
  - >= 크거나 같음
  - <= 작거나 같음
  - != 같지 않음
  - ^= 같지 않음 ->mssql에서는 안먹힘
  - <> 같지 않음
  - where not 컬럼명 = 같지 않음

 - or and not 괄호 연산자가 혼합된 경우, 먼저 실행되는 우선 순위
  - 1. 괄호
  - 2. not
  - 3. and
  - 4. or

 - and 연산자만 있는 처리문인 경우 타이핑된 순서로 처리됨

 - in/not in 같은 경우 오라클 내부에서 or 연산자로 풀이해서 처리하는 순서를 가지고 있기 때문에
   풀이해서 코딩할 경우 내부처리 속도가 조금더 빨라질 수 있음.

 - 괄호는 연산자 처리에 대한 작업자의 코딩을 수월하게 함.


WRITTEN BY
빨강꼬마

,


하루 식비 2만원이다.
현재부터 올해마지막까지 몇일 몇분 몇초가 남았고, 소비되는 식비의 총합은 얼마인지 출력하라

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.


정답.

select trunc((trunc(to_number(to_date('20121231', 'yyyy-mm-dd') - sysdate) * 24 * 60 * 60)/60)/60/24) || '일 ' ||
            trunc(mod((trunc(to_number(to_date('20121231', 'yyyy-mm-dd') - sysdate) * 24 * 60 * 60)/60)/60, 24)) || '시간 ' ||
            trunc(mod(trunc(to_number(to_date('20121231', 'yyyy-mm-dd') - sysdate) * 24 * 60 * 60)/60, 60)) || '분 ' ||
            trunc(mod(trunc(to_number(to_date('20121231', 'yyyy-mm-dd') - sysdate) * 24 * 60 * 60), 60)) || '초' as "남은 시간",
            trunc(to_number(to_date('20121231', 'yyyy-mm-dd') - sysdate)) * 2 || ' 만원' as "식비"
from dual;

쿼리문장을 좀 더 줄일수 있었는데 다 하고나서 복잡해져서 포기 ㅋㅋㅋ



WRITTEN BY
빨강꼬마

,