다양핚예제로쉽게배우는 오라클 SQL 과 PL/SQL 서짂수저
2 장. SQL 단일행함수를 배웁니다 1
- SQL 함수 2
- SQL 단일행함수 3
1. 문자함수 - 1 함수명 의 미 사용예 INITCAP 입력값의첫글자만대문자로변환 INITCAP( abcd ) -> Abcd LOWER 입력값을젂부소문자로변환 LOWER( ABCD ) -> abcd UPPER 입력값을젂부대문자로변환 UPPER( abcd ) ->ABCD LENGTH 입력된문자열의길이값을출력 LENGTH( 핚글 ) -> 2 LENGTHB 입력된문자열의길이의바이트값을출력 LENGTHB( 핚글 ) -> 4 CONCAT 두문자열을결합해서출력. 연산자와동일 CONCAT( A, B ) -> AB SUBSTR 주어짂문자에서특정문자만추출 SUBSTR( ABC,1,2) -> AB SUBSTRB 주어짂문자에서특정바이트만추출 SUBSTRB( 핚글,1,2) -> 핚 INSTR 주어짂문자에서특정문자의위치추출 INSTR( A*B#, # ) - > 4 INSTRB 주어짂문자에서특정문자의위치바이트값추출 INSTRB( 핚글로, 로 ) -> 5 4
1. 문자함수 - 2 함수명 의 미 사용예 LPAD 주어짂문자열에서왼쪽으로특정문자를채움 LPAD( love,6, * ) -> **love RPAD 주어짂문자열에서오른쪽으로특정문자를채움 RPAD( love, 6, * ) -> love** LTRIM 주어짂문자열에서왼쪽의특정문자를삭제함 LTRIM( *love, * ) -> love RTRIM 주어짂문자열에서오른쪽의특정문자를삭제함 RTRIM( love*, * ) -> love REPLACE 주어짂문자열에서 A 를 B 로치환함 REPLACE( AB, A, E ) -> EB REGEXP_REPLACE 주어짂문자열에서특정패턴을찾아치환함 아래예참조 REGEXP_INSTR 주어짂문자열에서특정패턴의시작위치를반환 아래예참조 REGEXP_SUBSTR 주어짂문자열에서특정패턴을찾아반환함 아래예참조 REGEXP_LIKE 주어짂문자열에서특정패턴을찾아반환함 아래예참조 REGEXP_COUNT 주어짂문자열에서특정패턴의횟수를반환 아래예참조 5
1) INITCAP 함수 : 첫글자만대문자로출력하고나머지는젂부소문자로출력하는함수 문법 : INITCAP( 문자열또는컬럼명 ) -Student 테이블을사용하여 1 젂공이 201 번인학생들의 ID 를첫글자맊대문자로출력하세요 문자열중간에공백이있는경우에는단어의시작부분이대문자로바뀌는것을볼수있습니다. 6
2) LOWER 함수 : 입력되는값을젂부소문자로변경하여출력합니다. 문법 : LOWER( 문자열또는컬럼명 ) 3) UPPER 함수 : 입력되는값을젂부대문자로변경하여출력합니다. 문법 : UPPER( 문자열또는컬럼명 ) 7
-Student 테이블에서 1 젂공이 201 번인학생들의 ID 를이름과함께 소문자, 대문자로출력하세요. 8
4) LENGTH / LENGTHB 함수 : 입력된문자열의길이를 ( 바이트수를 ) 계산해주는함수입니다. 문법 : LENGTH( 컬럼또는문자열 ) / LENGTHB( 컬럼또는문자열 ) 1 Student 테이블에서 ID 가 9 글자이상인학생들의이름과 ID 와글자수를출력하세요. 9
2 Student 테이블에서 1 젂공이 201 번인학생들의이름과이름의글자수, 이름의바이트수를출력하세요 10
5) CONCAT 함수 ( 연산자와동일핚기능입니다 ) 문법 : CONCAT( 문자열 1, 문자열 2 ) - Professor 테이블에서교수들의이름과직급을출력하세요. 11
6) SUBSTR 함수 문자열에서특정길이의문자를추출핛때사용하는함수입니다 문법 : SUBSTR( 문자열 또는컬럼명, 1, 4 ) 12
1 Student 테이블에서 jumin 컬럼을사용해서 1 젂공이 101 번인학생들의이름과생년월일을출력하세요. 13
2 Student 테이블에서 jumin 컬럼을사용해서태어난달이 8 월인사람의이름과생년월일을출력하세요. 14
7) SUBSTRB 함수 이함수는 SUBSTR 함수와문법은동일하며차이점은추출핛자리수가아니라추출핛바이트수를지정함 15
8) INSTR 함수 주어짂문자열이나칼럼에서특정글자의위치를찾아주는함수 문법 : INSTR( 문자열 또는컬럼, 찾는글자, 시작위치, 몇번째인지 ( 기본값은 1)) 16
시작위치를 - ( 마이너스 ) 로줄경우 자리번호 1 2 3 4 5 6 문자열 A * B * C * 2번예제 시작위치 -3-2 -1 3번예제 2번째 * 표 1번째 * 표 시작위치 -1 17
-Student 테이블의 tel 컬럼을사용하여학생의이름과젂화번호, ) 가 나오는위치를출력하세요. 18
문자함수퀴즈 1) Student 테이블을참조해서아래화면과같이 1 젂공이 (deptno1 컬럼 ) 101번인학생의이름과젂화번호와지역번호를출력하세요. 단지역번호는숫자맊나와야합니다. 결과화면 ) 19
9) LPAD 함수 문법 : LPAD( 문자열 또는컬럼명, 자리수, 채울문자 ) -Student 테이블에서 1 젂공이 101 번인학과학생들의 id 를총 10 자리로 출력하되왼쪽빈자리는 $ 기호로채우세요. 20
문자함수퀴즈 2) 결과화면 ) Dept2 테이블을사용하여 dname 을오른쪽의결과가나오도록쿼리를작성하세요. 오른쪽예시화면은 dname 을총 10 바이트로출력하되원래 dname 이나오고나머지빈자리는해당자리의숫자가나오면됩니다. 즉사장실은이름이총 6 바이트이므로숫자가 1234 까지나오는것입니다. 21
11) RPAD 함수 문법 : RPAD( 문자열 또는컬럼명, 자리수, 채울문자 ) -Student 테이블에서아래와같이 id 를 12 자리로출력하되오른쪽빈자리에는 * 로채우세요. 22
결과화면 ) 문자함수퀴즈 3) Dept2 테이블을사용하여 dname 을오른쪽의결과가나오도록쿼리를작성하세요. RPAD 연습 ---------------- 사장실 7890 경영지원부재무관리팀총무팀 7890 기술부 7890 H/W 지원 890 S/W 지원 890 영업부 7890 영업기획팀영업 1 팀 890 영업 2 팀 890 영업 3 팀 890 영업 4 팀 890 13 rows selected. 23
11) LTRIM 함수 LPAD, RPAD 함수는채우는함수이고 LTRIM, RTRIM 함수는제거하는함수임 문법 : LTRIM( 문자열 또는컬럼명, 제거핛문자 ) -dept 2 테이블에서 dname 을출력하되왼쪽에 영 이란글자를모두제거하고출력하세요 모두 영 이라는글자가없어졌습니다. 24
12) RTRIM 함수 문법 : RTRIM( 문자열 또는컬럼명, 제거핛문자 ) - Dept2 테이블에서 dname 을출력하되오른쪽끝에 부 라는글자는제거하고출력하세요. 모두 부 라는글자가없어졌습니다. 25
13) REPLACE 함수 문법 : REPLACE( 문자열 또는컬럼명, 문자 1, 문자 2 ) -Student 테이블에서학생들의이름을출력하되성부분은 # 으로표시되게출력하세요. 26
문자함수퀴즈 4) -Student 테이블에서아래와같이 1 젂공 (deptno1) 이 101 번인학생들의 이름을출력하되가운데글자맊 # 으로표시되게출력하세요. 27
문자함수퀴즈 5) -Student 테이블에서아래와같이 1 젂공 (deptno1) 이 101 번인학생들의 Student 테이블에서아래와같이 1 젂공 (deptno1) 이 101 번인학생들의이름과주민등록번호를출력하되주민등록번호의뒤 7자리는 * 로표시되게이름과주민등록번호를출력하되주민등록번호의뒤 7자리는 * 로표시출력하세요. 되도록출력하세요. 28
문자함수퀴즈 6) - Student 테이블에서아래그림과같이 1 젂공이 102 번인학생들의이름과젂화번호, 젂화번호에서국번부분맊 # 처리하여출력하세요. 단모든국번은 3자리로갂주합니다. 29
2. SQL 문장에서정규식사용하기 (10g 부터추가됨 ) 30
- 정규식이란? 사용기호 의 미 사용예 ^ Pattern으로시작하는 line 출력 ^pattern $ Pattern으로끝나는 line 출력 pattern$. P로시작하여 n으로끝나는 line (. 1 character) p.... n * 모든이라는뜻. 글자수가 0 일수도있음. [a z]* [ ] Pattern에해당하는핚문자 [Pp]attern [ ^ ] Pattern에해당하지않는핚문자 [^a m]attern 31
14) REGEXP_LIKE 함수 - 사용예제 1 : 특정문자나숫자를포함하는결과출력하기 32
- 사용예제 2: 공백을핚칸포함하는경우찾기 33
- 사용예제 3 : 공백이여러개일경우찾기 34
- 사용예제 4: 연속적인글자수지정하기 대문자가연속적으로 3 글자오는경우 소문자가연속적으로 3 글자오는경우 35
- 사용예제 4: 연속적인글자수지정하기 숫자가연속적으로 3 글자오는경우 대문자와숫자를함께검색하는데대문자가먼저연속적으로 3 글자오는경우 36
- 사용예제 4: 연속적인글자수지정하기 소문자와숫자를함께검색하는데숫자가먼저연속적으로 3 글자오는경우 대문자가연속으로 2 글자오는경우 37
- 사용예제 5: 시작되는문자와끝나는문자지정하기 숫자로시작하는행맊출력하기 숫자나소문자로시작하는행맊출력하기 38
소문자로끝나는행을출력 숫자로시작하지않는행을출력 39
소문자로시작하지않는행을출력 40
대문자 A 나숫자 1 을포함하고있는행을출력 41
소문자 a 나숫자 1 을포함하는행을출력 42
- 특정조건이아닌 (NOT) 경우출력하기 알파벳대소문자가포함되지않는행맊출력하기 43
숫자를포함하지않는행맊출력하기 44
- 특수문자찾기? 가들어있는행맊출력하기 Escape 문자사용에주의! 45
? 가들어가있지않는모든행을출력 46
15) REGEXP_REPLACE 함수 - 문법 : REGEXP_REPLACE (source_char, pattern [, replace_string [, position [, occurrence [, match_param]]]] ) - 첫번째인수인 Source 는원본데이터를의미. - 두번째인수인 pattern 은찾고자하는패턴을의미. - 세번째인수인 replace_string 은변환하고자하는형태. - 네번째인수인 position 은검색시작위치를지정. - 다섯번째인수인 occurrence 는패턴과일치가발생하는횟수를의미. - 여섯번째 match_parameter 는기본값으로검색되는옵션을바꿀수있음. 47
- 사용예제 1 : 모든숫자를특수기호로변경하기 숫자 -> + 로변홖하기 48
- 사용예제 2: 특정패턴을찾아서패턴을추가하기 49
- 사용예제 3: Student 테이블에서지역번호가 2 자리이고젂화국번이 4 자리인젂화번호를가짂학생의이름과젂화번호를출력하세요. 50
- 사용예제 4 : Student 테이블에서제 1 젂공이 101 번인학생의이름과변경후모양이아래의예제화면과같이되도록출력하세요. 51
- 사용예제 5: 사용자에게입력받은문자가운데공백이여러개들어있을경우그공백을제거시키는방법 abc 123 과같이공백있을경우공백제거 52
- 사용예제 6: 사용자가회원검색을핛때공백문자를가장먼저입력하고아이디중갂에도공백이있을때모든공백을제거해야핛경우 사용자가 75 true 와같이입력함 53
- 대소문자구분없이입력받고조회하는경우 사용자가 75 TRUE 로입력함 54
- SET verify off 사용하여화면정리하기 55
- 사용예제 6: 특정문자열을다른형태로바꿀때 아래화면은 20120324 형태로이루어짂데이터를 2012:03:24 의형태로변형하는예제입니다. 56
16) REGEXP_INSTR 함수 - 사용예제 1: 특정문자의위치를찾는방법 아래예제는 text 중에서? 의위치를찾아내는화면입니다. 57
aa bb cc dd ee 에서첫시작이공백이아닌 ( [^ ] ) 부분중에서 1번글자 ( aa ) 부터검사해서 3번째위치가출현되는자리를찾아내라 58
- 사용예제 2 : 여러가지옵션으로검색하기 59
- abc ade abc def 의문자열에서첫글자가공백이아니고 ( [^ ] ) abc 로 시작되는두번째글자의첫위치를표시하라 60
17) REGEXP_SUBSTR 함수 abc* *def %ghi,jkl 이란문자열에서첫글자가공백이아니고 ( [^ ] ) 그후 에 def 가나오는부분을추출하라고해서 *def 부분이출력이되는예제 61
abc* *def %ghi,jkl 이란문자열에서첫글자가공백이아니고 ( [^ ] ) 그후에콤마 (,) 로구분되는문자열을출력하라고해서 %ghi, 까지가출 력된예제 62
- 교수테이블 (professor ) 테이블에서홈페이지 (hpage) 주소가있는교수들맊 조사해서아래의화면처럼나오게출력하세요. 63
- Professor 테이블에서교수의이름과메일주소를출력하세요. 단메일주소는 @ 뒤에있는주소맊출력하세요. 64
3. 11g 에서추가된정규식함수 65
1) REGEXP_COUNT 함수 : 특정문자의개수를세는함수 소문자 a 의개수를세는경우 66
검색위치를 3 으로지정해서 3 번째문자이후부터해당소문자 a 가나오는개수를세는예제입니다 67
대소문자구분여부를테스트핚화면입니다. R2 결과컬럼을보면 i 옵션으로대소문자를무시하고검색하는것을확인핛수있습니다 68
탈출문자 (Escape) 를사용하는예를보여줍니다. R1 결과에서는. ( 점 ) 이모든것이란뜻으로작동했지만 R2 결과는 \( 탈출문자 ) 를썼기때문에.( 점 ) 으로인식해서결과를출력핚것입니다. 69
어떤문자를검색핛때사용하는방법을 3 가지로살펴보았습니다. 어떤방법으로검색하든동일핚결과가나옴을알수있습니다. 70
2) 11g REGEXP_SUBSTR 추가기능 ( Sub Expression 사용하기 ) 71
72
4. 숫자함수 73
이 름 의 미 사용예 ROUND 주어짂숫자를반올림핚후출력함 ROUND(12.345,2) -> 12.35 TRUNC 주어짂숫자를버림핚후출력함 TRUNC(12.345,2) -> 12.34 MOD 주어짂숫자를나누기핚후나머지값출력함 MOD(12,10) -> 2 CEIL 주어짂숫자와가장근접핚큰정수출력함 CEIL(12.345) -> 13 FLOOR 주어짂숫자와가장근접핚작은정수출력함 FLOOR(12.345) -> 12 POWER 주어짂숫자1의숫자2 승을출력함 POWER(3,2) -> 9 74
1) ROUND 함수 - 문법 : ROUND( 숫자, 원하는자리수 ) 자리수에주의하세요! 75
2) TRUNC 함수 - 문법 : TRUNC( 숫자, 원하는자리수 ) 76
3) MOD, CEIL, FLOOR 함수 77
4) POWER 함수 - 문법 : POWER( 숫자 1, 숫자 2) 78
5. 날짜함수 79
- 10 월 23 일 + 3 은 10 월 26 일로생각합니다. - 10 월 23 일 3 은 10 월 20 일로생각합니다. - 10 월 23 일 10 월 20 일은 3 일차이난다라고생각합니다. 함수명 의 미 결과 SYSDATE 시스템의현재날짜와시갂 날짜 MONTHS_BETWEEN 두날짜사이의개월수 숫자 ADD_MONTHS 주어짂날짜에개월을더함 날짜 NEXT_DAY 주어짂날짜를기준으로돌아오는날짜출력 날짜 LAST_DAY 주어짂날짜가속핚달의마지막날짜출력 날짜 ROUND 주어짂날짜를반올림 날짜 TRUNC 주어짂날짜를버림 날짜 80
1) SYSDATE 함수 ( 현재날짜 / 시갂출력 ) 81
2) MONTHS_BETWEEN 함수 ( 두날짜사이의개월수계산 ) 82
- MONTHS_BETWEEN 함수주요특징 1. 큰날짜를먼저써야합니다. 작은날짜 ( 오래된날짜 ) 를먼저써서마이너스값나옴 83
2. 두날짜가같은달에속해있으면특정규칙으로계산된값이나옵니다 * 1 개월이 29 일인 2012 년 2 월을조회핚화면 84
* 1 개월이 30 일인 2012 년 4 월을조회핚화면 * 1 개월이 31 일인 2012 년 1 월을조회핚화면 85
3. 두날짜가모두해당월의마지막날이거나처음날이면개월수가 정수값으로나옵니다. 86
4. 두날짜중하나는시작일이고하나는마지막일이면특정규칙으로계산된 값이나옵니다. 87
* 2 월은일수가달라도반홖값은같습니다. 2 월이 28 일까지있는 2011 년 2 월을조회핚화면입니다 2 월이 29 일까지있는 2012 년 2 월을조회핚화면입니다 88
- MONTHS_BETWEEN 과젂통적인방법의차이 89
3) ADD_MONTHS 함수 90
4) NEXT_DAY 함수 91
5) LAST_DAY 함수 92
6) 날짜의 ROUND, TRUNC 함수 93
6. 형변홖함수 94
- 오라클의주요데이터형 데이터타입설명 CHAR(n) VARCHAR2(n) NUMBER(p,s) DATE LONG CLOB BLOB RAW(n) LONG RAW(n) BFILE 고정길이의문자를저장합니다. 최대값은 2000 bytes 입니다 변하는길이의문자를저장합니다. 최대값은 4000 bytes 입니다 숫자값을저장합니다.p 는젂체자리수로 1-38 자리까지가능하고 s 는소수점이하자리수로 -84 ~ 127 자리까지가능합니다. 총 7Byte 로 BC 4712 년 1 월 1 일부터 AD 9999 년 12 월 31 일까지의날짜를저장핛수있습니다. 가변길이의문자를저장하며최대 2GB 까지저장핛수있습니다 가변길이의문자를저장하며최대 4GB 까지저장핛수있습니다 가변길이의바이너리데이터를최대 4GB 까지저장핛수있습니다 원시이짂데이터로최대 2000 bytes 까지저장핛수있습니다 원시이짂데이터로최대 2GB 까지저장핛수있습니다 외부파일에저장된데이터로최대 4GB 까지저장핛수있습니다 95
- 묵시적 ( 자동 ) 형변홖 SQL> SELECT 1 + to_number( 1 ) 2 FROM dual ; 96
- 명시적 ( 수동 ) 형변홖 TO_CHAR TO_CHAR 숫자 (number) 문자 (char) 날짜 (date) TO_NUMBER TO_DATE 97
1) TO_CHAR 함수 ( 날짜를문자로형변홖하기 ) 문법 : TO_CHAR( 원래날짜, 원하는모양 ) * 년도 : YYYY 연도를 4 자리로표현합니다. 예 : 1999 RRRR 2000 년이후에등장핚새로운날짜표기법입니다. YY 연도를끝의 2 자리만표시합니다. 예 : 99 YEAR 연도의영문이름젂체를표시합니다. 98
월 : MM 월을숫자 2 자리로표현합니다. 예 : 10 MON 월을뜻하는영어 3 글자로표시합니다. 예 : OCT MONTH 월을뜻하는영어이름젂체를표시합니다 99
일 : DD 일을숫자 2 자리로표시합니다. 예 : 12 DAY 요일에해당하는영어명칭을표시합니다. DDTH 몇번째날인지를표시합니다. 100
시갂 : HH24 하루를 24 시갂으로표시합니다 HH 하루를 12 시갂으로표시합니다. 분 : MI 로표시합니다. 초 : SS 로표시합니다. 101
** 형변홖함수퀴즈 1 -Student 테이블의 birthday 칼럼을참조하여생일이 3 월인학생의이름과 birthday 를출력하세요. 102
2) TO_CHAR 함수 ( 숫자를문자로형변홖하기 ) 종류 의 미 사 용 예 결 과 9 9 하나당 1 자리를의미 TO_CHAR(1234, 99999 ) 1234 0 빈자리를 0으로표시 TO_CHAR(1234, 099999 ) 001234 $ $ 표시를붙여서표시 TO_CHAR(1234, $9999 ) $1234. 소수점이하를표시 TO_CHAR(1234, 9999.99 ) 1234.00, 천단위구분기호를표시 TO_CHAR(12345, 99,999 ) 12,345 103
- professor 테이블을참조하여 101 번학과교수들의이름과연봉을출력하세요. 단연봉은 (pay *12)+bonus 로계산하시고천단위구분기호로표시하세요. 104
3) TO_NUMBER 함수 문법 : TO_NUMBER( 1 ) 105
4) TO_DATE 함수 문법 : TO_DATE( 문자, 날짜포맷 ) 106
** 형변홖함수퀴즈 2 -Professor 테이블을사용하여 1990 년이젂에입사핚교수명과입사일, 현재연봉과 10% 인상후연봉을출력하세요. 연봉은상여금 (bonus) 를제외핚 (pay*12) 로계산하고연봉과인상후연봉은천단위구분기호를추가하여출력하세요. 107
7. 일반함수 108
1) NVL 함수 : NULL 값을맊나면다른값으로치홖해서출력하는함수 문법 : NVL( 컬럼, 치홖핛값 ) * 치홖값이숫자일경우 NVL(sal, 0) -> sal 컬럼의값이 null 일경우 null 대싞 0 으로치환하라 NVL(sal, 100) -> sal 컬럼의값이 null 일경우 null 대싞 100 으로치환하라 * 치홖값이문자일경우 NVL(job, 무직 ) -> job 값이 null 일경우 무직 으로치환하라 * 치홖값이날짜일경우 NVL(hiredate, sysdate ) -> hiredate 값이없을경우 sysdate 날짜로치환하라 109
- Professor 테이블에서 101 번학과교수들의이름과급여, bonus, 연봉을 출력하세요. 단연봉은 (pay*12+bonus) 로계산하고 bonus 가없는교수는 0 으로계산하세요. 110
2) NVL2 함수 문법 : NVL2( COL1, COL2, COL3 ) - professor 테이블에서교수의이름과 pay, bonus, 연봉을출력하세요단연봉은 (pay*12+bonus) 로계산하고맊약 bonus 가없으면급여를 0 으로처리하세요. 111
3) DECODE 함수 유형 1. A 가 B 일경우 1 을출력하는경우 IF 문장 DECODE 함수 IF A = B THEN RETURN 1 ; END IF ; DECODE (A, B, 1, null) ( 마지막 null 은생략가능합니다 ) 이예는 A 가 B 라면 1 을출력합니다. 가장기본적인 DECODE 함수문형입니다. 그렇다면 A 가 B 가아니라면무엇을출력핛까요? 답은 NULL 을출력합니다. 112
유형 1 예제 : professor 테이블에서교수명과학과번호, 학과명을출력하되 deptno 가 101 번인교수맊컴퓨터공학과로출력하고 101 번이아닌교수들은학과명에아무것도출력하지마세요 deptno 가 101 번이면주어짂출력내용인 컴퓨터공학과 를출력하고그외에는젂부 NULL 값으로출력이되었습니다. 113
유형 2. A 가 B 일경우 1 을출력하고아닐경우 2 를출력하는경우 IF 문장 IF A = B THEN RETURN 1 ; ELSE RETURN 2 ; END IF ; DECODE 함수 DECODE ( A, B, 1, 2 ) 114
유형 2 예제 : professor 테이블에서교수명과학과번호, 학과명을출력하되 deptno 가 101 번인교수맊컴퓨터공학과로출력하고 101 번이아닌교수들은학과명에 기타학과 로출력하세요 115
유형 3. A 가 B 일경우 1 을출력하고 A 가 C 일경우 2 를출력하고 둘다아닐경우 3 을출력하는경우 IF 문장 IF A = B THEN RETURN 1 ; ELSIF A = C THEN RETURN 2 ; ELSE RETURN 3 ; END IF ; DECODE 함수 DECODE ( A, B, 1, C, 2, 3 ) 116
유형 3 예제 : Professor 테이블에서교수의이름과학과명을출력하되학과번호가 101 번이면 컴퓨터공학과, 102 번이면 멀티미디어공학과, 103 번이면 소프트웨어공학과 나머지는 기타학과 로출력하세요. 117
유형 4. A 가 B 일경우중에서 A 가 C 를맊족하면 1 을출력하고 A 가 C 가아닐경우 2 를출력하는경우 ( DECODE 함수안에 DECODE 함수가중첩되는경우 ) IF 문장 IF A = B THEN IF A = C THEN RETURN 1 ; ELSE RETURN 2 ; END IF ; ELSE RETURN 2 ; END IF ; RETURN 3 ; END IF ; DECODE 함수 DECODE ( A, B, DECODE( A, C, 1, 2 ) 2 ) 118
유형 4 예제 : professor 테이블에서교수의이름과부서번호를출력하고 101 번부서중에서이름이조인형교수에게석좌교수후보라고출력하세요. 나머지는 NULL 값을출력합니다. 119
유형 5. A 가 B 일경우중에서 A 가 C 를맊족하면 1 을출력하고 A 가 C가아닐경우 2 를출력하고 A 가 B가아닐경우 3 을출력하는경우 ( DECODE 함수안에 DECODE 함수가중첩되는경우 ) DECODE 함수 DECODE ( A, B, DECODE( A, C, 1, 2 ) 3 ) 120
유형 5 예제 : professor 테이블에서교수의이름과부서번호를출력하고 101 번부서중에서이름이조인형교수에게비고란에 석좌교수후보 라고출력하세요. 101 번학과의조인형교수외에는비고란에 후보아님 을출력하고 101 번교수가아닐경우는비고란이공란이되도록출력하세요. 121
** DECODE 연습문제 1 -Student 테이블을사용하여제 1 젂공 (deptno1) 이 101 번인학과학생들의이름과주민번호, 성별을출력하되성별은주민번호 (jumin) 칼럼을이용하여 7번째숫자가 1일경우 남자, 2일경우 여자 로출력하세요. 122
** DECODE 연습문제 2 Student 테이블에서 1 젂공이 (deptno1) 101 번인학생의이름과젂화번호와 지역명을출력하세요. 지역번호가 02 는서울, 031 은경기, 051 은부산, 052 는울산, 055 는경남으로출력하세요. 123
4) CASE 표현식 CASE 조건 WHEN 결과1 THEN 출력1 [WHEN 결과2 THEN 출력2] ELSE 출력3 END 컬럼명 124
예제 1: DECODE 와동일하게 = 조건으로사용되는경우 - Student 테이블을참조하여학생의이름과젂화번호, 지역명을출력하세요. 단지역번호가 02 면서울, 031 이면경기, 051 이면부산, 052 이면울산, 055 이면경남, 나머지는기타로표시하세요. 125
- 예제 2 : 비교조건이 = 이아닌경우 Student 테이블의 jumin 컬럼을참조하여학생들의이름과태어난달, 그리고분기를출력하세요. 태어난달이 01-03 월은 1/4 분기, 04 06 월은 2/4 분기, 07 09 월은 3/4 분기, 10 12 월은 4/4 분기로출력하세요 126
** CASE 연습문제교수테이블 (professor) 를조회하여교수의급여액수를기준으로 200 미맊은 4 급, 201 300 까지는 3 급, 301 400 까지는 2 급, 401 이상은 1 급으로표시하여교수의번호, 교수이름, 급여, 등급을출력하세요. ( 단 pay 컬럼을내림차순으로정렬하세요 ) 127