만약에 WIDTH_BUCKET(월,1,13,2)
이렇게 했을경우
2분기로 나누어 진다.
책 89페이지
답)
SELECT WIDTH_BUCKET( EXTRACT( MONTH FROM hire_date),1,13,4)
, COUNT(*)
FROM employees
WHERE job_id LIKE'SA%'
GROUP BY WIDTH_BUCKET( EXTRACT( MONTH FROM hire_date),1,13,4)
ORDER By WIDTH_BUCKET( EXTRACT( MONTH FROM hire_date),1,13,4) ASC;
또는 더 쉽게
SELECT TO_CHAR(hire_date,'Q'),COUNT(employee_id)
FROM employees
WHERE job_id LIKE 'SA%'
GROUP BY TO_CHAR(hire_date,'Q')
ORDER BY TO_CHAR(hire_date,'Q');
컨버터에서 'Q'는 1년을 4분기로 변환시켜 준다 .
AS Quater 는 별칭인데
GROUP BY 에서는 쓰지 못한다. 왜냐면??????????? 결과를 가지고 노는 거라서..별칭은 못쓴다.
그러나 ORDER BY 는 쓸 수 있다. 별칭을 쓸 수 있다.
날짜함수)
SELECT sysdate FROM daul; 현재 날짜 함수
SELECT systimestamp FROM dual; 현재 시간 함수
SELECT localtimestamp FROM dual; 혀재 날자 시간 함수
SELECT TO_CHAR(SYSDATE)FROM dual; 이건 날짜 함수를 스트링으로 바꿔서 형변환이 안된다.
SELECT TO_CHAR(ROUND(AVG(salary),2),'$999,999.9')
FROM employees;
요건 임금의 평균을 내서 소수점 2째자리 표현해주고 그걸 스트링으로 바꿔서 3자리 마다,를 찍어주고 소수점은 한자리로 표현해준다.
SELECT TO_CHAR(sysdate, 'HH24:MI:SS' ) FROM dual;
현재시간 보여줄때..
문제2)
영업 사원을 대상으로 근무기간을 얻어보자.
근속기간을 기준으로 오름차순 정렬하자.
결과>사원번호, 사원이름, 입사일자, 근속기간(예.10년 7개월)
SELECT employee_id
, hire_date
, months_between(sysdate, hire_date)
, TRUNC( months_between(sysdate, hire_date)/12) AS YEAR
,TRUNC(MOD(months_between(sysdate, hire_date),12)) AS MONTH
FROM employees
WHERE job_id LIKE 'SA%';
months_between이건 둘 사이의 차이를 월로 나타내는 함수 (월만 된다,,년은 안된다)
TRUNC( )함수는 소수점 버림
AS YEAR 은 YEAR이라는 테이블을 만든다음 값을 거기에다가 넣는다.
문제 3)
사원번호 148번이 소속한 부서의 이름을 얻어보자.
한번
SELECT department_name
FROM departments
WHERE department_id = (
SELECT department_id
FROM employees
WHERE employee_id =148
);
두번쨰
SELECT department_name
FROM employees , departments
WHERE employee_id = 148
AND employees.department_id = departments.department_id;
조인을 통해
SELECT department_name
FROM employees e JOIN departments d
ON e.department_id = d.department_id
WHERE employee_id = 148;
문제4)
사원번호 148번의 직무이름을 얻어보자.
결과> 사원번호, 사원이름, 직무이름
SELECT employee_id, job_title
FROM employees e JOIN jobs j
ON e.job_id = j.job_id
WHERE employee_id = 148;
FROM employees e JOIN jobs j
ON e.job_id = j.job_id
JOIN departments d
ON e.department_id = d.department_id
WHERE employee_id =148;
문제 6)
런던에서 근무중인 사원의 목록을 얻자.
결과> 사원번호, 사원이름, 부서이름
SELECT employee_id
, first_name
,department_name
FROM employees e JOIN departments d
ON e.department_id = d.department_id
JOIN locations l
ON d.location_id = l.location_id
WHERE city= 'London';
그리고 밑에 꺼도 된다. 밑에껀 옛날꺼
SELECT employee_id
, first_name
,department_name
FROM employees e , departments d , locations l
WHERE e.department_id = d.department_id
AND d.location_id = l.location_id
AND city = 'London';