더보기
SELECT ABS(-10) FROM dual;
ABS는 절대값을 나타내는 것
dual은 계산의 대한 결과값을 나타내준다.
SELECT -20*3+55 FROM employee;
문제 1)
숫자함수)
영업 사원을 대상으로 분기별 입사자 수를 얻어보자.
분기를 기준으로 오름차순 정렬한다.
결과>분기, 입사자 수
1분기 5
2분기 4
3분기 10
4분기 12
1)영업 사원만 얻어낸다.
2)입사일자 중에서 월을 얻어낸다.
3)월을 분기로 변환한다. WIDTH_BUCKET(뽑아낼값, 최소값, 최대값, 나눌값)
4)분기별 입사자의 수를 구한다.
5)분기별 오름차순 정렬한다.
만약에 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;
문제 5)
사원번호 148의 직무이름을 얻어보자 .
결과>사원번호, 사원이름, 직무이름, 부서이름
더보기
SELECT employee_id
, first_name
,job_title
,department_name
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';