정규표현식은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다. wikipedia
대표적인 라이브러리 사이트인 regexlib.com에서 다양한 형태의 표현식을 볼 수 있다. 예를 들어 이메일 표기법에 대해 검색해보면 아래와 같이 다양한 표현식들을 볼 수 있다. 이를 활용해 이메일 형식을 지정해 검색을 하거나 기입하도록 만들 수 있다.

정규식 패턴을 비교할 때 사용하는 함수로는 REGEXP_LIKE가 있으며 사용 시
WHERE REGEXP_LIKE(first_name, '^Ste(v|ph)en$') 와 같은 형태로 사용한다.
제목에 전화번호가 포함된 게시글을 조회
SELECT * FROM NOTICE WHERE REGEXP_LIKE(TITLE, '01[016-9]-\d{3,4}-\d{4}');
위의 내용과 맥락은 같으며 이메일을 판단하기 위한 정규식을 작성해본다. 이메일의 기본적인 형태는 다음과 같다. 사용자명@도메인.기관유형
example12@lecture.com
따라서 이메일을 찾아내기 위한 정규식은 다음과 같이 사용할 수 있다.
\D\w*@\D\w*.(org|net|com)
정규식 참고
| 표기 | 동일표기 | 설명 |
|---|---|---|
| \D | [^0-9] | 숫자가 아닌지 여부 |
| \w | [a-zA-Z_0-9] | 문자에 해당하는지 여부 |
| * | 0개 이상 | |
| \ | or 연산 |
데이터를 조회하여 반환할 때 한꺼번에 넘기는 것은 비효율적이며 page 별로 적정 갯수로 나누어 보내주는 것이 효율적인 Paging 방법을 활용한다.
이 때 어떠한 기준으로 페이징을 실시하는지 기준이 필요한데 먼저 행을 기준으로 실시해본다. 오라클에서는 데이터의 결과집합을 생성할 때 ROWNUM도 함께 붙게되며 이는 INDEX에 해당한다고 볼 수 있다.

회원 목록에서 상위 3명만 조회
SELECT * FROM NOTICE WHERE ROWNUM BETWEEN 1 AND 5;
하지만 다음 상위 3명을 조회하기 위해 쿼리를 작성하면 결과가 나오지 않는다
SELECT * FROM NOTICE WHERE ROWNUM BETWEEN 6 AND 10;
그 이유는 ROWNUM은 결과 집합이 만들어 질 때 생성되는 것이기 때문이다. WHERE 절의 조건에 해당하는 ROWNUM이 결과가 만들어질 때 생성되므로 쿼리를 실행할 당시 1번째 결과를 가져올 때 ROWNUM에 1을 채우고 해당 ROWNUM이 1 이상이라는 조건을 만족하므로 데이터가 채워진다. 이후 2를 ROWNUM에 채우고 2번째 데이터를 가져오는 식이다.

하지만 ROWNUM이 5를 초과하는지가 조건이 되면 결과를 생성할 때 ROWNUM은 1부터 시작하므로 데이터가 쌓이지 못하고 날라가게 된다. 그렇게 계속 차례차례 날아가서 결국 아무것도 없는 결과가 나타나는 것이다.

따라서 위의 방식을 고쳐서 실행하려면 ROWNUM을 포함하는 결과 테이블을 먼저 만들고 이에 해당하는 조건에 맞게 가져오도록 할 수 있겠다.

SELECT * FROM (SELECT ROWNUM NUM, NOTICE.* FROM NOTICE) WHERE NUM BETWEEN 5 AND 10;
어떤 컬럼에 대해 중복값을 제거하고 어떤 값들이 있는지 확인하고 싶다면 DISTINCT 키워드를 사용하면된다. 먼저 MEMBER 테이블에 AGE 컬럼을 추가하고 데이터를 삽입한 뒤 시작한다.


위의 테이블에서 29, 35가 중복값이 있는 것을 알 수 있다. 이 때 아래와 같이 쿼리를 작성하면 중복값 없이 결과를 확인할 수 있다.
SELECT DISTINCT AGE FROM MEMBER;
DISTINCT는 하나의 컬럼에 대해서만 사용할 수 있다
