All Articles

SQL 첫걸음 - 7강 조건 조합하기, 8강 패턴 매칭에 의한 검색

7강 조건 조합하기

AND

복수 조건을 조합해 두 조건에 모두 해당하는 행을 찾을 때 사용한다. 집합으로 따지면 교집합을 구하는 것이다.

SELECT * FROM sample_talbe WHERE no<>1 AND no<>3;

no name birthday
2 야옹이 2018-05-15

OR

어느 쪽이든 하나라도 해당하는 행을 찾을 때 사용한다. 집합으로 따지면 합집합을 구하는 것이다.

SELECT * FROM sample_talbe WHERE name=‘야옹이’ OR name=‘멍멍이’;

no name birthday
2 야옹이 2018-05-15
3 멍멍이 NULL

AND와 OR를 사용할 때 주의할 점

  • 연산자 사용

SELECT * FROM sample_talbe WHERE no=1 OR 3;

상수는 논리 연산으로 항상 참이 되기 때문에 no 컬럼 값이 1 또는 3인 행만 반환하는 것이 아니라 모든 행을 반환한다. 따라서 no 컬럼 값이 1 또는 3인 행만 반환하게끔 하고싶다면 아래와 같이 사용해야 한다.

SELECT * FROM sample_talbe WHERE no=1 OR no=3;

  • AND와 OR 조합해 사용하기
no a b c
1 1 0 0
2 0 1 0
3 0 0 1
4 2 2 0
5 0 2 2

SELECT * FROM sample_talbe WHERE a=1 OR a=2 AND b=1 OR b=2;

no a b c
1 1 0 0
4 2 2 0
5 0 2 2

위 조건식에서 가장 먼저 처리되는 것은 AND다. a열 값이 2이면서 b열 값이 1인 행을 먼저 찾고, 그 다음에 a열 값이 1이거나 b값이 2인 행도 함께 찾는다. 여기에서는 a열 값이 2이면서 b열 값이 1인 행이 없기 때문에 a열 값이 1이거나 b값이 2인 행이 반환됐다.

AND는 OR에 비해 우선순위가 높으므로, OR를 먼저 처리해주고 싶으면 OR 조건식을 괄호로 묶어준다. OR를 먼저 처리하는 경우가 아니라고 하더라도, 조건이 잘못 지정되는 것을 미연에 방지하기 위해 괄호로 묶는 습관을 들이는 것이 좋다.

SELECT * FROM sample_talbe WHERE (a=1 OR a=2) AND (b=1 OR b=2);

no a b c
4 2 2 0

NOT

NOT은 AND, OR와 달리 오른쪽에만 항목을 지정하는 ‘단항 연산자’다. 오른쪽에 지정한 조건식의 반대 값을 반환한다. 만약 조건식이 참이면 NOT은 거짓을 반환한다. 집합으로 따지면 여집합을 구하는 것이다.

SELECT * FROM sample_talbe WHERE NOT (a<>0 OR b<>0);

no a b c
3 0 0 1

a열이 0이 아니거나 b열이 0이 아닌 행에 NOT을 걸어준 것이므로 둘 다 0인 행을 반환한다.

8강 패턴 매칭에 의한 검색

LIKE로 패턴 매칭하기

= 연산자로 검색할 때는 데이터 값이 완전히 동일한지를 비교한다. 특정 문자나 문자열이 포함됐는지 검색하고 싶을 때 LIKE를 이용하며, 이것을 ‘패턴 매칭’ 또는 ‘부분 검색’이라고 한다.

SELECT 필드 FROM 테이블명 WHERELIKE 패턴;

패턴을 입력할 때 수치형 상수는 지정할 수 없고, 패턴을 정의할 때 %나 _ 같은 메타문자를 사용할 수 있다. %는 임의의 문자열(letters)을 의미하고 _는 임의의 문자 하나(letter)를 의미한다.

sampletexttable

no text
1 맛있으면 바나나
2 바나나는 길어
3 길면 기차
4 기차는 빨라

SELECT * FROM sampletexttable WHERE text LIKE ‘%바나나’;

no text
1 맛있으면 바나나

SELECT * FROM sampletexttable WHERE text LIKE ‘바나나%‘;

no text
2 바나나는 길어

‘바나나%‘에서는 문자열이 ‘바나나’로 시작하는 것만 반환한다.

SELECT * FROM sampletexttable WHERE text LIKE ‘%바나나%‘;

no text
1 맛있으면 바나나
2 바나나는 길어

%는 빈 문자열과도 매치한다. ‘%문자열%‘로 검색하면 문자열 앞에 문자가 없어도 검색이 된다.

참고)

  • 문자열% : 전방 일치
  • %문자열 : 후방 일치
  • %문자열% : 중간 일치

LIKE로 %와 _ 검색하기

프로그래밍 언어에서 이스케이프를 다루는 것과 동일하다. %(퍼센트) 문자열 그 자체를 검색하고 싶으면 역슬래시(\)를 앞에 붙이면 된다.

SELECTFROM 테이블 WHERE text LIKE '%\%%';

%\%%를 뜯어보자. 맨 앞 %와 맨 끝 %는 메타문자 %로, 임의의 문자열을 의미한다. 가운데 \%는 퍼센트(%) 문자열 자체를 의미한다.

마찬가지로 _(언더스코어)를 검색할 때도 역슬래시를 앞에 붙여 검색한다.

문자열에 ’ 사용하기

문자열을 검색할 때 싱글쿼트(‘)를 사용한다. 만약 It’s raining이라는 문장처럼 문자열 안에 ‘를 넣고싶을 싱글쿼트를 두 개 연속해서 쓰면 된다.

It’s → ‘It”s’