posted by 써니루루 2007. 6. 23. 20:12

Oracle 10g에 포함된 HR(Human Resource) 계정을 이용해 해본 예제들입니다.
오라클 10g를 공부하신다면 아래 예제들을 한번씩 해보시기 바랍니다. ^ ^



1. 1998년에 입사한 사원의 정보를 얻자
 사번, 이름, 날자

SELECT EMPLOYEE_ID, LAST_NAME, HIRE_DATE
FROM EMPLOYEES
WHERE HIRE_DATE>='1998/01/01' AND HIRE_DATE<'1999/01/01'


SELECT EMPLOYEE_ID, LAST_NAME, HIRE_DATE
FROM EMPLOYEES
WHERE HIRE_DATE BETWEEN '1998/01/01' AND '1999/01/01'


SELECT EMPLOYEE_ID, LAST_NAME, HIRE_DATE
FROM EMPLOYEES
WHERE HIRE_DATE LIKE '98%'

SELECT EMPLOYEE_ID, LAST_NAME, HIRE_DATE
FROM EMPLOYEES
WHERE TO_CHAR(HIRE_DATE, 'YYYY') = '1998'


 

2. 직무가 SALES(영업) 부분에 속하는 사원 중에서 급여가 $10000 미만인 사

원의 정보를 얻자.

사번, 이름, 직무, 급여


SELECT EMPLOYEE_ID, LAST_NAME, JOB_ID, SALARY
FROM EMPLOYEES
WHERE JOB_ID IN('SA_MAN', 'SA_REP') AND SALARY<10000;

SELECT EMPLOYEE_ID, LAST_NAME, JOB_ID, SALARY
FROM EMPLOYEES
WHERE (JOB_ID='SA_MAN', JOB_ID='SA_REP') AND SALARY<10000;

SELECT EMPLOYEE_ID, LAST_NAME, JOB_ID, SALARY
FROM EMPLOYEES
WHERE JOB_ID LIKE 'SA_%' AND SALARY<10000;


3. 부서 아이디별로 해당 부서의 평균 급여를 얻자.
평균 급여가 많은 순으로 정렬하자.

부서아이디, 평균급여

SELECT DEPARTMENT_ID, AVG(SALARY)
FROM EMPLOYEES
WHERE DEPARTMENT_ID NOT IN(40, 50)
GROUP BY DEPARTMENT_ID
ORDER BY AVG(salary) DESC

SELECT DEPARTMENT_ID, AVG(SALARY)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
HAVING DEPARTMENT_ID NOT IN(40, 50)
ORDER BY AVG(salary) DESC


4. 18.325 소수 둘째자리에서 반올림 처리하자.
SELECT ROUND(18.325, 1) "Round"
FROM dual;

5. 날자를 문자로 변환
SELECT TO_CHAR(sysdate, 'YYYY-MM-DD HH24:MI:SS') today
FROM dual

6. 월별 입사자의 합계를 나타내 보자.
SELECT TO_CHAR(HIRE_DATE,'MM') "월", COUNT(*)
FROM EMPLOYEES
GROUP BY TO_CHAR(HIRE_DATE,'MM')
ORDER BY "월"

7. 분기별 입사자의 합계를 나타내 보자.

SELECT TO_CHAR(HIRE_DATE,'Q') "분기", COUNT(*)
FROM EMPLOYEES
GROUP BY TO_CHAR(HIRE_DATE,'Q')
ORDER BY "분기"


SELECT case
    when TO_CHAR(hire_date, 'MM')='01' then '1'
    when TO_CHAR(hire_date, 'MM')='02' then '1'
    when TO_CHAR(hire_date, 'MM')='03' then '1'
    when TO_CHAR(hire_date, 'MM')='04' then '2'
    when TO_CHAR(hire_date, 'MM')='05' then '2'
    when TO_CHAR(hire_date, 'MM')='06' then '2'
    when TO_CHAR(hire_date, 'MM')='07' then '3'
    when TO_CHAR(hire_date, 'MM')='08' then '3'
    when TO_CHAR(hire_date, 'MM')='09' then '3'
    when TO_CHAR(hire_date, 'MM')='10' then '4'
    when TO_CHAR(hire_date, 'MM')='11' then '4'
    else '4'
  end
  , count(employee_id)
FROM EMPLOYEES
GROUP BY case
    when TO_CHAR(hire_date, 'MM')='01' then '1'
    when TO_CHAR(hire_date, 'MM')='02' then '1'
    when TO_CHAR(hire_date, 'MM')='03' then '1'
    when TO_CHAR(hire_date, 'MM')='04' then '2'
    when TO_CHAR(hire_date, 'MM')='05' then '2'
    when TO_CHAR(hire_date, 'MM')='06' then '2'
    when TO_CHAR(hire_date, 'MM')='07' then '3'
    when TO_CHAR(hire_date, 'MM')='08' then '3'
    when TO_CHAR(hire_date, 'MM')='09' then '3'
    when TO_CHAR(hire_date, 'MM')='10' then '4'
    when TO_CHAR(hire_date, 'MM')='11' then '4'
    else '4'
  end
8. 영업에 관한 직무를 다음과 같이 나타내 보자.
SA_MAN -> Sales Dept
SA_REP -> Sales Dept
기타 부서 -> Another Dept

SELECT employee_id, last_name, job_id,
  case job_id
    when 'SA_REP'
      then 'Sales Dept'
    when 'SA_MAN'
      then 'Sales Dept'
    else 'Another Dept'
  end case
FROM EMPLOYEES
WHERE job_id LIKE 'S%'


9. SELECT employee_id, department_id, salary
FROM employees
WHERE department_id IN(10, 20, 30)

위 쿼리를 통해 자신이 속한 부서의 평균급여를 추가적으로 출력한다.

SELECT employee_id
  , department_id
  , salary
  , AVG(salary) OVER(PARTITION BY department_id) "AVG_SALARY"
--AVG(expr) OVER(analytical clause)
FROM employees
WHERE department_id IN(10, 20, 30)


10. 급여를 5000 받는사람이 급여의 순위가 상위 몇번째인가

SELECT RANK(5000) WITHIN GROUP(ORDER BY salary DESC) "RANK"


FROM employees

posted by 권오성의 Biomedical Engineering 2007. 5. 29. 21:41
텔넷으로 접속하였다는 가정하에 설명입니다.
FTP 계정 아이디가 msn이고 패스워드가 777이며, 백업할 DB의 이름이
source 인 경우입니다.

① 우선 pwd 명령으로 절대 경로를 알아 놓습니다.
② 절대경로가 아래에 나타납니다.
③ mysqldump -u아이디 -p패스워드 DB명 > /절대경로/DB명.sql
ex) mysqldump -uman -p7777 source > /public_html/loveyou.sql

Mysql DB 복구하기
mysql -u아이디 -p패스워드 db > public_html/loveyou.sql
posted by 써니루루 2007. 4. 23. 23:35
select top 20  *
from  authors
where au_id not in (select top 10 au_id from authors  order by au_id)
order by au_id



데이터 상단의 20개 중에 처음 10개를 제외한 11~20개의 데이터를 가져온다.
posted by 써니루루 2007. 3. 28. 21:49
기존에 잘 알려져있는 ERWIN이나 ROSE 등을 제쳐두고 오늘 급 관심이 생기게 된 프로그램이 있다.

http://www.fabforce.net/

요 사이트에 가면 있는 프로그램..

다이어그램을 그리고 DB와 연결시켜서 동기화 시킬 수 있다.

또한 쿼리문을 직접 작성하기도 편하다..

사용자 삽입 이미지

아 멋지다.. 테이블 조인할건지.. 레프트 조인할건지.. 쿼리문을 뭘 만들건지 ㅋㅋ

아무튼 자주 사용해야 할 것 같다.

디자인도 이쁘고 :)


단, 아쉬운 점이 있다면 MySQL 을 제외한 DB에서는 가져오는 것만 지원하는 듯 하고, MySQL 외에는 싱크하는 기능이 제대로 작동하지 않는 것 같다(MSSQL을 이용했을 때 '역 공학'을 이용해 가져오기는 제대로 실행되지만, Sync 기능은 제대로 작동하지 않았다)