SUBSTR/INSTR 퀴즈

Student 테이블을 참조해서 아래 화면과 같이 1전공(deptno1 컬럼)이 201번인 학생의 이름과 전화번호와 지역번호를 출력하세요. 단, 지역번호는 숫자만 나와야 합니다.
결과화면

NAME                  TEL                            AREA CODE
--------------------- ------------------------------ ----------
Demi Moore            02)6255-9875                   02
Macaulay Culkin       02)312-9838                    02
Wesley Snipes         053)736-4981                   053
Steve Martin          02)6175-3945                   02
Sean Connery          02)381-5440                    02
Christian Slater      031)345-5677                   031

SQL문

SELECT name, tel, SUBSTR(tel, 1, INSTR(tel, ')', 1)-1) "AREA CODE"
FROM student
WHERE deptno1 = 201;

LPAD 퀴즈

emp테이블을 사용하여 아래 화면과 같이 deptno가 10번인 사원들의 사원 이름을 총 9바이트로 출력하되 빈자리에는 해당 자리의 숫자로 채우세요.
결과화면

LPAD
----------
1234CLARK
12345KING
123MILLER

SQL문

SELECT LPAD(ename, 9, '123456789') "LPAD"
FROM emp
WHERE deptno = 10;

RPAD 퀴즈

아래 화면과 같이 emp 테이블에서 deptno가 10번인 사원들의 이름을 총 9자리로 출력하되 오른쪽 빈자리에는 해당 자릿수에 해당되는 숫자가 출력되도록 하세요.
결과화면

RPAD
-------------
CLARK6789
KING56789
MILLER789

SQL문

SELECT RPAD(ename, 9, SUBSTR('123456789', Length(ename)+1)) "RPAD"
FROM emp
WHERE deptno = 10;

REPLACE 퀴즈1

emp 테이블에서 아래와 같이 20번 부서에 소속된 직원들의 이름과 3~4번째 글자만 '-'으로 변경해서 출력하세요.
결과화면

ENAME                REPLACE
-------------------- ----------------------------------------
SMITH                SM--H
JONES                JO--S
FORD                 FO--

SQL문

SELECT ename, REPLACE(ename, SUBSTR(ename, 3, 2), '--') "REPLACE"
FROM emp
WHERE deptno = 20;

REPLACE 퀴즈2

Student 테이블에서 아래와 같이 1전공(deptno1)이 101번인 학생들의 이름과 주민등록번호를 출력하되 주민등록번호의 뒤 7자리는 '-'과'/'로 표시되게 출력하세요.
결과화면

NAME                      JUMIN                      REPLACE
------------------------- -------------------------- -------------
James Seo                 7510231901813              751023-/-/-/-
Billy Crystal             7601232186327              760123-/-/-/-
Richard Dreyfus           7711291186223              771129-/-/-/-
Danny Devito              7808192157498              780819-/-/-/-

SQL문

SELECT name, jumin, REPLACE(jumin, SUBSTR(jumin, 7), '-/-/-/-') "REPLACE"
FROM student
WHERE deptno1 = 101;

REPLACE 퀴즈3

Student 테이블에서 아래 그림과 같이 1전공이 102번인 학생들의 이름과 전화번호, 전화번호에서 국번 번호만 ' * ' 처리하여 출력하세요. 단, 모든 국번은 3자리로 간주합니다.
결과화면

NAME              TEL                            REPLACE
----------------- ------------------------------ ---------
Rene Russo        051)426-1700                   051)***-1700
Nicholas Cage     051)418-9627                   051)***-9627
Tim Robbins       055)488-2998                   055)***-2998
Charlie Sheen     055)423-9870                   055)***-9870

SQL문

SELECT name, tel, REPLACE(tel, SUBSTR(tel, INSTR(tel, ')', 1)+1, 3), '***') "REPLACE"
FROM student
WHERE deptno1 = 102;

REPLACE 퀴즈4

Student 테이블에서 아래와 같이 deptno1이 101번인 학과 학생들의 이름과 전화번호와 전화번호에서 지역번호와 국번을 제외한 나머지 번호를 ' * ' 로 표시해서 출력하세요.
결과화면

NAME                                 TEL                            REPLACE
------------------------------------ ------------------------------ ---------
James Seo                            055)381-2158                   055)381-****
Billy Crystal                        055)333-6328                   055)333-****
Richard Dreyfus                      02)6788-4861                   02)6788-****
Danny Devito                         055)278-3649                   055)278-****

SQL문

SELECT name, tel, REPLACE(tel, SUBSTR(tel, INSTR(tel, '-', 1)+1, 4), '****') "REPLACE"
FROM student
WHERE deptno1 = 101;

형 변환 함수 퀴즈 : 날짜 변환하기 1

student 테이블의 birthday 컬럼을 사용하여 생일이 1월인 학생의 이름과 birthday를 아래화면과 같이 출력하세요.
결과화면

    STUDNO NAME                                                         BIRTHDAY
---------- ------------------------------------------------------------ --------
      9511 Billy Crystal                                                76/01/23
      9514 Bill Murray                                                  76/01/20
      9712 Sean Connery                                                 78/01/05

SQL 문

SELECT studno, name, birthday
FROM student
WHERE TO_CHAR(birthday, 'MM') = '01';

형 변환 함수 퀴즈 : 날짜 변환하기 2

emp 테이블의 hiredate 컬럼을 사용하여 입사일이 1, 2, 3월인 사람들의 사번과 이름, 입사일을 출력하세요.
결과화면

     EMPNO ENAME                HIREDATE
---------- -------------------- --------
      7499 ALLEN                81/02/20
      7521 WARD                 81/02/22
      7934 MILLER               82/01/23

SQL문

SELECT empno, ename, hiredate
FROM emp
WHERE TO_CHAR(hiredate, 'MM') >= 1 AND TO_CHAR(hiredate, 'MM') <= 3;

형 변환 함수 퀴즈 3

emp 테이블을 조회하여 comm 값을 가지고 있는 사람들의 empno, ename, hiredate, 총 연봉, 15% 인상 후 연봉을 아래 화면처럼 출력하세요. 단, 총 연봉은(sal * 12)+comm으로 계산하고 아래 화면에서는 SAL로 출력되었으며 15% 인상한 값은 총 연봉의 15% 인상 값입니다. (HIREDATE 컬럼의 날짜 형식과 SAL 컬럼, 15% UP 컬럼의 $ 표시와 기호가 나오게 하세요)
결과화면

     EMPNO ENAME                HIREDATE sal              15% UP
---------- -------------------- -------- ---------------- ----------------
      7499 ALLEN                81/02/20  $19,500          $22,425
      7521 WARD                 81/02/22  $15,500          $17,825
      7654 MARTIN               81/09/28  $16,400          $18,860
      7844 TURNER               81/09/08  $18,000          $20,700

SQL문

SELECT empno, ename, hiredate, TO_CHAR((sal*12)+comm, '$99,999') "sal", 
TO_CHAR(((sal*12)+comm) + ((sal*12)+comm)*0.15, '$99,999') "15% UP"
FROM emp
WHERE comm IS NOT NULL;

NVL 함수 퀴즈

Professor 테이블에서 201번 학과 교수들의 이름과 급여, bonus, 총 연봉을 아래와 같이 출력하세요. 단, 총 연봉은 (pay * 12+bonus)로 계산하고 bonus가 없는 교수는 0으로 계산하세요.
결과화면

    PROFNO NAME                                            PAY      BONUS TOTAL
---------- ---------------------------------------- ---------- ---------- ------------
      4001 Meryl Streep                                    570        130  6,970
      4002 Susan Sarandon                                  330             3,960

SQL문

SELECT profno, name, pay, bonus, TO_CHAR(pay*12+NVL(bonus, 0), '9,999') "TOTAL"
FROM professor
WHERE deptno = 201;

NVL2 함수 퀴즈

아래 화면과 같이 emp 테이블에서 deptno가 30번인 사원들을 조회하여 comm 값이 있을 경우 'Exist'을 출력하고 comm 값이 null일 경우 'NULL'을 출력하세요.
결과화면

     EMPNO ENAME                      COMM NVL2
---------- -------------------- ---------- ----------
      7499 ALLEN                       300 Exist
      7521 WARD                        500 Exist
      7654 MARTIN                     1400 Exist
      7698 BLAKE                           NULL
      7844 TURNER                        0 Exist
      7900 JAMES                           NULL

SQL문

SELECT empno, ename, comm, NVL2(comm, 'Exist', 'NULL') "NVL2"
FROM emp
WHERE deptno = 30;

DECODE 퀴즈 1

Student 테이블을 사용하여 제1전공(deptno1)이 101번인 학과 학생들의 이름과 주민번호, 성별을 출력하되 성별은 주민번호(jumin)컬럼을 이용하여 7번째 숫자가 1일 경우 "MAN", 2일 경우 "WOMAN"으로 출력하세요.
결과화면

NAME                                         JUMIN                      Gender
-------------------------------------------- -------------------------- ----------
James Seo                                    7510231901813              MAN
Billy Crystal                                7601232186327              WOMAN
Richard Dreyfus                              7711291186223              MAN
Danny Devito                                 7808192157498              WOMAN

SQL문

SELECT name, jumin, DECODE(SUBSTR(jumin, 7, 1), '1', 'MAN', 'WOMAN') "Gender"
FROM student
WHERE deptno1 = 101;

DECODE 퀴즈 2

Student 테이블에서 1 전공이(deptno1) 101번인 학생의 이름과 연락처와 지역을 출력하세요. 단, 지역번호가 02는 "SEOUL", 031은 "GYEONGGI", 051은 "BUSAN", 052는 "ULSAN", 055는 "GYEONGNAM"입니다.
결과화면

NAME                                         TEL                            LOC
-------------------------------------------  -----------------------------  --------
James Seo                                    055)381-2158                   GYEONGNAM
Billy Crystal                                055)333-6328                   GYEONGNAM
Richard Dreyfus                              02)6788-4861                   SEOUL
Danny Devito                                 055)278-3649                   GYEONGNAM

SQL문

SELECT name, tel, 
       DECODE(SUBSTR(tel, 1, INSTR(tel, ')', 1)-1), '02', 'SEOUL', '031', 'GYEONGGI', 
                                                    '051', 'BUSAN', '052', 'ULSAN', 
                                                    '055', 'GYEONGNAM') "LOC"
FROM student
WHERE deptno1 = 101;

CASE문 퀴즈

emp 테이블을 조회하여 empno, ename, sal, LEVEL(급여등급)을 아래와 같이 출력하세요. 단, 급여등급을 sal을 기준으로 1 ~ 1000이면 Level 1, 1001 ~ 2000이면 Level 2, 2001 ~ 3000이면 Level3, 3001 ~ 4000이면 Level 4, 4001보다 많으면 Level 5로 출력하세요.
결과화면

     EMPNO ENAME                       SAL LEVEL
---------- -------------------- ---------- --------------
      7839 KING                       5000 Level 5
      7902 FORD                       3000 Level 3
      7566 JONES                      2975 Level 3
      7698 BLAKE                      2850 Level 3
      7782 CLARK                      2450 Level 3
      7499 ALLEN                      1600 Level 2
      7844 TURNER                     1500 Level 2
      7934 MILLER                     1300 Level 2
      7654 MARTIN                     1250 Level 2
      7521 WARD                       1250 Level 2
      7900 JAMES                       950 Level 1
      7369 SMITH                       800 Level 1

12 rows selected.

SQL문

SELECT empno, ename, sal, 
       CASE WHEN sal >= 1 AND sal <= 1000 THEN 'Level 1'
            WHEN sal >= 1001 AND sal <= 2000 THEN 'Level 2'
            WHEN sal >= 2001 AND sal <= 3000 THEN 'Level 3'
            WHEN sal >= 3001 AND sal <= 4000 THEN 'Level 4'
            WHEN sal >= 4001 THEN 'Level 5'
       END "LEVEL"
FROM emp
ORDER BY sal DESC;

출처