페이지

레이블이 sql_practice인 게시물을 표시합니다. 모든 게시물 표시
레이블이 sql_practice인 게시물을 표시합니다. 모든 게시물 표시

2012년 3월 25일 일요일

join 문제풀이

6번문제 5-33p

select e.dep_id department, e.last_name employee, m.last_name colleague
from emp e join emp m
on (e.dep_id=m.dep_id)
and (e.last_name<>m.last_name)
order by e.dep_id, e.last_name, m.last_name

and(e.last_name<>m.last_name)이 중요
문제에 힌트가 너무 없고 결과를 보고 추리를 해야하기 때문에 찾아봤음.. 내 사고가 딸리나

7번문제 5-34p

select e.last_name, e.job_id, d.dep_name, e.sal, j.gra
from emp e join dep d
on (e.dep_id=d.dep_id)
join job_grades j
on e.sal between j.low_sal and j.high_sal

2012년 3월 23일 금요일

salary 1000당 * 표시 나오게 하기

10g sql fundamental1_sg1 3-67p의 문제..
이건 교재에도 나오지 않은 내용은데 어떻게 풀라는건지

원하는건 last_name의 8자와 salary 1000당 *하나를 입력하는 것이다.

select substr(last_name,1,8)||' '||lpad(' ', trunc(salary/1000+1),'*')
from employees
order by salary desc;

핵심은 lpad후 ' '을 써서 아무것도 내용을 쓰지 않는 것
좀더 매끄럽게 할 수도 있을거 같은데 나중에 다듬어바야지

요일별 정렬 monday 맨앞으로 오게하기

요일별로 정렬할때 monday가 맨앞으로 오게하기

select last_name, hire_date, to_char(hire_date,'DAY') DAY
from employees
order by to_char(hire_date-1,'D');

D=날짜를 숫자로 표현
1=sunday, 2=monday
이므로 -1을 줘서 monday를 1로 만듬