본문 바로가기
SQL

SQL 명령어 :: WHERE

by csue 2021. 7. 11.

Where 절

사용자들은 자신이 원하는 자료만을 검색하기 위해 Where 절을 이용하여 출력되는 자료들을 제한할 수 있다. Where 절은 From 절 다음에 위치하며, 여러 연산자를 이용하여 조건을 표현할 수 있다.

연산자

연산이란 프로그램에서 데이터를 처리하여 산출하는 것을 의미한다. 연산자는 바로 이 연산을 수행하기 위해 사용되는 문자이다.

연산자의 종류

비교 연산자

  • 비교 연산자
    = ~와 같다
    > / < ~보다 크다 / 작다
    >= / <= ~보다 크거나 / 작거나 같다
  • 부정 비교 연산자
    !=  / <>  / ^= 같지 않다
    NOT 컬럼명 = ~와 같지 않다
    NOT 컬럼명 > ~보다 크지 않다

SQL 연산자

  • SQL 연산자
    BETWEEN A AND B A 와 B 사이에 있다
    IN (LIST) 리스트에 있는 값 중 하나라도 있으면 된다
    LIKE '비교문자열' 비교문자열의 형태와 일치하면 된다 (와일드카드 %, _ 사용)
    IS NULL 값이 NULL 이면 된다
    NULL 은 = 로 비교할 수 없으므로 해당 연산자를 사용한다
  • 부정 SQL 연산자
    NOT BETWEEN A AND B A 와 B 사이에 있지 않다
    NOT IN (LIST) 리스트에 있는 값과 모두 일치하지 않는다
    IS NOT NULL NULL 값이 아니다
  • 와일드 카드 : 특정 명령어로 명령을 내릴 때, 여러 파일을 한꺼번에 지정할 목적으로 사용하는 기호
    % 0개 이상의 어떤 문자를 의미한다
    %sue% : sue 가 들어간 모든 문자를 찾는다
    _ (언더바) 1개인 단일 문자를 의미한다
    s_ : s로 시작하고 두 글자인 모든 문자를 찾는다
    s_ _ : s로 시작하고 세 글자인 모든 문자를 찾는다
    _ s _ : 세 글자이고 중간에 s 가 들어간 모든 문자를 찾는다 

논리 연산자 : AND, OR, NOT

연산자의 우선 순위

  1. () 괄호
  2. NOT 연산자
  3. 비교 연산자, SQL 비교 연산자
  4. AND
  5. OR

AND 와 OR 을 함께 쓸때에는 순서에 주의하여 () 로 꼭 묶어주어야 한다.

문자 유형 비교 방법

양 쪽이 모두 Char 타입인 경우

Char(L) 타입은 고정길이 문자열이다. 고정 길이를 가지고 있으므로 할당된 변수의 값이 L값보다 작을 경우 그 차이만큼 공백으로 채워진다.

  1. 양 쪽이 모두 Char 타입인 경우 길이가 서로 다르다면 작은 쪽에 공백을 추가하여 길이를 같게 한다.
    (오라클 기준으로, MySQL 이나 postgresql 과는 조금 다를 수 있다. http://sqlfiddle.com/ 사이트를 이용하면 설치 없이 쿼리를 연습할 수 있다)
    같은 단어를 각각 Char(5) 와 Char(7) 타입의 row 에 넣었을때를 비교해보자.
    replace 를 이용하여 공백을 언더바로 바꿔주면, 같은 단어를 넣었지만 char(7) 타입의 로우에 들어간 단어 뒤에는 공백으로 채워져 있음을 알 수 있다.

  1. 단어 자체는 같고 공백의 크기만 다르다면 같은 단어로 판단한다.

  1. 서로 다른 문자가 나올 때 까지 비교하고, 달라진 첫 번째 값에 따라 크기를 결정한다.
    i 보다 y 가 더 크므로, teddy 가 teddi 보다 크다. 위처럼 공백의 크기는 판단하지 않는다.

한 쪽이 Varchar 타입인 경우

Varchar(L) 타입은 가변길이 문자열로, L만큼의 최대 길이를 가지며 L값보다 작을 경우 해당 값 만큼'만' 공간을 차지한다. 공백으로 채우지 않는다.

  1. Varchar 은 공백도 문자로 판단하므로, Char 과 다르게 공백이 있으면 서로 다른 문자라고 판단한다.

Char 일때는 공백이 있어도 같은 문자라고 판단한다.

 Char 과 달리 Varchar 는 같은 값이 없다고 판단한다.
이럴 경우 TRIM 함수를 이용하여 공백을 제거한 후 비교하면 같은 값으로 판단한다.

'SQL' 카테고리의 다른 글

GROUP BY, HAVING, ORDER BY  (0) 2021.08.08
함수(Function)  (0) 2021.07.11
DML, DDL, TCL  (0) 2021.06.06
성능 데이터 모델링  (0) 2021.05.21
정규화  (0) 2021.05.17