Oracle/SQL

2012.01.06 SQL 4일차(연습노트,non-equi의 조건이 간단하지 않은 것들)

에몽이ㅋ 2012. 1. 9. 22:51

NON-EQUI 연습


Test13 , test14 테이블을 참조하여 고객의 포인트보다 낮은 모든 모든 등급의 상품을 선택할 수 있다고 할때 갈비세트를 상품으로 받을 수 있는 고객의 고객번호, 포인트 , 선물을 보여주는 쿼리를 작성하시오.

 SQL> desc test13

 Name                                      Null?    Type

 -------------- -------- ----------------------------

 LEV                                       NOT NULL VARCHAR2(2)

 FPOINT                                    NOT NULL NUMBER

 TPOINT                                    NOT NULL NUMBER

 GIFT                                      NOT NULL VARCHAR2(40)

SQL> desc test14

 Name                                      Null?    Type

 ------------ -------- ----------------------------

 CUST                          NOT NULL VARCHAR2(14)

 POINT                         NOT NULL NUMBER

 

 

   1  select cust.cust, cust.point, gift.gift

  2  from test14 cust, test13 gift

  3* where gift.gift='갈비세트' AND cust.point >= gift.fpoint


gift.gift가 갈비세트인 행을 선택하고

그 중 cust.point가 fpoint보다 큰 얘들을 골라내라.


 CUST                POINT GIFT

-------------- ---------- --------------------

650207-1765152   20239650 갈비세트

672102-2123452   40935040 갈비세트

500823-1132762   75636408 갈비세트

771201-2233445  129855120 갈비세트

680801-1234455   10059470 갈비세트

620908-2121232  123674200 갈비세트


6 rows selected.



temp 테이블의 사람 중 emp_level 테이블에서의 부장직급을 받아야 할 나이를 가지고 있는 사람의 사번,성명,생일,현재나이,현재 직급을 출력하세요.

 SQL> desc temp

 Name                                      Null?    Type

 ---------------- -------- --------------

 EMP_ID                                    NOT NULL NUMBER

 EMP_NAME                                  NOT NULL VARCHAR2(10)

 BIRTH_DATE                                         DATE

 DEPT_CODE                                 NOT NULL VARCHAR2(6)

 EMP_TYPE                                           VARCHAR2(4)

 USE_YN                                    NOT NULL VARCHAR2(1)

 TEL                                                VARCHAR2(15)

 HOBBY                                              VARCHAR2(30)

 SALARY                                             NUMBER

 LEV                                                VARCHAR2(4)

 SQL> desc emp_level

 Name                                      Null?    Type

 ------------ -------- ----------------------------

 LEV                                       NOT NULL VARCHAR2(10)

 FROM_SAL                                           NUMBER

 TO_SAL                                             NUMBER

 FROM_AGE                                           NUMBER

 TO_AGE                                             NUMBER


 

 

   1  select emp.emp_id 사번, emp.emp_name 이름,

emp.birth_date 생일,

  2  trunc( (sysdate-emp.birth_date)/365 ) 나이, 

emp.lev 현재직급

  3  from temp emp, emp_level lvlinfo

  4  where

  5  lvlinfo.lev='부장' AND

  6* trunc( (sysdate-emp.birth_date)/365 ) >= lvlinfo.from_age


lvlinfo가 부장에 해당하는 행을 뽑고,

그중 나이가 from_age이상인 사람을 골라내면 됩니다.

       사번 이름       생일               나이 현재

---------- ---------- ------------ ---------- ----

  19970101 김길동     25-JAN-74            37 부장

  19960101 홍길동     22-MAR-73            38 과장

  19970201 박문수     15-APR-75            36 과장

  19930331 정도령     25-MAY-76            35 차장

  19950303 이순신     15-JUN-73            38 대리

  19966102 지문덕     05-JUL-72            39 과장

  19930402 강감찬     15-AUG-72            39 차장

  19960303 설까치     25-SEP-71            40 사원

  19970112 연흥부     05-NOV-76            35 대리

  19960212 배뱅이     15-DEC-72            39 과장

  20000101 이태백     25-JAN-80            31 수습

  20000102 김설악     22-MAR-80            31 수습

  20000203 최오대     15-APR-80            31 수습

  20000334 박지리     25-MAY-80            31 수습

  20000305 정북악     15-JUN-80            31 수습

  20006106 유도봉     05-JUL-80            31 수습

  20000407 윤주왕     15-AUG-80            31 수습

  20000308 강월악     25-SEP-80            31 수습

  20000119 장금강     05-NOV-80            31 수습

  20000210 나한라     15-DEC-80            31 수습


20 rows selected.