[LearningSql] 필터링

반응형
반응형

sql에서 필터링을 거는 방법은 총 2가지가 존재합니다.
하나는 where절과 having절을 사용해서 필터링을 걸 수 있습니다.
두개의 차이점은 저번 장에서 말했듯이 where절은 select구문에서의 조건문이고
having절은 지정된 그룹의 조건이라 할 수 있습니다.

여기에서는 where절에서 사용되는 필터링에 대해 말하겠습니다.

기본적인 방법은 저번 포스팅에서 말했지만 간단하니 다시 말씀드리겠습니다.

select * from block
where color = 'brown';

그림으로 그려보면 다음과 같습니다.

프로그래밍 언어를 학습을 해보면
조건문은 어떤것이 존재할 까요?
간단히 말하면 boolean 자료형이 존재합니다.
즉, true와 false가 나눠져 있는 상태입니다.
위 코드에서는 색상이 갈색이라면 true , 아니라면 false를 리턴하게 됩니다.
당연한 말이지만 조건문이 true일때만 리턴하게 됩니다.

만약, 하나의 조건문이 아니라 2~3개 이상의 조건문이 존재한다면?
위 코드로는 부족합니다.

그림을 다시 그릴려고 했는데 생각해보니 그럴 필요는 없을 것 같습니다.

프로그래밍 언어에서는 이러한 이유때문에 And와 Or이 존재합니다.
간단히 설명하면 And는 두 개 모두 true인 경우
Or은 둘 중 하나만 true일 경우에만 true를 리턴하게 됩니다.

하나씩 살펴보죠

AND

만약에 갈색인 동시에 idx가 6인 것만 출력하고 싶다면 어떻게 코드를 수정해야 할까요?

select * from block
where color = 'brown'
AND idx = 6;

이것을 그림으로 그려보면 출력해보면

다음과 같습니다. 지금은 단일 데이터만 등장하였지만 단일만 가능한것은 아닙니다. 이것은 추후에 설명하게습니다.

OR

or은 둘중 하나만 만족만 하면 됩니다. 
이번에는 조건을 살짝 수정해서 색상이 brown또는 idx가 5인것들만 출력한다고 생각해봅시다.,

select * from block
where color = 'brown'
OR idx = 5;

5도 출력이 되었다는 것을 확인 할 수 있습니다.
만약, 이 코드를 OR를 AND로 바꾼다면 일치하는 데이터가 없기 때문에 아무것도 등장하지 않습니다.

근데, 조건문이라는게 = 하나뿐일까요?
그리고 = 는 도대체 뭘까요?

조건문

프로그래밍을 배운분이라면 = 라는것이 대입이라고 생각할지도 모르겠습니다.
SQL에서도 =를 대입으로 사용할수 도 있지만,
적어도 where절에서는 = 는 대입이 아니라 동등 조건입니다.

이 밖에도 < ,<=,>,>=, <> 가 존재합니다.

하나씩 코드와 그림으로 설명해보겠습니다.

<

<는 주어진 값보다 작은것을 뜻합니다.
이것을 다시 말하면 미만이라고 말할 수 있습니다.

select * from block
where idx < 5;

이를 그림으로 그려보면

<= 

이것은 위 코드와 비슷하지만 동등여부와 합쳐다고 생각하면 편합니다.
이것은 이하라고 표현됩니다.

이것부터 그냥 그림으로 표현하겠습니다.

초과라는 뜻이고 해당 값보다 큰 값들을 출력합니다. 

>=

이상이라는 뜻을 가졌고 해당값을 포함한 동시에 큰 값들을 출력합니다.

<>

지금까지는 프로그램언어를 공부했다면 한 번쯤은 만나봤을겁니다.
하지만 프로그래밍언어에서는 존재하지 않는 연산자입니다.

이는 사실 프로그램밍언어에서의 !=와 똑같습니다.

어떻게 보면 동등조건의 반대라고 생각하면 편할 것 같습니다.

또한 이들은 AND,OR등으로 조건을 연결해서 사용할 수 있습니다.
즉 다음처럼 사용이 가능하다는 이야기입니다.

select * from block
where color = 'brown'
AND color = 'green'
OR idx = 5
OR idx < 3;

sql문에서는 조건문을 만드는 방법이 위 방법만 있는것은 아닙니다.
사실은 파생되었다는 표현이 더 맞을지도 모르겠네요.. 아무튼

설명해보겠습니다.

BETWEEN (A) AND (B)

영어에서의 between A and B와 뜻은 같습니다.

만약, idx가 3에서 6사이 의 데이터를 알고 싶다고 한다면...

select * from block
where color BETWEEN 3 AND 6;

이렇게 표현하면 됩니다. 이를 그림으로 표현하면..

그러면 이렇게 출력이 되어지는데...
이는 다음과 같습니다.

select * from block
where color >= 3 
AND color <= 6;

이를 줄여서 표현하였습니다.

IN

위 식은 AND의 확장형이라고 한다면 IN는 OR의 확장형이라고 말할 수 있습니다.
다음과 같은 코드가 있다고 생각해봅시다.

select * from block
where color = 3 
OR color = 5
OR color = 7
OR color = 8;

이것을 이런식으로 코드를 수정하면 더 줄일 수 있습니다.

select * from block
where color IN(3,5,7,8);

이를 해석하면 color에서 3또는 5,7,8이 포함된 값을 출력하라는 뜻입니다.
그림으로 그려 보면

NOT

이것은 부정문입니다.
이걸 붙이는 순간 위해서 계산된 모든 boolean식이 true에서 false로 바뀌게 됩니다.
즉, true는 false로 false는 true로 바뀐다고 생각하면 됩니다.

like

이것은 마치 정규식처럼 사용이 되어집니다.
정규식에 대해 짧게 표현하자면, 문자열에서 특정 키워드를 찾는 방식을 말합니다.

like에는 와일드카드라는것이 존재하는데... 이것을 설명하기 위해 이름을 부여 하겠습니다.

다시 와일드카드에 대해 설명하겠습니다. 와일드 카드에는 2가지 종류가 존재합니다.

  - 

무조건 하나의 문자가 들어옵니다.

%

뒤에 어떤 문자가 와도 상관없을 뿐더러 갯수도 상관습니다.

만약에 첫 번째가 K이고 3번째가 o인것만 고른다고 합시다.
그러면 다음처럼 작성할 수 있습니다.

select * from block
where name like 'K_o%'

즉, 첫번째가 K로 고정시키고 그다음은 단 한글자 그리고 곧바로 o가 등장하고
그 다음은 몇개가 나와도 상관없기 때문입니다.
위 그림과는 상관없지만
이런것들이 나올 수 있습니다.
Kaolll , keoffffffffffffff, kbo등

그러면 그림을 그려봅시다.

지금까지 SQL에서 필터링을 하는 방법들을 알아봤습니다.
이들은 주로 서브쿼리라는 SQL구문을 이용하는 경우가 종종 있습니다.

반응형

'sql' 카테고리의 다른 글

[LearningSql] 집합 연산자  (0) 2021.04.20
[LearningSql] 다중 테이블 쿼리  (0) 2021.04.13
[Leaning SQL] select  (0) 2021.04.10
데이터 베이스 설계  (0) 2020.09.11
복수의 테이블 다루기  (0) 2020.09.11

댓글

Designed by JB FACTORY