오늘 마지막 문제 : (수업끝나고 가기전에 풀어야 될 미션)
이름과 입사한 연도(4자리)와 월급과 보너스를 출력하는데
입사한 연도가 1980연도이면 보너스를 5000으로 출력하고 입사한 연도가
1981연도이면 보너스를 4000으로 출력하고 나머지 연도는 그냥 0으로 출력하시오 !
*부가설명 : 보너스 테이블이 없기 때문에 내가 함수를 이용해서 보너스 테이블을 만들어서 문제를 풀어야 된다.
문제15.직업이 SALESMAN인 사원들의 이름과 월급과 직업을 출력하시오.
문제16.부서번호가 30번인 사원들의 이름과 월급, 부서번호를 출력하는데
월급이 낮은 사원부터 높은 사원순으로 출력하시오.
--> order by 절을 사용해야 한다
select ename,sal,deptno
from emp
where deptno = 30
order by sal asc ;
-asc: ascending 하게 출력
(낮은값부터 높은값순으로)
-desc:decending 하게 출력
(높은값부터 낮은값순으로)
뮨재17.월급이 2000이상인 사원들의 이름과 월급과 입사일을 출력하는데
최근에 입사한 사원부터 출력하시오
select ename,sal,hiredate
from emp
where sal>=2000
order by hiredate desc;
이제부터 함수를 배울거다..
->like ☞ S뒤에 뭐가 와도 상관이 없다.
문제18. 이름의 첫번째 글자가 s로 시작하는 사원들의 이름과 월급을 출력하시오.
select ename,sal
from emp
where ename like 'S%';
☞ % ☞ wild card: 이자리에 어떠한 철자가 와도 관계없고 갯수가 몇개가 되든 관계없다.
문제19.이름의 끝글자가 T로 끝나는 사원들의 이름을 출력하시오.
select ename
from emp
where ename like '%t';
문제20.이름의 두번째 철자가 M인 사원들의 이름을 출력하시오.
select ename
from emp
where eame like '_M%';
☞ like를 사용시 %와 _를 사용할 수 있는데
_의 의미는 자릿수.
문제21.이름의 세번째 철자가 L인 사원들의 이름을 출력하시오.
select ename
from emp
where ename like '__L%';
문제22.커미션이 null인 사원들의 이름과 커미션을 출력하시오.
select ename,comm
from emp
where comm is null;
☞기타 비교 연산자
1.between . . and
2.liek
3.is null
4.in
문제 23.커미션이 null이 아닌 사원들의 이름과 커미션을 출력하시오.
select ename,comm
from emp
where comm is not null;
문제24. 사원번호가 7788,7902,7369번인 사원들의 사원번호와 이름을 출력하시오.
select ename,empno
form emp
where empno in (7788,7902,7369);
나는 처음에 where = 7788,7902,7369 이렇게 했음..
문제25.직업이 SALESMAN,ANALYST가 아닌 사원들의 이름과 직업을 출력하시오.
SELECT ENAME,JOB
FROM EMP
WHERE JOB NOT IN ('SALESMAN','ANALYST') ;
여기서 낫인이 포인트고 그리고 나는 처음에 실패했을때 JOB을 안썼음
그리고 문자니까 ' ' 이거 쓰는거 조심.
☞ 함수 : data를 함수에 입력하면 어떤 가공된 결과를 출력하는 것
가공을 하면 의미있는 결과가 나온다. 함수는 데이터를 가공!!
함수는 항상 결과를 리턴한다.
1.단일행 함수:
하나의 데이터가 입력되어서 하나의 결과를 출력.
☞☞☞☞☞☞☞data☞☞☞☞☞☞function☞☞☞☞☞☞결과
-문자 : upper , lower , initcap , susbstr , length , instr , rpad , lpad , tri
upper:대문자
lower:소문자
initcap:첫글자대문자 나머지 소문자
substr:특정철자를 잘라내는 함수.이름에서 뭘 잘라내냐?
(ename,2,2) 이라고 한다면 2번째 자리에서 2개를 잘라내서 출력
KING이면 IN 되는 것.
-숫자 :
-날짜 :
-변환 :
-일반 :
2.복수행 함수(=그룹함수 group) :max,min,avg,sum,count
여러게의 data행이 입력되어서 하나의 결과로 출력되는 함수
☞☞☞☞☞☞☞☞☞☞
☞☞☞☞☞☞☞☞☞☞ function ☞☞☞☞☞ 결과☞☞☞☞☞
☞☞☞☞☞☞☞☞☞☞
문제26. 아래의 결과를 출력하시오
upper(ename) ,lower(ename) , initcap(ename)
from emp;
이게 보면 이름을 칠때 소문자도 쳤을떄도 결과를 나오게 할려면 어떻게해야되냐?
문제28. 위에 king을 소문자로 입력해서 결과가 출력되겠끔 sql을 작성하시오.
select ename, sal
from emp
where lower(ename) = 'king';
문제29. 아래의 결과를 출력하시오
select ename, substr(ename,1,2)
from emp;
문제30.이름을 출력하는 이름의 첫번째 첫자만 출력하는데 소문자로 출력하시오
select lower(substr(ename,1,1))
from emp;
함수는 중첩이 된대!!!!!!!!!!!!!!!!!!!!!!!!!!
문제31.아래의 결과를 출력하시오
select ename,length(ename)
from emp;
☞length -> 철자의 갯수를 세는 함수!
문제32.이름의 철자의 갯수가 5개 이상인 사원들의 이름과 이름의 철자의 갯수를 출력하시오
select ename,length(ename)
from emp
where length(ename)>=5;
☞instr 함수 ☞ 특정 철자가 몇번째 자리에 있는지 출력
select ename,instr(ename,'A')
from emp;
문제33.이름에 L자를 포함하고 있는 사원들의 이름을 출력하시오 !
select ename
from emp
where instr(ename,'L') >=1; or >0
만약에 like를 이용할꺼면
select ename
from emp
where ename like '&L&'
☞ trim 양쪽에 있는 공백을 잘라버리겠다!!
공백도 문자다!!!
문제34.이름이 jack인 사원의 이름과 월급을 출력하시오.
insert into emp(empno,ename,sal)
values(1122,' JACK',3000) ;
지금 공백을 넣은 것!!!
select ename, sal
from emp
where trim(ename) = 'JACK';
이렇게 하면 공백이 있어도 잘라버려서 출력해버림.
이거 좀 모르겠는데...
☞lpad (pad는 채워넣는다는 의미인데 l은 왼쪽에 r은 오른쪽에)
ipad(sal,10,'*') 이렇게 되면
월급을 출력하는데 왼쪽에 혹은 오른쪽에 별표를 채워넣어라
근데 만약에 공백을 쓰게 되면 어떻게 될까? 공백이 채워진다.
그러면 보이지 않게되는 것.공백을 채워넣는지 어떻게 알면은?
length를 하면됨. length(rpad(sal,10,' '))
문제35.직업이 salesman이 아닌 사원들의 이름과 직업을 출력하는데
직업을 소문자로 출력하고 월급이 높은사원부터 출력하시오.
SELECT ENAME,SAL,LOWER(JOB)
FROM EMP
WHERE JOB <> 또는 != 'SALESMAN'
ORDER BY SAY DESC;
나는 여기서 실수한게 자꾸 =! 이렇게했음..
'디비1' 카테고리의 다른 글
디비1 - 4월6일월요일 - group 함수 (0) | 2015.04.06 |
---|---|
디비1 - 3월30일 월요일 - 날짜형식,nvl,decode,case함수 (0) | 2015.03.30 |
디비 - 3월23일 월요일 (0) | 2015.03.23 |
3월 9일 월요일 (0) | 2015.03.09 |
1회 - 3월 2일 월요일 (0) | 2015.03.03 |