본문 바로가기
Programming/데이터베이스 \ 오라클

오라클 데이터베이스 입문 (7) : SCOTT 계정 활용, NOT, IN, BETWEEN, LIKE, WILDCARD, ESCAPE, ISNULL,

by 오뚝오뚝 2022. 8. 5.

 

안녕하세요, (6)번까지 따라오시느라 수고 많으셨습니다.

 

본격적으로 재미가 붙어가는데요, 오늘도 SCOTT 계정의 테이블들에 새로운 명령어들을 적용해보겠습니다.

 

먼저 IN 연산자입니다 

 

IN 연산자는 말 그대로 어디 안에 있는 이라는 말입니다. WHERE 조건식에서 여러가지 조건들을 OR을 사용해서 적용하는 방법을 배웠는데요, 여러가지 조건식을 하나의 식으로 간략화가 가능해 집니다. 예를 들어보겠습니다.

 

SELECT *

FROM EMP

WHERE JOB = 'MANAGER'

        OR JOB = 'SALESMAN'

        OR JOB = 'CLERK'

 

위와 같이 EMP 테이블 안에서 필드 JOB이 3개의 조건식을 만족하는 경우를 조회할수 있습니다. 하지만 IN을 사용하면 간단해지는데요,

 

SELECT *

FROM EMP

WHERE JOB IN ( 'MANAGER', 'CLERK', 'SALESMAN' )

 

 

이해가 쉽게 되시는지요? 그러면 다음은 NOT을 배워보겠습니다.

 

NOT은 말그대로 부정입니다. 위의 예제에 적용해보면, NOT IN 과 같은 형태로 사용할 수 있겠죠.

 

위와 같이 JOB 필드에는 명시한 직업들이 들어 있지 않은 것을 확인할 수 있습니다.

 

다음은 BEWEEN A AND B 문을 배워보겠습니다. 모두가 들어보았을 표현이죠, A와 B 사이. 명령어로 사용하게 되면 저희의 예시에서는 SAL 값을 2000 과 3000 사이로 설정해 볼 수 있겠네요.

 

마찬가지로 BETWEEM 대신 WHERE 를 두번 사용하는 논리연산으로도 조회가 가능합니다. 하지만 BETWEEN이 훨씬 가독성이 높고 코드 줄이 짧아짐으로 더 좋은 방법입니다.

 

염두해 두셔야 하는 사항으로는 BETWEEN은 A 이상 B 이하로 양쪽 기준치를 포함합니다. 

 

또 한발자국 더 나아가보면, 앞서 말씀드린 NOT도 활용해볼 수 있겠죠?

 

WHERE SAL NOT BETWEEN 2000 AND 3000; 과 같이 말이죠.

 

 

 

다음은 LIKE와 와일드카드라는 것을 배워보겠습니다. 

 

LIKE는 단어의 의미와 마찬가지로, 어떠한 형태를 취하는 것을 조회한다는 것을 의미합니다. 즉, ~~ 모양인 것. 이런 뜻입니다.

 

 

와일드카드는 _ 와 % 입니다.

 

쌩뚱맞은데요, 더 설명드리면 SQL 에 약속되어 있는 의미를 갖고 있는 표현으로 보시면 되겠습니다.

 

_ 는 어떤 값이든 상관없이 하나의 문자 데이터를 의미합니다. 

 

%는 길이와 상관없이 모든 문자 데이터를 의미합니다.(공백 포함)

 

아직도 어려우시다고요? 예를 들어보겠습니다. 

 

WHERE ENAME LIKE '_L%';

 

위의 조건이 무슨 뜻일까요?

 

ENAME 속성에서 '_L%' 모양인 것 이라는 뜻인데요, 그러면 모양을 저희가 해석만 하면 되겠습니다.

 

_는 아무 문자입니다. 즉 두번째에 L문자가 오고 처음에는 어떤 문자든 오는 모양이고 뒤에는 어떠한 문자의 길이가 이어지는 것을 의미합니다. 예를 들면 RLUUUUUUUU 의 경우가 해당되겠네요. 실제로 조회흫 해볼까요?

 

위 예시를 보면 ENAME 필드에 형태가 저희가 설정한 조건을 따르는 것을 알 수 있습니다. 그러면 이어지는 명령어 ESCAPE을 설명하겠습니다. 예를 들면 저희의 데이터 형태가 XXX_20204766 과 같을 수가 있겠죠?

 

그러면 와일드카드로 약속되어 있는 문자가 들어가 있어 컴퓨터가 해석이 달라지게 됩니다. 이러한 경우에는 _ 값을 문자 그대로로 이해해 주기를 설정해주어야 합나다. 이런 경우 사용되는 명령어가 ESCAPE입니다. 즉, 잠깐 벗어나서 라는 의미죠. 사용법은 아래와 같습니다.

 

WHERE ENAME LIKE '%\_%' ESCAPE '\';

 

조금 복잡해 보입니다. 하나씩 풀어서보면 저희가 설정한 모양은 쭉 이어진 문자열 그리고 _ 그리고 다시 문자열입니다. 다만 _ 앞에 \가 붙어있네요. 그리고 뒤에 ESCAPE 문과 다시 \. 즉, \ 라는 접두가 붙어 있게 되면 해당 와일드카드를 문자로 받아들이라는 것입니다. 꼭 \ 형태를 따라야 할 필요는 없습니다. ~ 도 가능하며 그것을 ESCAPE 뒤에 설정해주는거죠.

 

 

마지막 IS NULL 입니다. 앞서서 NULL이라는 것은 공백 값임을 말했습니다. 즉 비어있는 레코드 인거죠. 중요한 점으로 이 NULL 값은 우주같은 값입니다. 무엇을 해도 다시 NULL일 뿐이죠. 그렇기에 논리 연산의 조건으로 실행하게 되면 오류가 납니다.

 

예를 들어 WHERE COMM = NULL;  과 같이 조건을 걸게되면 공란으로 조회가 됩니다. 그렇기에 생성되어 있는 명령어가 IS NULL 입니다. WHERE  COMM IS NULL; 이라는 형태로 되는 거죠. 한번 조회를 해 볼까요?

 

거꾸로 NULL 값을 제외하고 싶은 경우에는 어떻게 해야할까요?

 

WHERE COMM IS NOT NULL; 으로 표현 됩니다. 이제 조금씩 문법 체계가 보이시나요?

 

 

 

 

댓글