'허니몬'에 해당되는 글 349건

허니몬에 관한 보고서/생물학도 허니몬
올해 전세계적인 최대 이슈는 인플루엔자A의 발병과 전세계적인 감염이 되지 않을까 싶다. 멕시코에서 발병한(일부 보도에서는 멕시코와 인접한 미국 텍사스 주에서 발병했다고도 함) 인플루엔자A는 초기 돼지에게서 감염된다고 해서 '돼지독감' 혹은 '돼지인플루엔자A'라고 불리고도 했다.
  WHO에서 인플루엔자A의 감염원이 돼지가 아니라고 보도하면서 겨우 누명을 벗게된 돼지들....

  일반적으로 질병은 종간에 감염되지 않는다는 것이 정설이다. 하지만, 최근 들어서 서로다른 이종간(예, 돼지 - 사람)에 전염되는 경우가 나타나고 있어 심각한 상황을 야기하고 있다. 이는 기존의 질병과는 다르게 급진적인 강한 독성을 가진 질병으로 나타나는 경우가 대부분이다. 이미 20세기에 3번의 큰 판데믹이 발생하면서 수많은 생명을 앗아가기도 했다.
사용자 삽입 이미지
출처 : http://www.who.int/csr/don/2009_05_03a/en/index.html

세계보건기구 WHO(http://www.who.org)에서는 신종플루(인플루엔자 A, H1N1)와 관련하여, 2009년 5월 3일까지, 18개국에서  898건의 인플루엔자A(H1N1)에 대한 감염사례가 있었다고 공식발표했다.

멕시코에서는 506명의 감염자(19명의 사망자를 포함한)가 발생한였다. 우리나라의 경우에는 현재 1명의 공식 감염자(멕시코에 다녀오신 수녀님)가 보고되었으며, 추가 감염 추정환자가 있다는 보도도 있었습니다.
● 확진환자 : 감염이 확실히 진단된 환자
● 추정환자 : 감염이 확실시 진단되지 않고 추정만 되는 환자


유럽과 아메리카 대륙에서는 경기를 일으킬만큼 극성스러운 검역과정과 대처모습을 보이는데 반해서 우리나라의 경우에는 보건복지가족부(이름참 길다!!)에서 우리나라 검역체계에서는 큰 문제가 없다고 이야기 하지만,

● “동승객 단순 기침” 정밀검사 안해… 뚫린 검역
http://news.khan.co.kr/kh_news/khan_art_view.html?artid=200905031833265&code=940601

등의 기사가 보이고 있다. 2차 감염의 고비가 오늘이라고 하더군요. 다른 국가들에서도 인플루엔자A의 감염확산속도가 소강상태에 들면서 어느정도 안도의 한숨을 내쉬는 모습을 보여주고 있습니다.

● KBS 스페셜에서는 2009. 05. 03.
http://www.kbs.co.kr/1tv/sisa/kbsspecial/vod/1584103_11686.html
인플루엔자A가 발생한 멕시코를 방문하여 현지의 모습을 보여주는 적극적인 모습을 보여주었습니다. ㅡㅅ-)> 이건 참 잘했음. KBS 답지 않다랄까...?
인플루엔자A가 감염된 멕시코 현지의 모습은 삭막하고 공포에 질려 혼돈에 빠져있는 모습이었다.

● National GeoGraphic 에서 신종 바이러스 니파 에 대한 방송도 있었다.
니파는 다행히 보유숙주(큰박쥐가 보유숙주 였으며, 돼지농가에서 과일을 농작하면서 큰박쥐들을 불렀고, 큰박쥐가 과일을 먹다가 떨어뜨린 과일(큰박쥐의 타액이 잔뜩 묻은)을 먹고 돼지가 니파 바이러스에 감염되어 사람에게 전염을 시킨 형태)를 찾아서 백신을 개발할 수가 있었다.

보유숙주(Reservoir host) - (HOST(숙주) - 위키백과) : 바이러스에 감염되었지만 죽지 않은 숙주를 뜻함.

지금 지구는 판데믹  ( Pandemic - 위키백과 ) 에 대한 두려움에 빠져 있다.
사용자 삽입 이미지

판데믹(Pandemic)이란, 특정한 전염성 질환이 전 지구적으로 급속히 확산돼 크게 유행하는 현상을 뜻한다.

판데믹의 세가지 조건
1. 바이러스의 변종이 많이 생기는 대변이(하나의 숙주 세포에 두 가지 바이러스가 동시에 들어가 유전자 재조합이 일어나는 것) 가 발생해야 한다.
2. 인체가 변종 바이러스에 감염된 뒤 치명적인 증상을 보여야 한다. 즉, 변종 바이러스가 충분한 독성을 지녀야 한다.
3. 인간 대 인간의 감염이 이뤄줘야 한다.

지금 인플루엔자A(H1N1)의 경우에는 위의 세가지 조건을 모두 갖추고 있다. 20세기에만 세번의 창궐(40년 주기)이 있었기 때문에 전세계적으로 이번 인플루엔자A(H1N1)에 대한 두려움은 클 수밖에 없다.

이번 인플루엔자A는 조류, 돼지, 인간의 유전자형을 가지고 있는 변형 바이러스라고 한다. 이는 더욱 강한 독성으로 인간을 위협하게 될 것이다. 감염 경로로 보자면, 조류 인플루엔자가 돼지 몸에 전염되고 그 안에서 '유전자 재구성' 과정을 거쳐 변형 바이러스가 새롭게 탄생하게 되는 것이다.

우리나라는 과연 이 판데믹의 공포에서 안전할까?

우선은
● 외출시 손발을 깨끗하게 씻고,
돼지인플루엔자를 손씻기로 예방합시다.. ( http://blog.daum.net/blog4074/8912818 )
범국민손씻기운동본부(손씻는 방법) : http://www.handwashing.or.kr/tmpl/?main_cd=1&sub_cd1=1
● 항생제의 남용을 줄이고(항생제의 남용은 슈퍼바이러스를 탄생시키고 있다),
● 검역을 철저히 하는 방법이 가장 최우선적으로 진행되어야할 행동 습관이 되어야 할 것이다.





오늘 추가적으로 오른 기사들을 보니, 공포심을 더욱 일으키고 있다. ㅡㅅ-);;
하지만 정확하게 알고 침착하게 대처하면 피해는 최소화할 수가 있다... 라고 허니몬은 생각합니다. 참고로, 허니몬은 나름 생물학도(생물학과 졸업생) 입니다. 의학쪽과는 크게 관련은 없지만, 생물학 쪽에는 관심이 좀 많아요. ^^;;

허니몬에 관한 보고서/예측불허 허니몬
티스토리의 플러그인인 접속자수 카운트 프로그램의 업데이트 이후, 내 블로그의 방문객 수는 급감!!!
사용자 삽입 이미지

출처 : http://www.flickr.com/photos/dehol/759461543

나는 대략난감!!!

하지만, 요즘 블로그에 올리는 글들의 퀄리타가 떨어지거나 한쪽에 편향되었음은 감출 수 없습니다.

다시 시작하는 마음으로 블로거를 다시 시작해야겠습니다.

ㅡㅅ-)> 제 블로그에서 거품이 빠져버리니 이런 허무함을 남겨주는군요.

자!! 다시 출발!! 고고싱!!!
허니몬에 관한 보고서/예측불허 허니몬
  지금 현재 허니몬은 양재역 부근에 위치한 CJ정보기술교육센터(http://www.cjedu.co.kr)에서 3월 JAVA 전문가 과정에서 교육생으로서 교육을 받고 있습니다. 작년 12월 초에 실업자가 되고 이제서야 취업준비에 나선 느긋한 취업준비생이랍니다. ㅡㅅ-);; 청년실업자 70만 시대인데 말이죠...

  대학 시절에 프로그래밍 개론을 배운 덕분에, 지금 교육 과정 속에서는 나름 에이스로서 자리를 잡았습니다. 그 덕분에 여기저기서 질문을 많이 받습니다. 제가 성질이 워낙 뭐같아서 기분이 나쁘면 감정을 그대로 표현을 하게 됩니다. 질문을 받고 화내는 이유들 몇가지를 적어보겠습니다.

● 질문하는 사람과 답변하는 사람의 자세에 대한 토론이 있었던 KLDP 게시판 : http://kldp.org/node/67740
● 온라인 에티켓에 대한 토론 : http://kldp.org/node/67735
● 필수적인 온라인 에티켓 : http://www.microsoft.com/korea/protect/computer/basics/netiquette.mspx
How To Ask Questions The Smart Way : http://wiki.kldp.org/wiki.php/DocbookSgml/Ask-TRANS

사진출처 : http://www.flickr.com/photos/doberagi/1404539812/


1. 무조건 질문한다.

질문을 하는 사람은 궁금해서 할겁니다. 하지만, 질문하는 그 모습을 보고 있으면, 그 사람이 질문을 하는 이유가 대략적으로 나마 짐작을 할 수가 있습니다.
제가 좋아하는 질문자의 모습은, 책과 인터넷 검색을 해보고 몇가지 조건을 찾았지만 그것을 정확하게 찾지 못했거나 이해하기 어려울 때 질문을 던지는 겁니다.
습관적으로 질문을 던지는 사람이 있습니다.

'이건 왜 그래요?', '이건 뭐에요?', '이런이런 기능을 하는 건 뭐죠?'

어린아이가 하는 질문이라면, 질문이 끝이 없어서 성심성의껏 답변해주려고 노력할 겁니다. 하지만, 20세가 넘은(우리 반의 경우에는 20대가 꺽인 이들이 대부분)이들이 아무런 사고(생각)의 과정없이 그저 떠오르는 대로 즉각적인 답변을 얻고자 던지는 질문은 그 질문을 받는 사람을 번거롭게 만듭니다. 이곳에서 이런 유형의 질문이 워낙에 많다보니 한달이 조금 넘은 지금에 와서는 이런 질문에 대해서는 일체의 답변을 받고 있지는 않습니다. 이런 질문을 던지러 오면 인상쓰면서 쳐다봐버리니까 다들 저에 대한 발길을 끊더군요. ㅡㅅ-)>

제발, 자기 안에서 해결의 과정을 거치고 난 뒤에 모르는 것들을 추스려서 질문해주세요. 나는 네이놈 지식인이 아닙니다. 나는 내공도 필요없단 말입니다. ㅡㅅ-);; 내공 없이도 궁금한 사항은, 질문만 잘 던지면 인터넷의 바닷 속에서 낚아 올릴 수 있습니다.



2. 상대를 배려하지 않고 질문을 던진다.

저도 옆에서 물어보는 사람과 같이, 공부를 하고 있는 교육생의 입장입니다. 그리고 진도를 따라가느라 열심히 수업에 집중하고 있습니다. 공부를 하다보면 궁금한 사항이 있을 수 있습니다. 그걸 바로 물어봐야 직성이 풀릴 수 있습니다. 하지만, 그건 자신만의 생각일 뿐이고, 저는 그 질문을 받을 준비가 안되어 있을 가능성이 높습니다. 한창 짱구를 굴리면서 내 생각의 넓이를 확장하고 있는 단계에서 들어오는 질문은, 적어도 단순한 제 자신에게는, 제 리듬을 깨뜨리는 브레이크 신호를 날려줍니다. 브레이크 신호가 들어오면서 깨지는 흐름에 기분마저 깨지게 됩니다. 그러면, 욱하는 마음에 제 가슴 속에 차오르기 시작하고, 좋게 의견이 나갈리가 없습니다.

온라인이라면 크게 상관이 없지만, 오프라인 상에서라면, 상대방의 상황을 살피고 상황에 따라서 질문을 던지는 눈치도 필요합니다. 한창 바쁜 사람에게 질문을 던져봐야, 질문의 앞머리가 짤려버리고 질문을 다시 말해야 하는 번거로움과 함께 상대방의 기분을 상하게 할 수도 있음을 유의하시기 바랍니다.



3. 단답형 질문을 던지고 정확한 답변을 요구한다.

'이건 왜 그래요?', '이건 뭐에요?', '이런이런 기능을 하는 건 뭐죠?'

라는 질문을 받으면, 여러분은 이 질문이 무엇을 말하는 것인지 아시겠습니까?

솔직히 말해서 저는 모르겠습니다. ㅡㅅ-); 저 질문이 무슨 뜻인지 아신다면, 당신은 쪽집게 점쟁이 이거나 갓 일 겁니다. 풋~
제가 말하고 싶은 요지는,

질문을 던질 때에도 자신이 얻고자 하는 해답의 방향을 어느정도 제시를 해줘야 한다는 겁니다.

지금 제가 배우고 있는 SQL의 예를 들어본다면,
"SELECT 문을 WHERE 절에도 쓸 수가 있나요?", "ORDER BY에는 조건식을 쓸 수 없나요?" 라는 식의...
자신이 궁금했던 사항, SELECT 문, WHERE절, ORDERY BY 등 주제어 혹은 주어가 뚜렷하게 들어가 있어야 한다는 겁니다. 그래야 답변자도 질문의 요지를 파악하고 해답에 어느정도 근접한 답변을 줄 수가 있습니다.




그 이외에도 질문자의 잘못된 습관은 여러가지가 있습니다. 워낙에 많아서 뽑아내기가 어려울 만큼....

현명한 질문습관 : 질문을 해결해줄 사람의 상태를 살피고, 그 사람에게 여유가 생겼을 때 정확하고 구체적인 질문을 던져줘야 하는 겁니다. 우선적으로 질문자가 스스로 어느 정도의 해결노력이 있어야 합니다. ^^
허니몬의 IT 이야기/프로그래머, '코드 엔지니어'

● 과제 09/04/24


** 함수 :좀더 강력한 질의문을 작성하기 위해서

1)오라클제공 내장함수

 - 단일행함수
    - 문자형함수:lower,upper,initcap,substr,instr,
            lpad,rpad,ltrim,rtrim등
   - 숫자형함수 :round,trunc,mod등
   - 날짜형함수 :add_months,months_between,
             next_day,last_day,sysdate등
   - 형변환함수 : to_char,to_number,to_date등
   - 기타 함수 :nvl,decode,case등
- 그룹행함수 :sum,count,max,min,avg등

 

2)사용자 함수 : pl/sql로 작성

** 단일행함수의 사용예

1.select문장에서
select round(72.15,1),round(72.15,-1),round(72.15,0)
from dual;   ==>함수를 사용법,결과를 테스트하고자 할때

 

  1. select ename,sal,round(sal,-1)
    from emp;

 

  1. select ename,sal,round(sal,-2),hiredate ==>표현에 관계되는 절
    from emp
    where round(sal,-2)>=1000;   ==>행을 제한하는 조건절

 

2.그외문장에서

  1. update emp
    set sal=round(sal,-1)
    where ename='SCOTT';

 


문제1) EMP 테이블에서 scott의 사원번호,성명,담당업무(소문자로),부서번호를 출력하여라.
select empno,ename,lower(job),deptno
from emp
where lower(ename)='scott';

 

문제2) DEPT 테이블에서 모든 부서의 부서명,위치를 첫 글자들만 대문자로 변환하여 출력하여라.
select initcap(dname),initcap(loc)
from dept;

 

문제3) EMP 테이블에서 이름의 첫글자가 ‘K’ 보다 크고 ‘Y’보다 작은 사원의 사원번호, 이름, 업무, 급여, 부서번호를 출력하여라. 단 이름순으로 정렬하여라.
select ename,substr(ename,1,1),substr(ename,1),substr(ename,2,2)
from emp;

 

select empno,ename,job,sal,deptno
from emp
where substr(ename,1,1)>'K' and substr(ename,1,1)<'Y'
order by ename;

 

문제4) EMP 테이블에서 부서가 20번인 사원의 사원번호, 이름, 이름의 자릿수, 급여, 급여의 자릿수를 출력하여라.
select empno,ename,length(ename),sal,length(sal)
from emp
where deptno=20;

 

문제5) EMP 테이블에서 급여를 30으로 나눈 나머지를 구하여 출력하여라.
select ename,sal,mod(sal,30)
from emp;

 

** 오라클 날짜타입:date

- 반드시 값이 세기,년,월,일,시,분,초 7개의 값이 저장된다.

 

select * from nls_session_parameters;   ==>현재 세션에 설정된 환경설정값들을 확인

alter session set nls_date_format='rrrr/mm/dd:hh24:mi:ss';  ==>현재 세션의 날짜표현방법을 이런패턴으로 바꿔라~
select * from emp;
alter session set nls_date_format='dd/mm/rr';

 

select * from emp
where hiredate >'81/01/01';  ==>?(에러)

 

alter session set nls_date_format='rr/mm/dd';

 

select * from emp
where hiredate >'81/01/01';  ==>?

 

- 오라클 날짜값은 표현하는 범위가 BC xxxx~ AD 9999까지 표현된다.

 

- 날짜 기본연산이 가능

  날짜 +숫자(day)  ==>날짜
  날짜 - 숫자  ==>날짜
  날짜 - 날짜  ==>day
  날짜 + 숫자/24 ==>날짜
  날짜 - 숫자/24

 

select sysdate,sysdate-to_date('2009/03/16','rrrr/mm/dd'),sysdate+20/24
from dual;

 

문제6) EMP 테이블에서 현재까지의 근무일수가 몇 주 몇 일인가를 출력하여라. 단 근무 일수가 많은 사람순으로 출력하여라.
select ename,hiredate,trunc(sysdate-hiredate) "총근무일수",trunc(trunc(sysdate-hiredate)/7) "총근무주수",trunc(mod((sysdate-hiredate),7)) "나머지일수"
from emp
order by 3 desc;

 

문제7) EMP 테이블에서 10번 부서원의 현재까지의 근무 월수를 계산하여 출력하여라.
select ename,hiredate,trunc(months_between(sysdate,hiredate))
from emp
where deptno=10

 

문제8) EMP 테이블에서 10번 부서원의 입사 일자로부터 5개월이 지난 후 날짜를 계산하여 출력하여라.
select ename,hiredate,add_months(hiredate,5)
from emp
where deptno=10;

 

문제9) EMP 테이블에서 10번 부서원의 입사 일자로부터 돌아오는 금요일을 계산하여 출력하여라.
select ename,hiredate,next_day(hiredate,6)
from emp
where deptno=10;

 

문제10) EMP 테이블에서 입사한 달의 근무 일수를 계산하여 출력하여라. 단 토요일과 일요일도 근무 일수에 포함한다.
select ename,hiredate,last_day(hiredate),last_day(hiredate)-hiredate
from emp;

 

** 형변환 :데이터타입이 변환

- 자동형변환 :오라클이 자동으로 변환
- 수동형변환 :개발자가 함수를 사용해서 변환

 

** 자동형변환의 예

create table test(
id    number,
name    varchar2(10));
desc test
select * from test;
insert into test(id,name)
values(1,10);    ==>?(성공 : 숫자10을 자동으로 문자10으로 형변환시켜서 입력)
select * from test;
select ename+100 from emp;  ==>?(에러)
select id+10,name+100 from test;  ==>?(성공 : 문자 10을 자동으로 숫자10으로 변환시켜서 처리)

** 수동형변환

- to_char  함수 :날짜나 숫자를 문자로 변환하는 함수

날짜변환의 예

-현재의 세기,년,월,일,시,분,초정보및 요일정보를 확인

select sysdate,
to_char(sysdate,'rrrr/mm/dd:hh24:mi:ss:day')
from dual;

 

- rr과 yy의 차이점

rr : 년도가 0~49년도일 경우에는 현재세기로 인식하고, 50~99년도일 경우에는 이전세기로 인식
yy :무조건 현재세기

select * from nls_session_parameters;
==>현재 nls_date_format의 값이 rr/mm/dd로 설정되어 있음

select *
from emp
where hiredate >'81/01/01';   ==>결과1

alter session set nls_date_format='yy/mm/dd';

select *
from emp
where hiredate >'81/01/01';  ==>결과1과의 차이점

 

2)숫자변환의 예
emp테이블의 사원들의 급여를 돈의 단위처럼 표

 

- to_date함수 : 문자를 날짜로 변환시켜주는 함수

insert into emp(empno,ename,hiredate)
values(8000,'홍길동',to_date('10-12-2009:10','dd-mm-rrrr:hh24'));

select * from emp;

 

** DECODE/CASE함수

 

select ename,deptno,
decode(deptno,10,'10번부서',20,'20번부서',30,'30번부서','기타부서') "부서",
case when deptno=10 then '10번부서'
    when deptno=20 then '20번 부서'
    when  deptno=30 then '30번 부서'
    else  '기타부서'
end  "case문"
from emp;

SQL : RDB 조작하는 언어

1) SELECT : 조회

2) Create, Alter, Drop, Truncate ....

 : DDL(Data Definition Language) - 생성, 수정, 삭제

3) Insert, Update, delete

 : DML(Data Manipuation Language) - 데이터 입력, 수정, 삭제

4) Commit, Rollback, Savepoint

 : TCL (Transaction Control Language) - 트랜잭션 종료 및 취소

5) Grant, Revoke

 : DCL(Data Control Language) - 권한부여, 취소

 

Data dictionary table

 = System table

 = catalog table

ex) tab, nls_session_parameters, all_users, user_tab_columns

 

※ 왜(Why!!! Tell me Why! )!? 에 집중하라!!


실행순서 Select 문

3)

1)

2)

4)

Select => 검색 컬럼

From  = > 테이블명 지정

Where = > 행을 제한하는 조건절

Order by 컬럼명 / 숫자 / 별칭 + [ ASC / DESC ]

 

SELECT * FROM dual;   dual 테이블은 함수 test를 위해서 오라클에서 제공하는 1행 1열의 테이블이다.

 

단일행함수

  1. SELECT ROUND(72.15, 1), ROUND(72.15, -1), ROUND(72.15, 0) FROM dual;
SQL> SELECT ROUND(72.15, 1), ROUND(72.15, -1), ROUND(72.15, 0) FROM dual;

ROUND(72.15,1) ROUND(72.15,-1) ROUND(72.15,0)
-------------- --------------- --------------
         72.2              70             72

 

  1. SELECT ename, sal, round(sal, -1) from emp;
SQL> SELECT ename, sal, round(sal, -1) from emp;

ENAME             SAL ROUND(SAL,-1)
---------- ---------- -------------
SMITH             800           800
ALLEN            1600          1600
WARD             1250          1250
JONES            2975          2980
MARTIN           1250          1250
BLAKE            2850          2850
CLARK            2450          2450
SCOTT            3000          3000
KING             5000          5000
TURNER           1500          1500
ADAMS            1100          1100
JAMES             950           950
FORD             3000          3000
MILLER           1300          1300

 

  1. SELECT ename, sal, round(sal, -1), hiredate FROM emp WHERE ROUND(sal, -1) >= 2000;
SQL> SELECT ename, sal, round(sal, -1), hiredate FROM emp WHERE ROUND(sal, -1) >= 2000;

ENAME             SAL ROUND(SAL,-1) HIREDATE
---------- ---------- ------------- --------
JONES            2975          2980 81/04/02
BLAKE            2850          2850 81/05/01
CLARK            2450          2450 81/06/09
SCOTT            3000          3000 87/04/19
KING             5000          5000 81/11/17
FORD             3000          3000 81/12/03

 

문제 1) EMP 테이블에서 scott의 사원번호, 성명, 담당업무(소문자로), 부서번호를 출력하여라.

  1. SELECT empno, ename, LOWER(job) "JOB" FROM emp WHERE ename = 'SCOTT';         //LOWER() 소문자 만들어줘라.
  2. SELECT empno, ename, LOWER(job) "JOB" FROM emp WHERE LOWER(ename) = 'scott';  // 요로코롬 해주는 게 나을듯. 이름 대소문자 구분할 필요 없음.
SQL> SELECT empno, ename, LOWER(job) FROM emp WHERE ename = 'SCOTT';

    EMPNO ENAME      LOWER(JOB
---------- ---------- ---------
     7788 SCOTT      analyst

 

문제 2) DEPT 테이블에서 모든 부서의 부서명, 위치를 첫 글자만 대문자로 변환하여 출력하여라.

  1. SELECT dname, INITCAP(loc) FROM dept; // 두 개 항목 모두를 변경하는 것이군요.
  2. SELECT INITCAP(dname), INITCAP(loc) FROM dept;
SQL> SELECT INITCAP(dname), INITCAP(loc) FROM dept;

INITCAP(DNAME) INITCAP(LOC)
-------------- -------------
Accounting     New York
Research       Dallas
Sales          Chicago
Operations     Boston

 

문제 3) EMP 테이블에서 이름의 첫글자가 'K'보다 크고 'Y'보다 작은 사원의 사원번호, 이름, 업무, 급여, 부서번호를 출력하여라. 단, 이름순으로 정렬하여라.

  1. SELECT empno, ename, job, sal, deptno FROM emp WHERE ( SUBSTR(ename,1,1) > 'K' ) AND ( SUBSTR(ename,1,1) < 'Y' ) ORDER BY ename;
SQL> SELECT empno, ename, job, sal, deptno FROM emp WHERE ( SUBSTR(ename,1,1) > 'K' ) AND ( SUBSTR(ename,1,1) < 'Y' ) ORDER BY ename;

    EMPNO ENAME      JOB              SAL     DEPTNO
---------- ---------- --------- ---------- ----------
     7654 MARTIN     SALESMAN        1250         30
     7934 MILLER     CLERK           1300         10
     7788 SCOTT      ANALYST         3000         20
     7369 SMITH      CLERK            800         20
     7844 TURNER     SALESMAN        1500         30
     7521 WARD       SALESMAN        1250         30

 

  1. SELECT ename, substr(ename, 1), substr(ename, 1, 1),  substr(ename, 2, 2) FROM emp;

SQL> SELECT ename, substr(ename, 1), substr(ename, 1, 1),  substr(ename, 2, 2) FROM emp;

ENAME      SUBSTR(ENAME,1)      SU SUBS
---------- -------------------- -- ----
SMITH      SMITH                S  MI
ALLEN      ALLEN                A  LL
WARD       WARD                 W  AR
JONES      JONES                J  ON

+.

.
MARTIN     MARTIN               M  AR
BLAKE      BLAKE                B  LA
CLARK      CLARK                C  LA
SCOTT      SCOTT                S  CO
KING       KING                 K  IN
TURNER     TURNER               T  UR
ADAMS      ADAMS                A  DA
JAMES      JAMES                J  AM
FORD       FORD                 F  OR
MILLER     MILLER               M  IL

 

문제 4) EMP 테이블에서 부서가 20번인 사원의 사원번호, 이름, 이름의 자릿수, 급여, 급여의 자릿수를 출력하여라.

  1. SELECT empno, ename, LENGTH(ename), sal, LENGTH(sal) FROM emp WHERE deptno = 20;
SQL> SELECT empno, ename, LENGTHB(ename), sal, LENGTHB(sal) FROM emp WHERE deptno = 20;

    EMPNO ENAME      LENGTHB(ENAME)        SAL LENGTHB(SAL)
---------- ---------- -------------- ---------- ------------
     7369 SMITH                   5        800            3
     7566 JONES                   5       2975            4
     7788 SCOTT                   5       3000            4
     7876 ADAMS                   5       1100            4
     7902 FORD                    4       3000            4

 

문제 5) emp 테이블에서 급여를 30으로 나눈 나머지를 구하여 출력하여라.

  1. SELECT MOD(sal,30) FROM emp;
SQL> SELECT MOD(sal,30) FROM emp;

MOD(SAL,30)
-----------
        20
        10
        20
         5
        20
         0
        20
         0
        20
         0
        20
        20
         0
        10

 

날짜 관련 변경

  1. select * from nls_session_parameters;  
  2. //현재 세션(현재창에서만)에 설정된 환경파라미터의 값들을 조회
  3. alter session set nls_date_format='rrrr/mm/dd:hh24:mi:ss';
  4. //날짜 관련 출력형식을 YYYY/MM/DD:24시:분:초 로 출력한다.
  5. ALTER SESSION SET NLS_DATE_FORMAT='dd/mm/rr';
  6. ALTER SESSION SET NLS_DATE_FORMAT='rr/mm/dd';

 

  1. SELECT '2000/01/01' +30 from dual;
  2. // 오류 발생
  3.  SELECT to_date('2000/01/01', 'rrrr/mm/dd') +30 from dual;
  4. // '2000/01/01' 문자열을 'rrrr/mm/dd' 형식으로 변경하는 함수 to_date(,)

 

  1.  SELECT to_date('2000/01/01', 'rrrr/mm/dd') +30, sysdate  from dual;
SQL>  SELECT to_date('2000/01/01', 'rrrr/mm/dd') +30, sysdate  from dual;

TO_DATE( SYSDATE
-------- --------
00/01/31 09/04/24

 

  1. SELECT SYSDATE, SYSDATE-TO_DATE('2009/03/16', 'RRRR/MM/DD') from dual;
SQL> SELECT SYSDATE, SYSDATE-TO_DATE('2009/03/16', 'RRRR/MM/DD') from dual;

SYSDATE  SYSDATE-TO_DATE('2009/03/16','RRRR/MM/DD')
-------- ------------------------------------------
09/04/24                                 39.4715741

 

  1. SELECT SYSDATE, SYSDATE-TO_DATE('2009/03/16', 'RRRR/MM/DD'), sysdate + 20/24  from dual;
  2. 시간을 더하는 것은 + Hour / 24
SQL> SELECT SYSDATE, SYSDATE-TO_DATE('2009/03/16', 'RRRR/MM/DD'), sysdate + 20/24  from dual;

SYSDATE  SYSDATE-TO_DATE('2009/03/16','RRRR/MM/DD') SYSDATE+
-------- ------------------------------------------ --------
09/04/24                                 39.4720718 09/04/25

 

문제 6) emp 테이블에서 현재까지의 근무일수가 몇 주 몇 일 인가를 출력하여라. 단, 근무 일수가 많은 사람순으로 출력하여라.

  1. SELECT ename,   sysdate,   TRUNC(sysdate-hiredate,0) "총 근무일수",   TRUNC(  ( TRUNC(sysdate-hiredate,0) -  TRUNC(MOD( (sysdate-hiredate), 7)) ) / 7 , 0 ) "주",    TRUNC(MOD( (sysdate-hiredate), 7)) "일" FROM emp ORDER BY (sysdate-hiredate) DESC;
  2. // 아래 것도 결과는 같다.
  3. SELECT ename,   sysdate,   TRUNC(sysdate-hiredate,0) "총 근무일수",   TRUNC(TRUNC( (sysdate-hiredate)/ 7) , 0 ) "주",    TRUNC(MOD( (sysdate-hiredate), 7)) "일" FROM emp ORDER BY (sysdate-hiredate) DESC;
SQL> SELECT ename,   sysdate,   TRUNC(sysdate-hiredate,0) "총 근무일수",   TRUNC(  ( TRUNC(sysdate-h
iredate,0) -  TRUNC(MOD( (sysdate-hiredate), 7)) ) / 7 , 0 ) "주",    TRUNC(MOD( (sysdate-hiredate),
7)) "일" FROM emp ORDER BY (sysdate-hiredate) DESC;

ENAME      SYSDATE  총 근무일수         주         일
---------- -------- ----------- ---------- ----------
SMITH      09/04/24       10355       1479          2
ALLEN      09/04/24       10290       1470          0
WARD       09/04/24       10288       1469          5
JONES      09/04/24       10249       1464          1
BLAKE      09/04/24       10220       1460          0
CLARK      09/04/24       10181       1454          3
TURNER     09/04/24       10090       1441          3
MARTIN     09/04/24       10070       1438          4
KING       09/04/24       10020       1431          3
JAMES      09/04/24       10004       1429          1
FORD       09/04/24       10004       1429          1
MILLER     09/04/24        9953       1421          6
SCOTT      09/04/24        8041       1148          5
ADAMS      09/04/24        8007       1143          6

 

문제 7) emp 테이블에서 10번 부서원의 현재까지의 근무 월수를 계산하여 출력하여라.

  1. SELECT ename, hiredate, TRUNC( MONTHS_BETWEEN( sysdate, hiredate) ) From emp WHERE deptno = 10;
SQL> SELECT ename, hiredate, TRUNC( MONTHS_BETWEEN( sysdate, hiredate) ) From emp WHERE deptno = 10;


ENAME      HIREDATE TRUNC(MONTHS_BETWEEN(SYSDATE,HIREDATE))
---------- -------- ---------------------------------------
CLARK      81/06/09                                     334
KING       81/11/17                                     329
MILLER     82/01/23                                     327

 

문제 8) emp 테이블에서 10번 부서원의 입사 일자부터 5개월이 지난 후 날짜를 계산하여 출력하여라.

  1. SELECT ename, hiredate, ADD_MONTHS(hiredate, 5) FROM emp WHERE deptno = 10;
  2. // ADD_MONTH  사용6
SQL> SELECT ename, hiredate, ADD_MONTHS(hiredate, 5) FROM emp WHERE deptno = 10;

ENAME      HIREDATE ADD_MONT
---------- -------- --------
CLARK      81/06/09 81/11/09
KING       81/11/17 82/04/17
MILLER     82/01/23 82/06/23

 

문제 9) emp 테이블에서 10번 부서원의 입사 일자로부터 돌아오는 금요일을 계산하여 출력하여라.

  1. SELECT ename, hiredate, NEXT_DAY(hiredate, 6) FROM emp WHERE deptno = 10;
  2. SELECT ename, hiredate, NEXT_DAY(hiredate, '금') FROM emp WHERE deptno = 10;
  3. //NEXT_DAY 사용
SQL> SELECT ename, hiredate, NEXT_DAY(hiredate, 6) FROM emp WHERE deptno = 10;

ENAME      HIREDATE NEXT_DAY
---------- -------- --------
CLARK      81/06/09 81/06/12
KING       81/11/17 81/11/20
MILLER     82/01/23 82/01/29

SQL> SELECT ename, hiredate, NEXT_DAY(hiredate, '금') FROM emp WHERE deptno = 10;

ENAME      HIREDATE NEXT_DAY
---------- -------- --------
CLARK      81/06/09 81/06/12
KING       81/11/17 81/11/20
MILLER     82/01/23 82/01/29

 

문제 10) emp 테이블에서 입사한 달의 근무 일수를 계산하여 출력하여라. 단, 일요일과 일요일도 근무 일수에 포함된다.

  1. SELECT ename, hiredate, LAST_DAY(hiredate) - hiredate FROM emp;
  2. // LAST_DAY 사용
SQL> SELECT ename, hiredate, LAST_DAY(hiredate) - hiredate FROM emp;

ENAME      HIREDATE LAST_DAY(HIREDATE)-HIREDATE
---------- -------- ---------------------------
SMITH      80/12/17                          14
ALLEN      81/02/20                           8
WARD       81/02/22                           6
JONES      81/04/02                          28
MARTIN     81/09/28                           2
BLAKE      81/05/01                          30
CLARK      81/06/09                          21
SCOTT      87/04/19                          11
KING       81/11/17                          13
TURNER     81/09/08                          22
ADAMS      87/05/23                           8
JAMES      81/12/03                          28
FORD       81/12/03                          28
MILLER     82/01/23                           8

 


  1. create table test (
    id   number,
    name varchar2(10));

 

SQL> desc test;
이름                                                  널?      유형
----------------------------------------------------- -------- ------------------------------------
ID                                                             NUMBER
NAME                                                           VARCHAR2(10)

 

  1. SELECT * FROM test;
SQL> SELECT * FROM test;

선택된 레코드가 없습니다.

 

  1. INSERT INTO test(id, name) VALUES(1, 10);
SQL> insert into test(id, name) values(1, 10);

1 개의 행이 만들어졌습니다.

 

SQL> select * from test;

       ID NAME
---------- ----------
        1 10

 

  1. SELECT ename+100 FROM emp;

 

SQL> select ename+100 from emp;
select ename+100 from emp
      *
1행에 오류:
ORA-01722: 수치가 부적합합니다

 

  1. SELECT id+10, name+100 FROM test;
SQL> select id+10, name+100 from test;

    ID+10   NAME+100
---------- ----------
       11        110

 

현재의 세기, 년, 월, 일, 시, 분, 초 정보 및 요일 정보를 확인

  1. SELECT sysdate, to_char(sysdate, 'rrrr/mm/dd:hh24:mi:ss:day') FROM dual;
SQL> SELECT sysdate, to_char(sysdate, 'rrrr/mm/dd:hh24:mi:ss:day') FROM dual;

SYSDATE  TO_CHAR(SYSDATE,'RRRR/MM/DD:H
-------- -----------------------------
09/04/24 2009/04/24:13:57:11:금요일

 

rr 과 yy의 차이점

rr : 년도가 0~49년도일 경우에는 현재세기로 인식하고, 50~99년도일 경우에는 이전세기로 인식

yy : 무조건 현재세기로 인식

 

  1. SELECT * FROM emp WHERE hiredate > '81/01/01';

 

SQL> SELECT * FROM emp WHERE hiredate > '81/01/01';   = 1981/01/01

    EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
     7499 ALLEN      SALESMAN        7698 81/02/20       1600        300         30
     7521 WARD       SALESMAN        7698 81/02/22       1250        500         30
     7566 JONES      MANAGER         7839 81/04/02       2975                    20
     7654 MARTIN     SALESMAN        7698 81/09/28       1250       1400         30
     7698 BLAKE      MANAGER         7839 81/05/01       2850                    30
     7782 CLARK      MANAGER         7839 81/06/09       2450                    10
     7788 SCOTT      ANALYST         7566 87/04/19       3000                    20
     7839 KING       PRESIDENT            81/11/17       5000                    10
     7844 TURNER     SALESMAN        7698 81/09/08       1500          0         30
     7876 ADAMS      CLERK           7788 87/05/23       1100                    20
     7900 JAMES      CLERK           7698 81/12/03        950                    30
     7902 FORD       ANALYST         7566 81/12/03       3000                    20
     7934 MILLER     CLERK           7782 82/01/23       1300                    10

 

  1. alter session set nls_date_format='yy/mm/dd';

 

  1. SELECT * FROM emp WHERE hiredate > '81/01/01';  '81/01/01' = 2081/01/01  값 없음!!

 

  1. SELECT ename, sal, to_char(sal, '$9,999.9') FROM emp;
SQL> SELECT ename, sal, to_char(sal, '$9,999') FROM emp;

ENAME             SAL TO_CHAR
---------- ---------- -------
SMITH             800    $800
ALLEN            1600  $1,600
WARD             1250  $1,250
JONES            2975  $2,975
MARTIN           1250  $1,250
BLAKE            2850  $2,850
CLARK            2450  $2,450
SCOTT            3000  $3,000
KING             5000  $5,000
TURNER           1500  $1,500
ADAMS            1100  $1,100
JAMES             950    $950
FORD             3000  $3,000
MILLER           1300  $1,300

14 개의 행이 선택되었습니다.

SQL> SELECT ename, sal, to_char(sal, '$9,999.9') FROM emp;

ENAME             SAL TO_CHAR(S
---------- ---------- ---------
SMITH             800    $800.0
ALLEN            1600  $1,600.0
WARD             1250  $1,250.0
JONES            2975  $2,975.0
MARTIN           1250  $1,250.0
BLAKE            2850  $2,850.0
CLARK            2450  $2,450.0
SCOTT            3000  $3,000.0
KING             5000  $5,000.0
TURNER           1500  $1,500.0
ADAMS            1100  $1,100.0
JAMES             950    $950.0
FORD             3000  $3,000.0
MILLER           1300  $1,300.0

 

  1. SELECT ename, sal, to_char(sal, 'L9,999.9') FROM emp;
  2. //L은 로컬
SQL> SELECT ename, sal, to_char(sal, 'L9,999.9') FROM emp;

ENAME             SAL TO_CHAR(SAL,'L9,99
---------- ---------- ------------------
SMITH             800            ₩800.0
ALLEN            1600          ₩1,600.0
WARD             1250          ₩1,250.0
JONES            2975          ₩2,975.0
MARTIN           1250          ₩1,250.0
BLAKE            2850          ₩2,850.0
CLARK            2450          ₩2,450.0
SCOTT            3000          ₩3,000.0
KING             5000          ₩5,000.0
TURNER           1500          ₩1,500.0
ADAMS            1100          ₩1,100.0
JAMES             950            ₩950.0
FORD             3000          ₩3,000.0
MILLER           1300          ₩1,300.0

 

  1. SELECT ename, sal, to_char(sal, 'L9,999.9'), TO_CHAR(sal, '999') FROM emp;
SQL> SELECT ename, sal, to_char(sal, 'L9,999.9'), TO_CHAR(sal, '999') FROM emp;

ENAME             SAL TO_CHAR(SAL,'L9,99 TO_C
---------- ---------- ------------------ ----
SMITH             800            ₩800.0  800
ALLEN            1600          ₩1,600.0 ####
WARD             1250          ₩1,250.0 ####
JONES            2975          ₩2,975.0 ####
MARTIN           1250          ₩1,250.0 ####
BLAKE            2850          ₩2,850.0 ####
CLARK            2450          ₩2,450.0 ####
SCOTT            3000          ₩3,000.0 ####
KING             5000          ₩5,000.0 ####
TURNER           1500          ₩1,500.0 ####
ADAMS            1100          ₩1,100.0 ####
JAMES             950            ₩950.0  950
FORD             3000          ₩3,000.0 ####
MILLER           1300          ₩1,300.0 ####   // 자릿수를 넘어서면 # 정자로 표시됨. 엑셀처럼? 아니면 엑셀이 DB처럼!?

 

  1. INSERT into emp(empno, ename, hiredate) VALUES(8000, '홍길동', '10-12-2009:10시');
SQL> INSERT into emp(empno, ename, hiredate) VALUES(8000, '홍길동', '10-12-2009:10시');
INSERT into emp(empno, ename, hiredate) VALUES(8000, '홍길동', '10-12-2009:10시')
                                                              *
1행에 오류:
ORA-01830: 날짜 형식의 지정에 불필요한 데이터가 포함되어 있습니다

 

  1. INSERT into emp(empno, ename, hiredate) VALUES(8000, '홍길동', TO_DATE('10-12-2009:10', 'dd-mm-rrrr:hh24') );
SQL> INSERT into emp(empno, ename, hiredate) VALUES(8000, '홍길동', TO_DATE('10-12-2009:10', 'dd-mm-
rrrr:hh24') );

1 개의 행이 만들어졌습니다.

SQL> select * from emp;

    EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
     8000 홍길동                          2009/12/10
     7369 SMITH      CLERK           7902 1980/12/17        800                    20
     7499 ALLEN      SALESMAN        7698 1981/02/20       1600        300         30
     7521 WARD       SALESMAN        7698 1981/02/22       1250        500         30
     7566 JONES      MANAGER         7839 1981/04/02       2975                    20
     7654 MARTIN     SALESMAN        7698 1981/09/28       1250       1400         30
     7698 BLAKE      MANAGER         7839 1981/05/01       2850                    30
     7782 CLARK      MANAGER         7839 1981/06/09       2450                    10
     7788 SCOTT      ANALYST         7566 1987/04/19       3000                    20
     7839 KING       PRESIDENT            1981/11/17       5000                    10
     7844 TURNER     SALESMAN        7698 1981/09/08       1500          0         30
     7876 ADAMS      CLERK           7788 1987/05/23       1100                    20
     7900 JAMES      CLERK           7698 1981/12/03        950                    30
     7902 FORD       ANALYST         7566 1981/12/03       3000                    20
     7934 MILLER     CLERK           7782 1982/01/23       1300                    10

 

  1. SELECT ename, deptno, DECODE(deptno, 10, '10번 부서', 20, '20번 부서', 30, '30번 부서', '기타부서') "부서",
  2. CASE WHEN deptno = 10  THEN '10번 부서'
  3. WHEN deptno = 20  THEN '20번 부서'
  4. WHEN deptno = 30  THEN '30번 부서'
  5. ELSE '기타부서' end "case문"  FROM emp;
SQL>    SELECT ename, deptno, DECODE(deptno, 10, '10번 부서', 20, '20번 부서', 30, '30번 부서', '기
타부서') "부서",
  2     CASE WHEN deptno = 10  THEN '10번 부서'
  3     WHEN deptno = 20  THEN '20번 부서'
  4     WHEN deptno = 30  THEN '30번 부서'
  5     ELSE '기타부서' end "case문"  FROM emp;

ENAME          DEPTNO 부서      case문
---------- ---------- --------- ---------
홍길동                기타부서  기타부서
SMITH              20 20번 부서 20번 부서
ALLEN              30 30번 부서 30번 부서
WARD               30 30번 부서 30번 부서
JONES              20 20번 부서 20번 부서
MARTIN             30 30번 부서 30번 부서
BLAKE              30 30번 부서 30번 부서
CLARK              10 10번 부서 10번 부서
SCOTT              20 20번 부서 20번 부서
KING               10 10번 부서 10번 부서
TURNER             30 30번 부서 30번 부서
ADAMS              20 20번 부서 20번 부서
JAMES              30 30번 부서 30번 부서
FORD               20 20번 부서 20번 부서
MILLER             10 10번 부서 10번 부서

 

이 글은 스프링노트에서 작성되었습니다.

허니몬의 IT 이야기/프로그래머, '코드 엔지니어'

학습목표

데이터베이스 내의 데이터를 검색하기 위해 사용되는 SQL 문을 DQL(Data Query Language) 언어라고 하며 또는 SELECT문이라고 한다. 대부분의 정보시스템을 개발할 때  입력과 수정, 삭제도 중요하지만 저장된 데이터를 사용자가 원하는 형태로 검색하는 것이 무엇보다 중요하다.

 

[1]. DB에 scott 계정으로 접속하시오.

  1. CONN scott/tiger

 

[2]. scott 계정으로 접속되었는지 확인하시오(자신 확인).

  1. SHOW user            // --> SHOW 는 툴(현재 실습툴인 Oracle SQLPlus) 자체의 명령어

 

[3]. scott 계정 소유의 모든 테이블명을 조회하시오.

  1. SELECT *
  2. FROM tab;
SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
DEPT                           TABLE
EMP                            TABLE
BONUS                          TABLE
SALGRADE                       TABLE
CUSTOMER                       TABLE

 

[4]. customer 테이블의 컬럼구조(컬럼명, 컬럼데이터타입)을 확인하시오.

  1. DESC customer         // --> DESC( =DESCRIBE ) 는 툴(현재 실습툴인 Oracle SQLPlus) 자체의 명령어
SQL> desc customer;
이름                                      널?      유형
----------------------------------------- -------- ----------------------------
CNO                                       NOT NULL VARCHAR2(10)
CNAME                                     NOT NULL VARCHAR2(20)
ADDR                                               VARCHAR2(30)
TEL                                                VARCHAR2(20)
CREDIT_NO                                          VARCHAR2(10)
CREDIT_COMP                                        VARCHAR2(10)
CREDIT_DATE                                        DATE
JUMIN_NO                                           VARCHAR2(15)

 

[5]. customer 테이블에 저장된 데이터를 모두 조회하시오.

  1. SELECT *
  2. FROM customer;
SQL> desc customer;
이름                                      널?      유형
----------------------------------------- -------- ----------------------------
CNO                                       NOT NULL VARCHAR2(10)
CNAME                                     NOT NULL VARCHAR2(20)
ADDR                                               VARCHAR2(30)
TEL                                                VARCHAR2(20)
CREDIT_NO                                          VARCHAR2(10)
CREDIT_COMP                                        VARCHAR2(10)
CREDIT_DATE                                        DATE
JUMIN_NO                                           VARCHAR2(15)

 

[6]. EMP, DEPT 테이블의 구조 밑 데이터를 조회

※ emp 테이블 구조 확인

  1. DESC emp
SQL> DESC emp
이름                                      널?      유형
----------------------------------------- -------- ----------------------------
EMPNO                                     NOT NULL NUMBER(4)
ENAME                                              VARCHAR2(10)
JOB                                                VARCHAR2(9)
MGR                                                NUMBER(4)
HIREDATE                                           DATE
SAL                                                NUMBER(7,2)
COMM                                               NUMBER(7,2)
DEPTNO                                             NUMBER(2)

※ emp 테이블의 내용 확인

  1. SELECT *
  2. FROM emp;

SQL> select * from emp;

    EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
     7369 SMITH      CLERK           7902 80/12/17        800                    20
     7499 ALLEN      SALESMAN        7698 81/02/20       1600        300         30
     7521 WARD       SALESMAN        7698 81/02/22       1250        500         30
     7566 JONES      MANAGER         7839 81/04/02       2975                    20
     7654 MARTIN     SALESMAN        7698 81/09/28       1250       1400         30
     7698 BLAKE      MANAGER         7839 81/05/01       2850                    30
     7782 CLARK      MANAGER         7839 81/06/09       2450                    10
     7788 SCOTT      ANALYST         7566 87/04/19       3000                    20
     7839 KING       PRESIDENT            81/11/17       5000                    10
     7844 TURNER     SALESMAN        7698 81/09/08       1500          0         30
     7876 ADAMS      CLERK           7788 87/05/23       1100                    20
     7900 JAMES      CLERK           7698 81/12/03        950                    30
     7902 FORD       ANALYST         7566 81/12/03       3000                    20
     7934 MILLER     CLERK           7782 82/01/23       1300                    10

※ dept 테이블의 구조 확인

  1. DESC dept
SQL> desc dept
이름                                                  널?      유형
----------------------------------------------------- -------- ------------------------------------
DEPTNO                                                NOT NULL NUMBER(2)
DNAME                                                          VARCHAR2(14)
LOC                                                            VARCHAR2(13)

※ dept 테이블의 내용 확인

  1. SELECT *
  2. FROM dept;      //dept 테이블의 모든 속성값을 가진 데이터(내용)를 출력한다.
SQL> SELECT * FROM dept;
   DEPTNO DNAME          LOC
---------- -------------- -------------
       10 ACCOUNTING     NEW YORK
       20 RESEARCH       DALLAS
       30 SALES          CHICAGO
       40 OPERATIONS     BOSTON

기본문법

SELECT [  *   ||   컬럼명]

FROM [Table Name]


과제 : 09/04/23

교재 실습 : 94p


문제 1) SCOTT이 소유하고 있는 emp TABLE에서 사원번호, 이름, 급여, 담당업무의 값을 출력하시오.

  1. SELECT empno, ename, sal, job
  2. From emp;

SQL> SELECT empno, ename, sal, job From emp;

    EMPNO ENAME             SAL JOB
---------- ---------- ---------- ---------
     7369 SMITH             800 CLERK
     7499 ALLEN            1600 SALESMAN
     7521 WARD             1250 SALESMAN
     7566 JONES            2975 MANAGER
     7654 MARTIN           1250 SALESMAN
     7698 BLAKE            2850 MANAGER
     7782 CLARK            2450 MANAGER
     7788 SCOTT            3000 ANALYST
     7839 KING             5000 PRESIDENT
     7844 TURNER           1500 SALESMAN
     7876 ADAMS            1100 CLERK
     7900 JAMES             950 CLERK
     7902 FORD             3000 ANALYST
     7934 MILLER           1300 CLERK

 

문제 2) 모든 사원의 이름 및 급여, 급여에 300을 더한 값을 출력하시오.

  1. SELECT ename, sal, (sal +300)
  2. FROM emp;
SQL> SELECT ename, sal, (sal +300) FROM emp

ENAME             SAL  (SAL+300)
---------- ---------- ----------
SMITH             800       1100
ALLEN            1600       1900
WARD             1250       1550
JONES            2975       3275
MARTIN           1250       1550
BLAKE            2850       3150
CLARK            2450       2750
SCOTT            3000       3300
KING             5000       5300
TURNER           1500       1800
ADAMS            1100       1400
JAMES             950       1250
FORD             3000       3300
MILLER           1300       1600

 

문제 3) emp 테이블에서 이름, 급여, 보너스, 연봉을 출력하시오(출력값 변환).

  1. SELECT ename, sal, comm,  sal * 12 "연봉"
  2. FROM emp;

SQL> select ename, sal, comm, (sal*12 + comm) "연봉" from emp;
  //(sal*12 + comm) "연봉" : ALIAS 기능을 사용하여, sal*12 + comm 의 타이틀(Attribut)을 "연봉"으로 대체해서 출력한다.

   // COMM 값이 빈 것은 NULL 값으로, 0과는 다르다. 조건문 이용해서 계산을 별도로 해준다.
ENAME             SAL       COMM       연봉      //보시다시피 COMM 값이 없는 항목들은 연봉에 NULL이 출력된다.
---------- ---------- ---------- ----------
SMITH             800
ALLEN            1600        300      19500
WARD             1250        500      15500
JONES            2975
MARTIN           1250       1400      16400
BLAKE            2850
CLARK            2450
SCOTT            3000
KING             5000
TURNER           1500          0      18000
ADAMS            1100
JAMES             950
FORD             3000
MILLER           1300

처리방법 :
SQL> SELECT ename, sal, comm, (sal*12 + comm), (sal*12) + nvl(comm, 0) FROM emp;   //nvl  함수 : null 값이 있으면 0을 넣어줘라.

ENAME             SAL       COMM (SAL*12+COMM) (SAL*12)+NVL(COMM,0)
---------- ---------- ---------- ------------- --------------------
SMITH             800                                          9600
ALLEN            1600        300         19500                19500
WARD             1250        500         15500                15500
JONES            2975                                         35700
MARTIN           1250       1400         16400                16400
BLAKE            2850                                         34200
CLARK            2450                                         29400
SCOTT            3000                                         36000
KING             5000                                         60000
TURNER           1500          0         18000                18000
ADAMS            1100                                         13200
JAMES             950                                         11400
FORD             3000                                         36000
MILLER           1300                                         15600

 

문제 4) emp 테이블에서 ENAME을 NAME 로, SAL을 SALARY로 출력하시오.

  1. SELECT ename "NAME", sal "SALARY", ename||'   '||sal
  2. FROM emp;
SQL> select ename "NAME", sal "SALARY" from emp;

NAME           SALARY
---------- ----------
SMITH             800
ALLEN            1600
WARD             1250
JONES            2975
MARTIN           1250
BLAKE            2850
CLARK            2450
SCOTT            3000
KING             5000
TURNER           1500
ADAMS            1100
JAMES             950
FORD             3000
MILLER           1300

 

※ || 오라클 에서는 연결연산자(= 자바 + 연산자의 기능(문자열과 관련된 기능)과 같다.)

 

문제 5) EMP 테이블에서 ENAME를 '성  명' 으로 sal *12 를 '급  여'로 출력하시오.

  1. SELECT ename "성  명", sal*12 "급  여"
  2. FROM emp;

 

SQL> SELECT ename "성  명", sal*12 "급  여" FROM emp;

성  명         급  여
---------- ----------
SMITH            9600
ALLEN           19200
WARD            15000
JONES           35700
MARTIN          15000
BLAKE           34200
CLARK           29400
SCOTT           36000
KING            60000
TURNER          18000
ADAMS           13200
JAMES           11400
FORD            36000
MILLER          15600

 

문제 6) EMP 테이블에서 이름과 업무를 "KING is a PRESIDENT" 형식으로 출력하시오( ||'  '|| : 사용방법).

  1. SELECT ename||' is a '|| job
  2. FROM emp;
SQL> SELECT ename||' is a '|| job FROM emp;

ENAME||'ISA'||JOB
-------------------------
SMITH is a CLERK
ALLEN is a SALESMAN
WARD is a SALESMAN
JONES is a MANAGER
MARTIN is a SALESMAN
BLAKE is a MANAGER
CLARK is a MANAGER
SCOTT is a ANALYST
KING is a PRESIDENT
TURNER is a SALESMAN
ADAMS is a CLERK
JAMES is a CLERK
FORD is a ANALYST
MILLER is a CLERK

 

문제 7) EMP 테이블에서 이름과 연봉을 "KING : 1 Year salary = 60000" 형식으로 출력하시오( ||'  '|| : 사용방법).

  1. SELECT ename||' : 1 Year salary ='|| ( ( sal * 12 ) + nvl( comm , 0 ) ) "이름 및 연봉"
  2. FROM emp;
SQL> SELECT ename||' : 1 Year salary = '||( (sal*12)+nvl(comm,0) ) "이름 및 연봉" FROM emp;

ENAME||':1YEARSALARY='||((SAL*12)+NVL(COMM,0))
--------------------------------------------------------------------
SMITH : 1 Year salary =9600
ALLEN : 1 Year salary =19500
WARD : 1 Year salary =15500
JONES : 1 Year salary =35700
MARTIN : 1 Year salary =16400
BLAKE : 1 Year salary =34200
CLARK : 1 Year salary =29400
SCOTT : 1 Year salary =36000
KING : 1 Year salary =60000
TURNER : 1 Year salary =18000
ADAMS : 1 Year salary =13200
JAMES : 1 Year salary =11400
FORD : 1 Year salary =36000
MILLER : 1 Year salary =15600

 

문제 8) EMP 테이블에서 담당하고 있는 업무의 종류를 출력하시오.      // 중복항목을 제거하는 DISTINCT 옵션

  1. SELECT DISTINCT job FROM emp;
SQL> SELECT DISTINCT job FROM emp;

JOB
---------
CLERK
SALESMAN
PRESIDENT
MANAGER
ANALYST

 

문제 9) EMP 테이블에서 중복되지 않는 부서번호를 출력하시오(DISTINCT).

  1. SELECT DISTINCT deptno FROM emp;
SQL> SELECT DISTINCT deptno FROM emp;

   DEPTNO
----------
       30
       20
       10

 

문제 10) EMP테이블에서 사원이름순으로 사원번호, 이름, 업무, 부서번호를 조회하시오(ORDER BY : 정렬 출력, 기본 오름차순).

  1. SELECT empno, ename, job, deptno FROM emp ORDER BY ename;
SQL> SELECT empno, ename, job, deptno FROM emp ORDER BY ename;

    EMPNO ENAME      JOB           DEPTNO
---------- ---------- --------- ----------
     7876 ADAMS      CLERK             20
     7499 ALLEN      SALESMAN          30
     7698 BLAKE      MANAGER           30
     7782 CLARK      MANAGER           10
     7902 FORD       ANALYST           20
     7900 JAMES      CLERK             30
     7566 JONES      MANAGER           20
     7839 KING       PRESIDENT         10
     7654 MARTIN     SALESMAN          30
     7934 MILLER     CLERK             10
     7788 SCOTT      ANALYST           20
     7369 SMITH      CLERK             20
     7844 TURNER     SALESMAN          30
     7521 WARD       SALESMAN          30

 

문제 11) EMP테이블에서 가장 최근에 입사한 순으로 사원번호, 이름, 업무, 급여, 입사일자, 부서번호를 출력하라(ORDER BY : 정렬 출력 + DESC; 내림차순 정렬).

  1. SELECT empno, ename, job, sal, hiredate, deptno FROM emp ORDER BY hiredate DESC;
SQL> SELECT empno, ename, job, sal, hiredate, deptno FROM emp ORDER BY hiredate DESC;

    EMPNO ENAME      JOB              SAL HIREDATE     DEPTNO
---------- ---------- --------- ---------- -------- ----------
     7876 ADAMS      CLERK           1100 87/05/23         20
     7788 SCOTT      ANALYST         3000 87/04/19         20
     7934 MILLER     CLERK           1300 82/01/23         10
     7902 FORD       ANALYST         3000 81/12/03         20
     7900 JAMES      CLERK            950 81/12/03         30
     7839 KING       PRESIDENT       5000 81/11/17         10
     7654 MARTIN     SALESMAN        1250 81/09/28         30
     7844 TURNER     SALESMAN        1500 81/09/08         30
     7782 CLARK      MANAGER         2450 81/06/09         10
     7698 BLAKE      MANAGER         2850 81/05/01         30
     7566 JONES      MANAGER         2975 81/04/02         20
     7521 WARD       SALESMAN        1250 81/02/22         30
     7499 ALLEN      SALESMAN        1600 81/02/20         30
     7369 SMITH      CLERK            800 80/12/17         20
  1. SELECT empno, ename, job, sal, hiredate, deptno FROM emp ORDER BY 2;      // Attribute 값 중 2번째(ename) 값을 기준으로 출력하라.
  2. SELECT empno, ename "이름", job, sal, hiredate, deptno FROM emp ORDER BY "이름";      //별칭(ALIAS)을 기준으로 출력하라.

 

문제 12) EMP 테이블에서 SMISTH 사원의 모든 정보를 조회하시오(조건식 : WHERE 절 사용방법).

  1. SELECT * FROM emp WHERE ename = 'SMITH';
SQL> SELECT * FROM emp WHERE ename = 'SMITH';

    EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
     7369 SMITH      CLERK           7902 80/12/17        800                    20

 

문제 13) EMP 테이블에서 급여가 3000이상인 사원의 사원번호, 이름, 담당업무, 급여를 출력하라(조건식 : WHERE 절 사용방법).

  1. SELECT empno, ename, job, sal FROM emp WHERE sal >= 3000;
SQL> SELECT empno, ename, job, sal FROM emp WHERE sal >= 3000;

    EMPNO ENAME      JOB              SAL
---------- ---------- --------- ----------
     7788 SCOTT      ANALYST         3000
     7839 KING       PRESIDENT       5000
     7902 FORD       ANALYST         3000

 

문제 14) EMP 테이블에서 담당업부가 Manager인 사원의 정보를 사원번호, 성명, 담당업무, 급여, 부서번호를 출력하라(조건식 : WHERE 절 사용방법).

  1. SELECT empno, ename, job, sal, deptno FROM emp WHERE job = 'MANAGER';
SQL> SELECT empno, ename, job, sal, deptno FROM emp WHERE job = 'MANAGER';

    EMPNO ENAME      JOB              SAL     DEPTNO
---------- ---------- --------- ---------- ----------
     7566 JONES      MANAGER         2975         20
     7698 BLAKE      MANAGER         2850         30
     7782 CLARK      MANAGER         2450         10

 

문제 15) EMP 테이블에서 1982년 1월 1일 이후에 입사한 사원의 사원번호, 성명, 담당업무, 급여, 입사일자, 부서번호를 출력하라(조건식 : WHERE 절 사용방법).

  1. SELECT empno, ename, sal, hiredate, deptno FROM emp WHERE hiredate > '1982/01/01';
SQL> SELECT empno, ename, sal, hiredate, deptno FROM emp WHERE hiredate > '1982/01/01';

    EMPNO ENAME             SAL HIREDATE     DEPTNO
---------- ---------- ---------- -------- ----------
     7788 SCOTT            3000 87/04/19         20
     7876 ADAMS            1100 87/05/23         20
     7934 MILLER           1300 82/01/23         10
  1. select empno, ename, hiredate, to_char(hiredate, 'rrrr/mm/dd:hh24:mi:ss') from emp;
SQL> select empno, ename, hiredate, to_char(hiredate, 'rrrr/mm/dd:hh24:mi:ss') from emp;

    EMPNO ENAME      HIREDATE TO_CHAR(HIREDATE,'R
---------- ---------- -------- -------------------
     7369 SMITH      80/12/17 1980/12/17:00:00:00
     7499 ALLEN      81/02/20 1981/02/20:00:00:00
     7521 WARD       81/02/22 1981/02/22:00:00:00
     7566 JONES      81/04/02 1981/04/02:00:00:00
     7654 MARTIN     81/09/28 1981/09/28:00:00:00
     7698 BLAKE      81/05/01 1981/05/01:00:00:00
     7782 CLARK      81/06/09 1981/06/09:00:00:00
     7788 SCOTT      87/04/19 1987/04/19:00:00:00
     7839 KING       81/11/17 1981/11/17:00:00:00
     7844 TURNER     81/09/08 1981/09/08:00:00:00
     7876 ADAMS      87/05/23 1987/05/23:00:00:00
     7900 JAMES      81/12/03 1981/12/03:00:00:00
     7902 FORD       81/12/03 1981/12/03:00:00:00
     7934 MILLER     82/01/23 1982/01/23:00:00:00

 

  1. select * from nls_session_parameters;   //현재 세션(현재창에서만)에 설정된 환경파라미터의 값들을 조회
  2. alter session set nls_date_format='rrrr/mm/dd:hh24:mi:ss';  //날짜 관련 출력형식을 YYYY/MM/DD:24시:분:초 로 출력한다.
  3. select * from nls_session_parameters;

 

문제 16) EMP 테이블에서 급여가 1300에서 1500사이의 사원의 성명, 담당업무, 급여, 부서번호를 출력하라.

  1. SELECT ename, job, sal, deptno FROM emp WHERE sal BETWEEN 1300 AND 1500;
  2. SELECT ename, job, sal, deptno FROM emp WHERE sal >= 1300 AND sal <=1500;
SQL> SELECT ename, job, sal, deptno FROM emp WHERE sal BETWEEN 1300 AND 1500;

ENAME      JOB              SAL     DEPTNO
---------- --------- ---------- ----------
TURNER     SALESMAN        1500         30
MILLER     CLERK           1300         10

 

문제 17) EMP 테이블에서 사원번호가 7902, 7788, 7566 인 사원의 사원번호, 성명, 담당업무, 급여, 입사일자를 출력하여라.

  1. SELECT empno, ename, job, sal, hiredate FROM emp WHERE empno IN('7902', '7788', '7566');
  2. SELECT empno, ename, job, sal, hiredate FROM emp WHERE empno=7902 OR empno=7788 OR empno=7902;
SQL> SELECT empno, ename, job, sal, hiredate FROM emp WHERE empno IN('7902', '7788', '7566');

    EMPNO ENAME      JOB              SAL HIREDATE
---------- ---------- --------- ---------- -------------------
     7566 JONES      MANAGER         2975 1981/04/02:00:00:00
     7788 SCOTT      ANALYST         3000 1987/04/19:00:00:00
     7902 FORD       ANALYST         3000 1981/12/03:00:00:00

 

문제 18) EMP 테이블에서 입사일자가 1982년도에 입사한 사원의 사번, 성명, 담당업무, 급여, 입사일자, 부서번호를 출력하여라.

  1. SELECT empno, ename, job, sal, hiredate, deptno FROM emp WHERE hiredate LIKE '1982%';
  2. SELECT empno, ename, job, sal, hiredate, deptno FROM emp WHERE hiredate LIKE '%82%';
SQL> SELECT empno, ename, job, sal, hiredate, deptno FROM emp WHERE hiredate LIKE '1982%';

    EMPNO ENAME      JOB              SAL HIREDATE                DEPTNO
---------- ---------- --------- ---------- ------------------- ----------
     7934 MILLER     CLERK           1300 1982/01/23:00:00:00         10

 

문제 19)  EMP 테이블에서 보너스가 NULL인 사원의 사원번호, 성명, 담당업무, 급여, 입사일자, 부서번호를 출력하여라.

  1. SELECT empno, ename, job, sal, hiredate, deptno FROM emp WHERE comm IS NULL;
SQL> SELECT empno, ename, job, sal, hiredate, deptno FROM emp WHERE comm IS NULL;

    EMPNO ENAME      JOB              SAL HIREDATE                DEPTNO
---------- ---------- --------- ---------- ------------------- ----------
     7369 SMITH      CLERK            800 1980/12/17:00:00:00         20
     7566 JONES      MANAGER         2975 1981/04/02:00:00:00         20
     7698 BLAKE      MANAGER         2850 1981/05/01:00:00:00         30
     7782 CLARK      MANAGER         2450 1981/06/09:00:00:00         10
     7788 SCOTT      ANALYST         3000 1987/04/19:00:00:00         20
     7839 KING       PRESIDENT       5000 1981/11/17:00:00:00         10
     7876 ADAMS      CLERK           1100 1987/05/23:00:00:00         20
     7900 JAMES      CLERK            950 1981/12/03:00:00:00         30
     7902 FORD       ANALYST         3000 1981/12/03:00:00:00         20
     7934 MILLER     CLERK           1300 1982/01/23:00:00:00         10

 

 

이 글은 스프링노트에서 작성되었습니다.

1 ··· 53 54 55 56 57 58 59 ··· 70
블로그 이미지

Email : ihoneymon@gmail.com 안녕하세요, 꿀괴물 입니다. ^^ 멋진 비행을 준비 하는 블로그 입니다. 만능형 인간이 되어 많은 이들에게 인정받고, 즐겁고 행복하게 살기를 간절히 원합니다!! 달콤살벌한 꿀괴물의 좌충우돌 파란만장한 여정을 지켜봐주세요!! ^^

허니몬