Search

반응형

안녕하세요. 신기한 연구소입니다.

 WHERE절에서 다양한 조건이나 필터를 사용할 수 있습니다.

그중 어떤 범위를 정하고 싶을 때 사용할 수 있는 키워드에 대해 살펴보겠습니다.

 

 

 

WHERE절에서 범위를 정하고 싶은 경우 BETWEEN을 사용할 수 있습니다.

BETWEEN A AND B

조건 A 에서 조건 B 사이의 값을 조회합니다.

 

 

우선 SAL 정렬로 조건 없이 조회했습니다.

 

 

SAL BETWEEN 800 AND 1500

급여가 800에서 1500까지인 사원을 조회합니다.

 

 

WHERE SAL >= 800 AND SAL <= 1500와 같은 의미입니다.

숫자 값을 이용해서 조회를 해봤습니다.

범위 사이의 값을 조회하고 싶다면 위 쿼리를 잘 사용하면 되겠네요.

 

 

부정형은 BETWEEN 앞이나 뒤에 NOT을 넣으면 됩니다.

그럼 해당 범위 외의 값을 조회합니다.

 

 

WHERE SAL < 800 OR SAL > 1500와 같은 의미로 이해하면 됩니다.

OR를 사용하는 것보다 NOT BETWEEN 또는 BETWEEN NOT을 이용하는 게

가독성도 좋고 편해 보이네요.

 

 

DATE타입도 BETWEEN 조건으로 사용이 가능합니다.

그런데 컬럼 타입이 DATE인데 값은 문자열로 넣었네요.

하지만 조회가 잘 됩니다.

오라클에서 자동으로 형 변환을 해주기 때문에 가능하게 된 겁니다.

문자형에서 날짜형으로 묵시적 형변환을 해줍니다.

 

 

이렇게 미리 DATE형으로 형 변환해서 조회해도 같은 결과가 나옵니다.

컬럼 타입이 DATE형이면 명시적으로 쿼리에서 DATE()로 미리 형 변환해서 조회할 수 있습니다.

명시적 형 변환을 권장하니 개발할 때 참고하기 바랍니다.

 

 

그럼 이렇게 문자열로 BETWEEN을 사용하면 잘 조회가 될까요?

결과를 확인해 봅니다.

 

 

'C'로 시작하는 ‘CLARK’를 포함해서 검색하고 싶은데

‘C’를 두 번째 조건을 넣었음에도 조회가 안 되는 현상이 발생합니다.

그 이유는 ‘C’ 뒤의 글자가 더 존재하며

‘C’만 조건으로 넣으면 딱 한 글자로 C인 데이터까지 조회합니다.

즉 ‘C’ 다음에 어떤 글자가 오면 ‘C’ 한 글자보다 더 큰 값이 되어서 검색이 안되는 겁니다.

 

 

‘CLARK’를 검색하기 위해 두번째 검색 문자로 ‘CL’까지 넣어도 조회가 안됩니다.

다음 ‘A’가 있기 때문이죠.

그럼 ‘CLARK’를 검색하기 위해서는 글자를 넘어서는 조건이 필요합니다.

예를 들어 ‘D’로 하던지 ‘CM’으로 하던지 ‘CLB’로 하던지 아니면 ‘CLARK’를 넣으면

조회가 됩니다.

이해가 되었나요?

 

 

이제 검색이 잘 됩니다.

문자열 검색에서 BETWEEN을 사용할 때는 이 점을 주의해야 합니다.

간혹 이 부분을 이해하지 못하고 잘못 사용해서 검색이 안되는 경우가 있거든요.

 

BETWEEN A AND B

BETWEEN A AND B는 정말 자주 사용하는 조건입니다.

간단하게 사용할 수 있으나 제대로 이해하고 사용한다면 더 편리하게 이용할 수 있습니다.

특히 문자열로 조건식을 만드는 경우는 결과를 미리 확인해 보는 것이 중요합니다.

도움이 되길 바라며 다음에 또 만나요.

 

잘못된 내용이나 수정이 필요하면 댓글 주세요.

아래 하트(공감) 버튼을 눌러서 더 다양한 글을 쓸 수 있게 응원 부탁드립니다. 감사합니다.

반응형
반응형

안녕하세요. 신기한 연구소입니다.

조인(JOIN)을 사용하지 않고 두 개의 테이블을 사용해서 조회하는 방법으로

집합 연산자를 사용할 수 있습니다.

 

 

수학에서도 배웠던 합집합, 교집합 등과 같은 개념인데요.

총 4가지 연산자가 있으니 각각의 특징을 같이 살펴보도록 합니다.

 

UNOIN

두 개 이상의 쿼리를 작성해서 합집합을 만드는 연산자입니다.

두 개의 쿼리를 합친다면 SELECT 문의 컬럼도 같아야 합니다. 합쳐야 하니까요.

그리고 두 쿼리 사이에 UNION을 넣고 합치면 됩니다.

UNION은 중복된 데이터가 있다면 하나로 표현합니다.

 

 

 

첫 번째 쿼리와 두 번째 쿼리 둘 다 7건이 나옵니다.

UNION으로 결합하면 14건이 아닌 중복된 데이터를 제거하고 9건만

조회됩니다.

 

UNION ALL

 

같은 쿼리를 UNION ALL로 합쳤습니다.

UNION ALL도 합집합이지만 중복된 행도 조회됩니다.

 

 

조회를 하면 각각 7건씩 총 14건이 조회됨을 확인할 수 있습니다.

 

INTERSECT

이 연산자는 교집합을 나타냅니다.

두 쿼리간 같은 값들만 추출해서 보여주는데

SELECT문의 컬럼들 모두가 일치해야 합니다.

 

 

5건이 조회되었습니다.

 

MINUS

이 연산자는 차집합을 나타냅니다.

먼저 조회된 쿼리에서 다음 쿼리의 결과값을 뺀 나머지를 보여줍니다.

 

 

2건이 조회되었습니다.

 

이렇게 4가지 집합 연산자에 대해 알아봤습니다

주의할 점이 있습니다.

 

우선 정렬하는 방법에 주의해야 합니다.

각 쿼리에서 ORDER BY를 사용할 수 없고

SET 연산을 한 마지막 쿼리 뒤로 ORDER BY를 사용할 수 있습니다.

어짜피 여러 개의 쿼리를 합쳐서 하나의 결과를 얻는 게 목적이고

그 결과에 대해 정렬(ORDER BY)를 하는 게 맞겠지요?

미리 ORDER BY 해도 합치는 과정에 의미가 없어지기 때문입니다.

 

 

그리고 BLOB, CLOB 등의 타입의 컬럼은 SELECT문에서 사용할 수 없으며

LONG 타입은 UNION ALL만 SELECT문에서 사용이 가능합니다.

나머지 연산자는 LONG 타입을 사용하면 오류가 납니다.

 

조인(JOIN)해서 데이터를 구하기 힘들거나

두 가지 쿼리에 대해 대사를 하는 과정에서

데이터가 안 맞을 때 교집합, 차집합을 이용해서

잘못된 데이터를 찾는데 활용하곤 했습니다.

 

잘못된 정보나 수정이 필요한 부분이 있으면 댓글 주세요.

아래 하트(공감) 버튼을 눌러서 더 다양한 글을 쓸 수 있게 응원 부탁드립니다. 감사합니다.

반응형