본문 바로가기
뉴렉처 과정 기록 (Backend)/Oracle_SQL

04/29 Oracle_SQL 정규식을 이용한 패턴 비교, 문자열 비교를 위한 정규식, ROWNUM(행 제한)

by yeonee3219 2021. 4. 29.

 

 

 

정규식은 무엇인가?

 

: unix라는 머신에서 텍스트를 이용해서 어떤내용을 찾을 때 줄여서 사용하던 검색 패턴 기호이다

 

이러한 기호...

-> 언어나 플랫폼을 떠나서 정규식을 두루두루 쓰고 있다

 

 

 

 

 

전화번호를 알아볼 수 있게 하는 검색패턴을 만들것이다

 

이러한 모양의 전화번호

 

01 다음에 1~9 까지 들어올 수 있는데 [ ] 안에 다 넣어주면 된다

-> [016789] 안의 숫자 중의 하나만 해주는 것 = [016-9]

 

 

[0-9] 로 0부터 9까지 범위를 나타내줄수도 있다 -> 이 중 한 숫자

 

하지만 이걸 계속 반복하는 것은 불편 -> \d는 [0-9]와 같다

 

 

-> 01[016789] - \d\d\d\d - \d\d\d\d

 

\d 반복하는것도 불편

 

 

 

\d(4} -> \d가 네번 반복한다

 

하지만 가운데 숫자는 3번일수도 있고 4번일 수도 있음

\d{3,4} -> 3개이거나 4개일수도 있다

 

 

 

 

시작할때 끝날때 이거 써줘야 한다

 

->

 

테스터기로 한번 넣어보았당

 

 

 

 

 

 

 

 

이제 패턴식을 알았으니 오라클에서 써주고 싶은데 특별한 함수를 사용해줘야 한다

 

 

시작과 끝 (^ , $)를 써주게 되면 콘텐츠가 그 시작부터 끝에만 해당되어야 함

-> 번호 앞뒤로 글이나 어떤 내용이 있다면 읽지 못한다

 

 

번호가 포함된 문자를 찾고 싶다라는 것이니까 시작과 끝에 해당하는 ^,$는 지워줌

 

 

 

 

 

 

 

 

 

이메일의 패턴은 어떤 식으로 써야 할까

 

 

newlec@nana.com 

 

@ 도메인(org net com 만 있다고 해보자)이 꼭 들어간다

 

 

@ 앞에는 문자가 하나이상 들어가야 한다

 

문자를 표현하는 녀석인데..  [0-9a-zA-Z] -> 이게 한글자

 

\w가 저것과 같은 뜻 -> 이게 한글자

 

 

* 은 0또는 그 이상

+는 하나또는  그 이상

 

?는 0또는 1

 

 

 

하나 이상이 꼭 들어가도록 해야하니까 +를 쓰면 되겠다

 

\w+@\w+.

그리고 도메인이 와야함 {org net com}

 

 

\w+@\w+.(org|net|com)

 

@뒤에는 숫자가 오면 안됨 -> \D  

 

소문자는 디지털 숫자가 오는 것 / 대문자는 디지털숫자가 아닌 것

 

 

-> 이런식으로 패턴문자를 만들어서 문자를 검사할 수 있다 (다양한 정규식있으니 쓸 때 찾아보면 될듯)

 

 

 

 

 

 

 

3. ROWNUM 과 행 제한하기

 

 

100개의 레코드가 있다고 하면 그것을 다섯개씩 끊어서 보겠다 -> 페이징

 

 

전체 레코드에서 다섯개를 끊어서 1페이지로 뽑아냄

-> 뭘기준으로? (학번 이름 납입금 납입일 등..? -> 순차적으로 끊어내려면 현재 가지고 있는 컬럼으로는 할수없다)

 

 

 

다행히 오라클에서 테이블에서 조회를 하게되면

결과집합을 조회를 하게 되면서

 

ROWNUM을 추가한다

 

 

 

 

 

이 일련번호는 연속되기 때문에 이번호를 이용해서 페이지를 나눠줄 수 있겠다

 

 

-> 회원목록에서 상위 5명만 조회하는 것

 

 

 

 

6부터 10까지 했더니 안됨!

 

 

 

 

테이블에서 데이터를 꺼내서 결과집합을 만드는데 ROWNUM을 이용해서 비교할때 문제가 있다

 

1이 아닌 어떠한 값도 조건에 맞을 수없다 

 

 

ROWNUM이 결과집합을 만들때 만들어지는 것이 아니라

일련번호가 원래 있었다면  미리 만들어놓는 결과집합을 가지고 SELECT

 

 

괄호안에 넘버가 붙은 쿼리문을 이용해서 그 결과문을 가지고 쿼리문 이용

 

-> SELECT ROWNUM(별칭 NUM)를 멤버가 가지고 있는 컬럼에다가 같이 합친 것 

 

 

 

 

* 모든에 추가적으로 ROWNUM을 추가시키려고 하는데

ROWNUM과 * (모든)은 함께 사용될 수없다

 

-> *은 모든이라는 뜻인데 다른것이 추가되면 안됨..

 

 

 

원래는 NOTICE.~ 으로 써줘야 하는데 FROM을 써줌으로써 일러주는 것

그래서 이렇게 묵시적으로 생략할 수 있는데

 

* 로 썼을때도 마찬가지로  NOTICE . * 로 쓰고 있던 것

 

-> 이렇게 쓰게되면 NOTICE 한정 * 모든 것

 

그래서 이렇게 써주게 되면 다른 것도 끼어들 수 있는 NOTICE 한정 모든 것이기 때문에 ROWNUM 낄 수 있어

 

 

소괄호로 나눠줘야 함 -> 소괄호가 새로운 결과집합이 되고 그것을 SELECT하게 되는 것

 

 

별칭을 써주지 않으면 새로운 결과집합을 벗어난 결과집합에서의 ROWNUM에서 SELECT하게 되기 때문에 

별칭으로 ROWNUM와 합쳐주었던 결과집합을 가리켜 SELECT해주어야 한다