제8절 정규 표현식
- 개요.
정규 표현식(regular expression)은 문자열의 규칙을 표현하는 검색 패턴으로 주로 문자열 검색과 치환에 사용된다.
- 기본 문법
가. POSIX 연산자 정규 표현식의 POSIX 연산자(POSIX operator)를 살펴보자.
다음은 정규 표현식의 기본 연산자다.
연산자영문설명 dotor 모든 문자와 일치(newline 제외)대체 문자를 구분 다음 문자를 일반 문자로 취급 backslash
다음은 dot 연산자를 사용한 쿼리다. REGEXP_SUBSTR 함수는 문자열에서 일치하는 패턴을 반환한다. 조금 후에 자세히 살펴보자. c1, c2, c3, c4 열의 dot 연산자는 각각 a, b, C, 문자와 일치한다. c4 열은 세 번째 문자인 c가 패턴의 세 번째 문자인 b와 일치하지 않기 때문에 널을 반환한다.
[예제]
SELECT REGEXP_SUBSTR (‘aab’, ‘a.b’) AS (1 REGEXP_SUBSTR (‘abb’, ‘a.b’) AS (2 REGEXP_SUBSTR (‘acb’, ‘a.b’) AS (3 REGEXP_SUBSTR (‘adc’, ‘a.b’) AS (4 FROM DUAL;
[실행 결과]C1(23C4||-aababbacb
1개의 개의 행이 선택되었습니다.
다음은 or 연산자를 사용한 쿼리다. c3 열의 c는 a 또는 b와 일치하지 않고, C6 열의 bc는 ab 또는 cd와 일치하지않기 때문에 널을 반환한다. or 연산자는 기술 순서에 따라 패턴을 일치시킨다. c7 열은 a, c8 열은 aa가 일치한다.
[예제]
. . SELECT REGEXP_SUBSTR(‘a’, ‘alb’ ) AS C1 - a 또는 b REGEXP_SUBSTR (‘b’, ‘ab’) AS C2 REGEXP_SUBSTR (‘c’, ‘ab’) AS (3 REGEXP_SUBSTR (‘ab’, ‘ablcd’) AS C4 ab E cd REGEXP_SUBSTR (‘cd’, ‘ab cd’) AS C5 REGEXP_SUBSTR ( ‘bc’, ‘ablcd’) AS C6 REGEXP_SUBSTR (‘aa’, ‘aaa’ ) AS C7 - a 또는 aa REGEXP_SUBSTR (‘aa’, ‘aaa’ ) AS C8 FROM DUAL; .
[(13C406C2(78(5abcdabaaa
실행 결과]
1개의 개의 행이 선택되었습니다.
| 아래는 backslash 연산자를 사용한 쿼리다. cl 열은 | 문자가 or 연산자로 동작해 a 문자가 일치하지만, c2열은 | 문자가 일반 문자로 처리돼 alb 문자열이 일치한다. |
[예제] SELECT REGEXP_SUBSTR (‘ab’, ‘ab’ ) AS (1 REGEXP_SUBSTR (‘ab’, ‘a}b’) AS C2 FROM DUAL; 1
[실행 결과]
C1
2.
ab
a
1개의 개의 행이 선택되었습니다.
앵커(anchor)는 검색 패턴의 시작과 끝을 지정한다.
연산자영문설명 carrot 문자열의 시작 문자열의 끝$dollar
다음은 carot 연산자와 dollar 연산자를 사용한 쿼리다. CHR (10) 표현식은 개행(line feed) 문자를 반환한다. cl 열은 전체 문자열의 시작 문자인 a를, c2 열은 전체 문자열의 두 번째 시작 문자가 존재하지 않으므로 널을 반환한다. C3 열은 전체 문자열의 끝 문자인 d를, c4 열은 전체 문자열의 두 번째 끝 문자가 존재하지 않기 때문에 널을 반환한다.
[예제]
| SELECT REGEXP_SUBSTR (‘ab’ | CHR (10) | ‘cd’, ‘.’, 1, 1) AS C1 REGEXP_SUBSTR (‘ab’ | CHR (10) | ‘cd’, 1, 2) AS C2 REGEXP_SUBSTR (‘ab’ | CHR (10) | ‘cd’, ‘$’, 1, 1) AS C3 REGEXP_SUBSTR (‘ab’ | CHR (10) | ‘cd’, ‘S’, 1, 2) AS C4 FROM DUAL; |
[실행 결과]C1C23C4ad
1개의 개의 행이 선택되었습니다.
수량사(quantifier)는 선행 표현식의 일치 횟수를 지정한다. 패턴을 최대로 일치시키는 탐욕적(greedy) 방식으로 동작한다.
연산자설명?*+ {m}{m,}{,m}{m,n}10회 또는 1회 일치 0회 또는 그 이상의 횟수로 일치 1회 또는 그 이상의 횟수로 일치m회 일치 최소 m회 일치 최대 m회 일치 최소 m회, 최대 n회 일치
다음은?, *+ 연산자를 사용한 쿼리다. 주석에 일치할 수 있는 문자열을 기술했다. c3 열은 b가 0회 또는 1회 일치해야 하기 때문에 널을 반환한다.
[예제]
. . SELECT REGEXP_SUBSTR (‘ac’ ‘ab?c’) AS C1 - ac, abc REGEXP_SUBSTR (‘abc’, ‘ab?c’) AS C2 REGEXP_SUBSTR (‘abbc’, ‘ab?c’) AS (3 (‘ REGEXP_SUBSTR (‘ac’ ( ‘abc’) AS C4 - ac, abc, abbc, abbbc, REGEXP_SUBSTR (‘abc’, ‘abc’) AS C5 REGEXP_SUBSTR (‘abbc’, ‘abc’) AS C6 REGEXP_SUBSTR (‘ac’ ‘abtc’) AS C7 abc, abbc, abbbc, abbbbc, REGEXP_SUBSTR (‘abc’, ‘ab+c’) AS C8 ( REGEXP_SUBSTR (‘abbc’, ‘ab+c’) AS (9 FROM DUAL;
[실행 결과]
C4
C5
| 8 |
8
| 6abbc |
(2
C1
ac
abc
C7
ac
abbc
abc
abc
3
1개의 개의 행이 선택되었습니다.
다음은 {m}, {m,}, {m,n} 연산자를 사용한 쿼리다. c5 열은 a가 최소 4회, 최대 5회 일치해야 하기 때문에 널을 반환한다.
[예제]
SELECT REGEXP_SUBSTR (‘ab’ , ‘a{2}’ ) AS C1 - aa REGEXP_SUBSTR (‘aab’, ‘a{2}’ ) AS C2 REGEXP_SUBSTR (‘aab’ , ‘a{3,}’ ) AS C3 - aaa, aaaa, REGEXP_SUBSTR (‘aaab’, ‘a{3,}’) AS C4 REGEXP_SUBSTR (‘aaab’ ‘a{4,5}’) AS C5 - aaaa, aaaaa REGEXP_SUBSTR (‘aaaab’, ‘a{4,5}’) AS C6 FROM DUAL;
[실행 결과]C1C234CSC6aaaaaaaaa
1개의 개의 행이 선택되었습니다.
앵커(anchor)는 검색 패턴의 시작과 끝을 지정한다.
연산자(expr)설명괄호 안의 표현식을 하나의 단위로 취급
다음은 서브 표현식을 사용한 쿼리다. cl 열은 ab, c2 열은 b가 1회 이상 반복된다. c3 열은 b 또는 C, c4열은 ab 또는 cd가 대체된다.
[예제]
SELECT REGEXP_SUBSTR (‘ababc’, ‘(ab)+c’ ) AS (1 – abc, ababc, REGEXP_SUBSTR (‘ababc’, ‘ab+c’ ) AS C2 – abc, abbc, REGEXP_SUBSTR (‘abd’ ‘a(bic)d’) AS C3 - abd, acd REGEXP_SUBSTR (‘abd ‘ablcd ) AS C4 - ab, cd FROM DUAL; .
[실행 결과]
C3
ababc
F
abd
C1
abc
ab
C2
1개의 개의 행이 선택되었습니다.
역 참조(back reference)를 사용하면 일치한 서브 표현식을 다시 참조할 수 있다. 반복되는 패턴을 검색하거나 서브 표현식의 위치를 변경하는 용도로 사용할 수 있다.
연산자설명 n번째 서브 표현식과 일치, n은 1에서 9 사이의 정수 In
다음은 역 참조를 사용한 쿼리다. Cl, c2, c3 열의 패턴은 abxab, cdxcd 문자열과 일치한다. c4, c5, c6 열은 동일한 문자열이 1회 이상 반복되는 패턴을 검색한다.
[예제]
SELECT REGEXP_SUBSTR (‘abxab’, ‘(ab cd)x\1’) AS C1 - abxab, cdxcd
REGEXP_SUBSTR (‘cdxcd’ ‘(ablcd) \1’) AS C2 REGEXP_SUBSTR (‘abxef’, ‘(ab cd)x\1’) AS (3 REGEXP_SUBSTR (‘ababab’, ‘(.)\1+’ ) AS (4 REGEXP_SUBSTR (‘abcabc’, ‘(.)\1+’ ) AS C5
REGEXP_SUBSTR (‘abcabd’, ‘(.*)\1+’ ) AS C6 FROM DUAL;
[실행 결과]
C3
C2
C4
C5
C1
ababab abcabc
abxab
cdxcd
C6
1개의 개의 행이 선택되었습니다.
문자 리스트(character list)는 문자를 대괄호로 묶은 표현식이다. 문자 리스트 중 한 문자만 일치하면 패턴이 일치한 것으로 처리된다. 문자 리스트에서 하이픈(-)은 범위 연산자로 동작한다.
연산자(char.)[Schar]설명문자 리스트 중 한 문자와 일치문자 리스트에 포함되지 않은 한 문자와 일치
다음은 문자 리스트를 사용한 쿼리다. cl, c2, C3 열의 패턴은 ac, bc 문자열과 일치한다. c4, C5, C6 열의패턴은 ac, bc가 아닌 문자열과 일치한다.
[예제]
. SELECT REGEXP_SUBSTR (‘ac’, ‘[ab]c’) AS C1 – ac, bc REGEXP_SUBSTR (‘bc’, ‘[ab]c’ ) AS C2 REGEXP_SUBSTR (‘cc’, ‘[ab]c’ ) AS (3 REGEXP_SUBSTR (‘ac’, ‘[^ab]c’) AS C4 ac, bc가 아닌 문자열 REGEXP_SUBSTR (‘bc’, ‘[^ab]c’) AS C5 REGEXP_SUBSTR (‘cc’, ‘(^ab]c’) AS C6 FROM DUAL; . .
[실행 결과]
(2
| 3 |
C4
C5
bc
C6
1개의 개의 행이 선택되었습니다.
CC
C1
ac
다음은 문자 리스트의 범위 연산자를 사용한 쿼리다. 4 열은 첫 번째 문자는 숫자가 아닌 문자, 두 번째 문자는소문자가 아닌 문자와 일치해야 하므로 널을 반환한다.
[예제]
SELECT REGEXP_SUBSTR (‘1a’, ‘[0-9][a-z]’) AS C1
REGEXP_SUBSTR (‘97’, ‘[0-9][a-z]’ ) AS C2 REGEXP_SUBSTR (‘aA’, ‘[^0-9][^a-z]’) AS C3
REGEXP_SUBSTR (‘Aa’, ‘[^0-9][^a-z]’) AS C4 FROM DUAL;
[실행 결과]C1C2C3TH1a9z.aA
1개의 개의 행이 선택되었습니다.
문자 리스트(character list)는 문자를 대괄호로 묶은 표현식이다. 문자 리스트 중 한 문자만 일치하면 패턴이일치한 것으로 처리된다. 문자 리스트에서 하이픈(-)은 범위 연산자로 동작한다.
동일 연산자 [:digit:) [:lower:) [:upper:) [:alpha:) [:alnum:) [:xdigit:) [:punct:) [:blank:) [:space:) 설명 숫자 소문자 대문자 영문자 영문자와 숫자 16진수 구두점 기호 공백 문자 공간 문자 (space, enter, tab) [0-9] [a-z] [A-Z] [a-zA-Z] [0-9a-zA-Z] [0-9a-fA-F] [^[:alnum:][:cntrl:]]
다음은 POSIX 문자 클래스를 사용한 쿼리다. c7 열은 [:punct:] 클래스를 사용해 특수 문자를 검색한다.
[예제]
. . . SELECT REGEXP_SUBSTR (‘9F1,’, ‘[[:digit:]]’ ) AS C1 REGEXP_SUBSTR (‘9F1,’, ‘[[:alpha:]]’ ) AS C2 REGEXP_SUBSTR (‘9F1,’, ‘[[:lower: ]]’ ) AS (3 REGEXP_SUBSTR (‘9F1,’, ‘[[:upper:]]’ ) AS (4 REGEXP_SUBSTR (‘9F1,’, ‘[[:alnum:]]’ ) AS (5 REGEXP_SUBSTR (‘9F1,’, ‘[[:xdigit:]]’) AS C6 REGEXP_SUBSTR (‘9F1,’, ‘[[:punct:]]’ ) AS C7 FROM DUAL; .
[실행 결과]
C1
C2
3 -
| 4 | F |
C5
1개의 개의 행이 선택되었습니다.
G [F
7
정규 표현식의 PERL 정규 표현식 연산자(PERL regular expression operator)를 살펴보자.다음의 PERL 정규 표현식 연산자는 POSIX 문자 클래스와 유사하게 동작한다.
382 SQL 297171015
g
1
9.
나. PERL 정규 표현식 연산자
g
연산자\d\DwWis \S설명숫자 숫자가 아닌 모든 문자 숫자와 영문자(underbar 포함)숫자와 영문자가 아닌 모든 문자(underbar 제외) 공백 문자 공백 문자가 아닌 모든 문자동일[[:digit:]][[digit:]][[:alnum:]][[:alnum:]][[space:]][[space:]]
다음은 \d 연산자와 \D 연산자를 사용한 쿼리다. cl, c2열의 패턴은 ‘(숫자 3자리)전화번호를 검색한다. c5 열은 세 번째 문자인 2가 숫자이므로 널을 반환한다.
숫자3자리 숫자4자리’ 패턴의
[예제]
. SELECT REGEXP_SUBSTR (‘(650) 555-0100’, ‘(\d{3}) \d{3}-\d{4}$’) AS C1 REGEXP_SUBSTR (‘650~555-0100’ ‘(\d{3}) \d{3}-\d{4}$’) AS C2 REGEXP_SUBSTR (‘b2b’, ‘\w\d\D’) AS (3 REGEXP_SUBSTR (‘62_’, ‘\w\d\D’) AS (4 REGEXP_SUBSTR (‘b22’, ‘\w\d\D’) AS C5 FROM DUAL; .
[실행 결과]C1(2C3(4C54 - ](650) 555-0100b2bb2. 1개의 개의 행이 선택되었습니다.
다음은 \w 연산자와 \W 연산자를 사용한 쿼리다. cl, 열의 패턴은 ‘숫자문자숫자문자’ 다음에 숫자문자가 1회 이상 반복되는 패턴의 이메일 주소를 검색한다. c4 열은 \W에 해당하는 문자가 문자열에 존재하지 않기 때문에 널을 반환한다.
[예제]
SELECT REGEXP_SUBSTR (‘jdoe@company.co.uk’, ‘\w+@\w+(.\w+)+’) AS C1 REGEXP_SUBSTR (‘jdoe@company’ ‘\w+④\w+(.\w+)+) AS D REGEXP_SUBSTR (‘to: bill’, ‘\w+\W\s\w+’) AS (3 REGEXP_SUBSTR (‘to bill’ \w+\W\s\w+’) AS C4 FROM DUAL;
SOL 전문가 가이드
383
과목 II SQL 기본과 활용
[실행 결과]C1C23jdoe@company.co.ukto: bill
C4
1개의 개의 행이 선택되었습니다.
다음은 \s 연산자와 \S 연산자를 사용한 쿼리다. cl 열은 \s 연산자가 공백 문자, c4 열은 \S 연산자가 공백이 아닌 문자(.)와 일치한다.
[예제]
SELECT REGEXP_SUBSTR (‘(a b )’, ‘(\w\s\w\s)’) AS (1 REGEXP_SUBSTR (‘(a b )’, ‘(\w\S\w\SV)’) AS C2 REGEXP_SUBSTR (‘(a,b.)’, ‘(\w\s\w\s)’) AS (3 REGEXP_SUBSTR ((a,b.)’, ‘(\w\S\w\S)’) AS C4 FROM DUAL;
[실행 결과]C1C23(4(a b )(a,b.)1개의 개의 행이 선택되었습니다.
다음의 PERL 정규 표현식 연산자는 수량사와 유사하게 동작한다. 패턴을 최소로 일치시키는 비탐욕적 (nongreedy) 방식으로 동작한다.
연산자설명?? *+?{m}?{m}?){m}?{m,n}? 0회 또는 1회 일치 10회 또는 그 이상의 횟수로 일치 1회 또는 그 이상의 횟수로 일치m회 일치 최소 m회 일치 최대 m회 일치 최소 m회, 최대 n회 일치
아래는 ??, ?, +? 연산자를 사용한 쿼리다. c1 열은 패턴을 최소로 일치시키는 nongreedy 방식을 사용했기 때문에 aa까지만 일치한다. 패턴을 최대로 일치시키는 greedy 방식을 사용한 c2 열은 aaa까지 일치한다.
[예제]
SELECT REGEXP_SUBSTR (‘aaaa! ‘a??aa’ ) AS C1 - nongreedy 방식 REGEXP_SUBSTR (‘aaaa ‘a?aa’ ) AS C2 - greedy 방식
REGEXP_SUBSTR (‘xaxbxc’, ‘\w?x\w’) AS (3 REGEXP_SUBSTR (‘xaxbxc’, ‘\wx\w’ ) AS C4 REGEXP_SUBSTR (‘abxcxd’, ‘\w+?x\w’) AS C5
REGEXP_SUBSTR (‘abxcxd’, ‘\w+x\w’) AS C6 FROM DUAL;
[실행 결과]C1C2 C3C4C5C6 | aa ааахаxaxbxcabxcabxcxd 1개의 개의 행이 선택되었습니다.
다음은 {m}?, {m,}, {m,n}? 연산자를 사용한 쿼리다. cl, c2 열은 m회 일치를 사용했기 때문에 greedy 방식과 관계없이 결과가 동일하다. c3 열은 최소 일치므로 aa와, c4 열은 최대 일치이므로 aaaaa와 일치한다. c5 열은 최소로 aa, c6 열은 최대로 aaaa와 일치한다.
[예제]
SELECT REGEXP_SUBSTR (‘aaaa’ ‘a{2}?’
REGEXP_SUBSTR (‘aaaa’, ‘a{2}’ REGEXP_SUBSTR (‘aaaaa’, ‘a{2,}?’ REGEXP_SUBSTR (‘aaaaa ‘a{2,} REGEXP_SUBSTR (‘aaaaa ‘a{2,4}?’
REGEXP_SUBSTR (‘aaaaa ‘a{2,4}’ FROM DUAL; 1
) AS C1 - nongreedy 방식 ) AS C2 - greedy 방식 ) AS (3 ) AS C4 ) AS (5) ) AS C6
[실행 결과]
C2
C4
C5
16
C6
аааа
C1
aa
aa
aa
C3
aa
aaaaa
.
1
1
1개의 개의 행이 선택되었습니다.
다음은 dot 연산자를 사용한 쿼리다. REGEXP_SUBSTR 함수는 문자열에서 일치하는 패턴을 반환한다. 조금후에 자세히 살펴보자. cl, C2, C3, c4 열의 dot 연산자는 각각 a, b, c, d 문자와 일치한다. c4 열은 세 번째문자인 c가 패턴의 세 번째 문자인 b와 일치하지 않기 때문에 널을 반환한다.
[예제] . SELECT REGEXP_SUBSTR (‘aab’, ‘a.b’) AS (1 REGEXP_SUBSTR (‘abb’, ‘a.b’) AS C2 REGEXP_SUBSTR (‘acb’, ‘a.b’) AS C3 REGEXP_SUBSTR(‘adc’, ‘a.b’) AS (4 FROM DUAL; ###### [실행 결과] C1 C2 3 E (4 3- | aab abb acb 1개의 개의 행이 선택되었습니다.
- 정규 표현식 조건과 함수
가. REGEXP_LIKE 조건
REGEXP_LIKE 조건은 source_char가 pattem과 일치하면 TRUE를, 일치하지 않으면 FALSE를 반환한다.
REGEXP_LIKE (source_char, pattern [, match_param])
source_char는 검색 문자열을 지정한다.pattem은 검색 패턴을 지정한다.
match_param은 일치 옵션을 지정한다(1: 대소문자 무시, C: 대소문자 구분, n: dot(.)를 개행 문자와 일치,m: 다중 행 모드, x: 검색 패턴의 공백 문자를 무시, 기본값은 c다. icnmx 형식으로 다수의 옵션을 함께지정할 수도 있다).
다음은 REGEXP_LIKE 조건을 사용한 쿼리다. first_name 값이 Ste로 시작하고 v나 ph 다음에 en으로 끝나는 행을 검색한다.
[###### [예제] SELECT FIRST_NAME, LAST_NAME FROM HR. EMPLOYEES WHERE REGEXP_LIKE (FIRST_NAME, ‘^Ste(vlph)en$’);
[실행 결과]
FIRST_NAME
LAST_NAME
Stephen Steven Steven
Stiles King Markle
3 개의 행이 선택되었습니다.
나. REGEXP_REPLACE 함수
REGEXP_REPLACE 함수는 source_char에서 일치한 patterm을 replace_string으로 변경한 문자 값을 반환한다.
REGEXP_REPLACE (source_char, pattern [, replace_string C position ( occurrence , match_param]]]]).
replace_sting은 변경 문자열을 지정한다.
- position은 검색 시작 위치를 지정한다(기본값은 1). occurence는 패턴 일치 횟수를 지정한다(기본값은 1).
다음은 REGEXP_REPLACE 함수를 사용한 쿼리다. ‘숫자3자리 숫자3자리 숫자4자리 패턴을 (첫 번째 일치) 두 번째 일치-세 번째 일치’ 형식으로 변경한다. 일치한 패턴이 없으면 원본 값을 반환한다.
[예제] SELECT PHONE_NUMBER REGEXP_REPLACE (PHONE_NUMBER
SOL 전문가 가이드
387
과목 II SQL 기본과 활용
| ([:digit:]]{3}).([[:digit:]]{3}). ([[:digit:]]{4})’ ‘(11) \2-\3’) AS C1 FROM HR. EMPLOYEES WHERE EMPLOYEE_ID IN (144, 145); ###### [실행 결과] PHONE_NUMBER C1 650.121.2004 011.44.1344.429268 (650) 121-2004 011.44.1344.429268 2 개의 행이 선택되었습니다. |
다. REGEXP_SUBSTR 함수REGEXP_SUBSTR 함수는 source_char에서 일치한 patterm을 반환한다.
REGEXP_SUBSTR (source_char, pattern [, position [, occurrence [, match_param
[ subexpr]]]])
subexpr은 서브 표현식을 지정한다(0은 전체 패턴, 1 이상은 서브 표현식, 기본값은 0).
다음 쿼리는 URL 패턴과 일치한 문자열을 반환한다.
[###### [예제]
SELECT REGEXP_SUBSTR (‘http://www.example.com/products’
‘http://([[ : alnum:]]+.?){3,4}/?’) AS C1 FROM DUAL;
[실행 결과]
C1
http://www.example.com/
1개의 개의 행이 선택되었습니다.
다음 쿼리는 일치한 서브 표현식을 반환한다. 강조한 부분이 일치한 서브 표현식이다. 서브 표현식의 순서는 좌측 괄호의 순서와 동일하다.
[###### [예제]
SELECT REGEXP_SUBSTR (‘1234567890’, ‘(123) (4(56)(78))’, 1, 1, ‘i’, 1) AS C1 REGEXP_SUBSTR ‘12345 90’, ‘(123)(4(56)(78))’, 1, 1, ‘i’, 4) AS (1 FROM DUAL;
[실행 결과]C1212378
1개의 개의 행이 선택되었습니다.
라. REGEXP_INSTR 함수
REGEXP_INSTR 함수는 source_char에서 일치한 pattem의 시작 위치를 정수로 반환한다.
REGEXP_INSTR (source_char, pattern C position [, occurrence [, return_opt (, match_paran 1, subexpr]]]]]).
retum_opt은 반환 옵션을 지정한다(0은 시작 위치, 1은 다음 위치, 기본값은 0).
다음 쿼리는 서브 표현식의 시작 위치를 반환한다. 강조한 부분이 일치한 서브 표현식이다.
[예제] SELECT REGEXP_INSTR (‘1234567890’, ‘(123) (4(56)(78))’, 1, 1, 0, ‘i’, 1) AS C1 REGEXP_INSTR (‘1234567890’, ‘(123) (4(56) (78))’, 1, 1, 0, ‘i’, 2) AS C2 REGEXP_INSTR (‘1234567890’, ‘(123) (4(56) (78))’, 1, 1, 0, ‘i’, 4) AS C3 FROM DUAL;
[실행 결과]
317
(2
C1
1개의 개의 행이 선택되었습니다.
마. REGEXP_COUNT 함수
REGEXP_COUNT 함수는 source_char에서 일치한 pattern의 횟수를 반환한다.
REGEXP_COUNT (source_char, patterm [, position [, match_param
]])
다음은 REGEXP_COUNT 함수를 사용한 쿼리다. 강조한 부분이 일치한 문자열이다. cl 열은 5회, c2 열은 3회 일치한다.
[예제]
SELECT REGEXP_COUNT (‘123123123123123’, ‘123’, 1) AS C1 REGEXP_COUNT (‘123123123123 ‘123’, 3) AS C2 FROM DUAL;
[실행 결과]A1A2.53
1개의 개의 행이 선택되었습니다.
SQL 21971 71015
1
4
-
장 요약
제1절 서브 쿼리
서브 쿼리란 하나의 메인 쿼리 안에 포함된 종속적인 SQL 문장을 말하는 것으로, 위치나 기능에 따라 NESTEDSUBQUERY, INLINE VIEW, SCALAR SUBQUERY로 구분할 수 있다.
제2절 집합 연산자
집합 연산자는 결과 집합 간의 연산을 통해 결합하는 방식을 사용한다. UNION 연산자와 UNION ALL 연산자는개별 SQL 문의 결과에 대해 합집합 연산을, INTERSECT 연산자는 교집합 연산을, EXCEPT/MINUS 연산자는 차집합을수행한다. UNION ALL 연산자를 제외한 모든 집합 연산자는 최종 결과에서 중복된 행은 제외하고 출력한다.
제3절 그룹 함수
데이터 분석을 위한 GROUP FUNCTION으로는 소그룹 간의 소계를 계산하는 ROLLUP 함수, GROUP BY 항목들간의 다차원적인 소계를 계산할 수 있는 CUBE 함수, 특정 항목에 대한 소계를 계산하는 GROUPING SETS 함수가있다.
제4절 윈도우 함수
데이터 분석을 위한 WINDOW FUNCTION은 부분적이나마 행과 행간의 관계를 쉽게 정의하기 위해 만든 함수다.WINDOW FUNCTION을 이용한 순위(RANK) 관련 함수는 RANK, DENSE_RANK, ROW_NUMBER가 있으며, 그외 그룹 내 집계(AGGREGATE) 관련 함수, 그룹 내 비율 관련 함수 등이 있다.
제5절 Top N 쿼리
Top-N 쿼리는 말 그대로 상위(Top) N개의 행을 조회하는 쿼리다. Oracle은 ROWNUM 슈도 칼럼, SQL Server는TOP 절을 사용할 수 있다. Oracle은 12.1 버전, SQL Server는 2012 버전부터 ROW LIMITING 절로 Top N 쿼리를작성할 수 있다.
제6절 계층형 질의와 셀프 조인
테이블에 계층형 데이터가 존재하는 경우 데이터를 조회하기 위해서 계층형 질의(HIERARCHICAL QUERY)를 사용한다. 셀프 조인(SELF JOIN)이란 동일 테이블 사이의 조인을 말하며, FROM 절에 동일 테이블이 두 번 이상 나타난다.
제7절 PIVOT 절과 UNPIVOT 절
PIVOT은 회전시킨다는 의미다. PIVOT 절은 행을 열로 회전시키고, UNPIVOT 절은 열을 행으로 회전시킨다. PIVOT절은 CASE 표현식과 GROUP BY 절, UNPIVOT 절은 행 복제를 사용해 수행할 수도 있다.
제8절 정규 표현식
정규 표현식(regular expression)은 문자열의 규칙을 표현하는 검색 패턴으로 주로 문자열 검색과 치환에 사용된다.REGEXP_LIKE 27/2 REGEXP_REPLACE OH, REGEXP_SUBSTR ÖF, REGEXP INSTR ČI, REGEXP_COUNT함수를 사용할 수 있다.