현 블로그는 모바일 환경이 아닌 PC환경에 최적화 되어있습니다.

 Mir의 운영환경

Chapter2에서 SELECT의 출력문의 양식등을 바꾸는법을 배웠다.


SELECT는 원하는 컬럼(열)을 찾아 출력하는 명령어이다.

이번시간에는 원하는 컬럼(열)중에 특정조건을 만족시키는 레코드(행)을 조회하는 법을 알아보자.



Chapter2에서 계속 사용했던 사원이름과 연봉을 계산하여 출력해보자.


자 우리가 원하는 컬럼을 찾아서 출력을 시켰는데 내가 원하는것은 연봉이 30000이상인 사람의 명단을 원한다. 그럴때 WHERE절을 넣어서 특정조건을 넣어주면 된다.


SELECT 컬럼

FROM 테이블이름

WHERE 조건식


그럼 연봉이 30000이상인 사람을 조건식으로 적으면 어떻게 적어야 될까?

간단하다 비교연산자 > , < , >=, <=, <> 를 사용하여 조건식을 적으면 된다.

SELECT ename, sal*12

FROM emp

WHERE sal*12 >= 30000 ;


비교연산자만으로도 다양한 조건식을 만들수 있는데

ename = 'SCOTT'  (이름이 SCOTT인 사원)

deptno = 10 (부서번호가 10번인 사원)

sal < 1000 (월급이 1000이 안되는 사원)

등등 간단한 여러 조건식을 만들수 있다. (한번씩 출력해보기 바란다.)


한가지 주의할점이 있는데 문자열을 검색할때에는 대소문자도 구분하기 때문에

꼭 대,소문자를 맞춰서 검색해주어야 한다.



자 그럼 비교연산자외의 다른연산자에 대해서 간단히 알아보자.


1. 비교연산자 ( =, > , < , >=, <=, <> ) : <>는 같지 않다를 뜻함. 


2. 논리연산자 (AND, OR, NOT) : not은 조건에 만족하지 못하는것만 검색


3. LIKE연산자 : x를 포함한것을 검색할때 사용. 직역하면 비슷한것을 찾는다?


이외에 IN연산자 BETWEEN AND연산자가 존재한다.



하나씩 살펴보자.


논리연산자(AND, OR, NOT)


AND와 OR은 모두다 알것이라고 믿는다.

OR은 한가지 조건만 만족시켜도 되지만

AND는 두가지 조건을 모두 만족시키는 값을 출력한다.


ex)

 sal >= 2000 AND empno = 10 

부서번호가 10번인 사람들중에 월급이 2000이 넘는사람


sal >= 2000 OR comm >= 100

월급이 2000이상 이거나 커미션이 100이상인사람




NOT은 조건식에 포함이 되지 않는 모든값을 출력하게 된다.

NOT sal >= 2000 AND empno = 10 

월급이 2000이상 이거나 커미션이 100이상인사람을 제외한 모든 사람




LIKE연산자


LIKE연산자는 와일드카드문자( %, _) 와 함께 사용이 된다.

%는 0~N개의 문자열을 대체하며 

_는 1글자의 문자열을 대체하게 된다.


예를 들어 

LIKE 'A%'  를 출력하게 되면 A로 시작되는 모든 값을 출력하게 되며

LIKE '%H%' 를 출력하게 되면 H가 들어간 모든 값을 출력하게 된다.

그럼 D로 끝나는 문자열을 출력할려면 어떻게 하면 될까?  LIKE '%D' 를 출력하면된다.


_는 1글자의 문자열만 대체하게 되는데

LKE 'A _ _'를 출력하면 A로 시작하는 3자리의 문자열을 출력하게 된다.


두번째 자리의 문자가 E인 문자열을 출력하라고 명령을 내릴려면 어떻게 해야될까?

그럴때는 _와 %를 합쳐서 사용하면 된다.

LIKE '_E% ' 

_는 한글자만 대채하기 때문에 E앞에 한글자가 있어야 되며 %는 0~N개의 문자열을

대체하기 때문에 해석을 하게되면 두번째문자가 E인 문자열을 출력하라가 된다.



마지막으로 BETWEEN ANDIN연산자를 살펴보자.


BETWEEN AND는 특정범위의 값을 검색할때 사용한다.


예를 들어

sal >=500 AND sal <=4000 (봉급이 500이상 4000이하인 사람)

을 검색하는데 이것을 BETWEEN AND로 바꾸면

BETWEEN 500 AND 4000;

으로 바꿔지는것이다.


논리연산자만으로도 충분히 가능한 일이기때문에 아직 쓰임새를 잘모르겠다.

아마 특정범위의 값을 검색할때 좀더 간편하게 검색할려고 만든 명령어인것 같다.

(누누히 말하지만 필자는 오라클 배우기 시작한지 1주일도 안됫다 ;ㅁ ;)


IN연산자는 OR의 기능을 좀더 간편하게 만들었는데


comm = 300 OR comm = 500 OR comm = 1400;(커미션이 300혹은 500, 1400인 사람)

을 IN연산자로 바꾸면 comm IN(300, 500, 1400) 으로 바뀌게 된다.




자 그럼 위에서 배운 연산자를 사용하여 아래 문제들을 풀어보도록 하자.

(이런건 보는거보다 문제로 풀어보는게 훨씬 빨리 익혀진다.)


1. emp에서 급여가 2000 이상인 사람을 출력하세요.



2. emp에서 급여 sal가 2000 이상인 사람의 이름 ename과 사번 empno을 출력하세요.



3. emp에서 이름이 'FORD'인 사람의 사번 empno과 급여 sal을 출력하세요



4. emp에서 입사일자 hiredate가 82년 이후에 입사한 사람의
   이름과 입사일자를 출력하세요.

(날짜를 넣을때는 YY/MM/DD형태를 사용하면된다.)



5. emp에서 이름이 J가 들어가는 사원의 이름과 사번을 출력하세요.



6. emp에서 이름이 S로 끝나는 사원의 이름과 사번을 출력하세요.



7. emp에서 이름의 두번째 글자가 A가 들어가는 사원의 이름과 사번을 출력하세요.



8. emp에서 보너스가 300이거나 5000이거나 1400인 사람의
    이름, 사번, 보너스를 출력하세요.



9. emp에서 보너스가 500에서 4000 사이의 사원의 이름과 사번, 보너스를 출력하세요.



10. emp에서 부서가 10이고 직책이 CLERK인
     직원이름,사번,직책(job),부서(deptno)를 출력하세요.



11. emp에서 입사일자가 82년 이후이거나 직책이 MANAGER인 사람의
     이름과 입사일자를 출력하세요.



12. emp에서 부서번호가 10이 아닌 직원의 사번,이름,부서번호를 출력하세요.



13. emp에서 이름에 A가 없는 직원의 사번과 이름을 출력하세요.



14. emp에서 보너스가 500에서 1400이 아닌 직원의 사번과 보너스를 출력하세요.



15. emp에서 매니저를 갖지 않은 직원이름을 출력하세요.

-- null값은 is null로 표현한다.


16. emp에서 커미션을 받는(커미션이 null값이 아닌) 직원이름과 커미션을 출력하세요.





---- 답.




1. emp에서 급여가 2000 이상인 사람을 출력하세요.

select * from emp where sal>=2000;




2. emp에서 급여 sal가 2000 이상인 사람의 이름 ename과 사번 empno을 출력하세요.

select ename,empno from emp where sal>=2000;





3. emp에서 이름이 'FORD'인 사람의 사번 empno과 급여 sal을 출력하세요.

(날짜를 넣을때는 YY/MM/DD형태를 사용하면된다.)

select empno,sal from emp where ename='FORD';




4. emp에서 입사일자 hiredate가 82년 이후에 입사한 사람의 이름과 입사일자를 출력하세요.

select ename,hiredate from emp where hiredate>='1982/01/01';




5. emp에서 이름이 J가 들어가는 사원의 이름과 사번을 출력하세요.

select ename,empno from emp where ename like '%J%';




6. emp에서 이름이 S로 끝나는 사원의 이름과 사번을 출력하세요.

select ename,empno from emp where ename like '%S';




7. emp에서 이름의 두번째 글자가 A가 들어가는 사원의 이름과 사번을 출력하세요.

select ename,empno from emp where ename like '_A%';





8. emp에서 보너스가 300이거나 5000이거나 1400인 사람의 이름, 사번, 보너스를 출력하세요.

select ename, empno, comm from emp where comm=300 or comm=500 or comm=1400;

select ename, empno, comm from emp where comm in(300, 500, 1400);




9. emp에서 보너스가 500에서 4000 사이의 사원의 이름과 사번, 보너스를 출력하세요.

select ename,empno,comm from emp where comm>=500 and comm<=4000;

select ename,empno,comm from emp where comm between 500 and 1400 ;





10. emp에서 부서가 10이고 직책이 CLERK인 직원이름,사번,직책(job),부서(deptno)를 출력하세요.

select ename,empno,job,deptno from emp where deptno=10 and job='CLERK';


 


11. 입사일자가 82년 이후이거나 직책이 MANAGER인 사람의 이름과 입사일자를 출력하세요.

select ename,hiredate from emp where hiredate>='82/01/01' or job='MANAGER';


 

12. emp에서 부서번호가 10이 아닌 직원의 사번,이름,부서번호를 출력하세요.

select empno,ename,deptno from emp where not deptno = 10;




13. emp에서 이름에 A가 없는 직원의 사번과 이름을 출력하세요.

select empno,ename from emp where not ename like '%A%';




14. emp에서 보너스가 500에서 1400이 아닌 직원의 사번과 보너스를 출력하세요.

select empno,comm from emp where comm not between 500 and 1400;

select empno,comm from emp where not comm>=500 and comm<=1400;




15. emp에서 매니저를 갖지 않은(매니저가 null값인) 직원이름을 출력하세요.

-- null값은 is null로 표현한다.

select ename from emp where mgr is null;



16. emp에서 커미션을 받는(커미션이 null값이 아닌) 직원이름과 커미션을 출력하세요.
select ename, comm from emp where comm is not null;





다음 챕터로 넘어가기전에 한가지만 더 배우고 가자

 

ORDER BY절 - 출력값을 오름차순(ASC) 또는 내림차순(DESC)으로
                           정렬하여
출력시키기 위한 명령어.



ORDER BY sal DESC; (월급을 내림차순으로 정렬하라)
ORDER BY sal ASC; (월급을 오름차순으로 정렬하라)

바로 문제를 풀면서 알아보도록 하자. (별로 어려울꺼도 없다.)

1. emp에서 사번, 이름, 급여를 출력하는데 급여가 적은사람부터 출력하세요.

2. emp에서 사번, 이름, 급여를 출력하는데 급여가 많은 사람부터 출력하세요.

3. emp에서 사번, 이름, 급여를 출력하는데 이름이 빠른사람부터 출력하세요.

4. emp에서 사번, 이름, 입사일을 출력하는데 입사일자가 최근인 사람부터 출력하세요.

5. emp에서 사번, 이름, 급여를 출력하는데 먼저 급여가 많은 순서로
     그리고 이름이 빠른 순서로 정열하세요.



---답

1. emp에서 사번, 이름, 급여를 출력하는데 급여가 적은사람부터 출력하세요.
select empno,ename,sal from emp order by sal asc;




2. emp에서 사번, 이름, 급여를 출력하는데 급여가 많은 사람부터 출력하세요.
select empno,ename,sal from emp order by sal desc;




3. emp에서 사번, 이름, 급여를 출력하는데 이름이 빠른사람부터 출력하세요.
select empno,ename,sal from emp order by ename asc;




4. emp에서 사번, 이름, 입사일을 출력하는데 입사일자가 최근인 사람부터 출력하세요.
select empno,ename,hiredate from emp order by hiredate desc;



5. emp에서 사번, 이름, 급여를 출력하는데 먼저 급여가 많은 순서로
     그리고 이름이 빠른 순서로 정열하세요.
select empno,ename,sal from emp order by sal desc
두개이상의 정렬조건을 줄때에는 ,로 구분하며 n개의 정렬조건중 먼저 기재한
정렬조건부터 수행되고 난뒤에 뒤에 정렬조건이 수행된다.

 

 


자격증때문에 집에서 복습할시간이 줄어드니 점점 복습이 늦어지네요 ;
어차피 입문자용이라고 생각하며 간단간단히 문제위주로 나가겠습니다.
이런것이 있다! 로만 알아두셨으면 좋겠습니다.








-------------------------------------------------------------------------------------------------------------------------------------------------------------------
본 블로그의 글을 퍼가실때 꼬릿말, 퍼가시는곳 주소를 꼭 남겨주세요.
출처 꼭 기재해주시고요. 상업적인 용도의 이용은 절대 금합니다. 
혹 프린트를 할 경우 블로그주소와 함께 프린트 해주세요.
허락을 맡지 않고 무단도용을 할경우 법적인 제제가 있을수도 있습니다.
(전 분명히 경고했습니다. 합의같은거 안합니다.)
그리고 혹 무단도용한것을 보신분은 신고해주시면 사례금 챙겨 드리겠습니다.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
⬇ 도움이 되셨다면 다음뷰 추천(아래 손가락 모양) 한번씩만 클릭해주세요 ^^ 추천은 저에게 힘이 됩니다~

+ Recent posts