본문 바로가기
데이터베이스/SQLD

[SQLD 과목2 1장-5절] WHERE 절

by kgvovc 2021. 3. 10.
반응형

1. WHERE 조건절 개요

SELECT [DISTINCT / ALL] 칼럼명 [ALIAS명]
FROM 테이블명
WHERE 조건식;

 

WHERE 절은 FROM 절 다음에 위치하며, 조건식은 아래 내용으로 구성된다.

  • 칼럼명 (보통 조건식의 좌측에 위치)
  • 비교 연산자
  • 문자, 숫자, 표현식 (보통 조건식의 우측에 위치)
  • 비교 칼럼명 (JOIN 사용시)

 

 

 

2. 연산자의 종류

WHERE 절에 조건식을 사용할 때, 사용되는 비교 연산자에 대해서 살펴보자.

WHERE 절에 사용되는 연산자는 3가지 종류가 있다.

  • 비교 연산자 (부정 비교 연산자 포함)
  • SQL 연산자 (부정 SQL 연산자 포함)
  • 논리 연산자

 

구분연산자연산자의 의미
비교 연산자=같다.
비교 연산자>보다 크다.
비교 연산자>=보다 크거나 같다.
비교 연산자<보다 작다.
비교 연산자<=보다 작거나 같다.
SQL 연산자BETWEEN a AND ba와 b의 값 사이에 있으면 된다. (a와 b 값이 포함됨.)
SQL 연산자IN (list)리스트에 있는 값 중에서 어느 하나라도 일치하면 된다.
SQL 연산자LIKE '비교문자열'비교문자열과 형태가 일치하면 된다.
SQL 연산자IS NULLNULL 값인 경우
논리 연산자AND앞에 있는 조건과 뒤에 오는 조건이 참(TRUE)이 되면 결과도 참(TRUE)이 된다.
논리 연산자OR앞의 조건이 참(TRUE)이거나 뒤의 조건이 참(TRUE)이 되어야 결과도 참(TRUE)이 된다.
논리 연산자NOT뒤에 오는 조건에 반대되는 결과를 되돌려 준다.
부정 비교 연산자!=같지 않다.
부정 비교 연산자^=같지 않다.
부정 비교 연산자<>같지 않다.
부정 비교 연산자NOT 칼럼명 =~와 같지 않다.
부정 비교 연산자NOT 칼럼명 >~보다 크지 않다.
부정 SQL 연산자NOT BETWEEN a AND ba와 b의 값 사이에 있지 않다. (a, b 값을 포함하지 않는다)
부정 SQL 연산자NOT IN (list)list 값과 일치하지 않는다.
부정 SQL 연산자IS NOT NULLNULL 값을 갖지 않는다.

 

연산 우선순위설명
1괄호 ()
2NOT 연산자
3비교 연산자, SQL 비교 연산자
4AND
5OR

 

 

 

3. 비교 연산자

문자 유형간의 비교 조건이 발생하는 경우 아래와 같이 처리한다.

 

비교 연산자의 양쪽이 모두 CHAR 유형 타입인 경우

  • 길이가 서로 다른 CHAR형 타입이면 작은 쪽에 SPACE를 추가하여 길이를 같게 한 후에 비교한다.
  • 서로 다른 문자가 나올 때까지 비교한다.
  • 달라진 첫 번째 문자의 값에 따라 크기를 결정한다.
  • BLANK의 수만 다르다면 서로 같은 값으로 결정한다.

 

비교 연산자의 어느 한 쪽이 VARCHAR 유형 타입인 경우

  • 서로 다른 문자가 나올 때까지 비교한다.
  • 길이가 다르다면 짧은 것이 끝날 때까지만 비교한 후에 길이가 긴 것이 크다고 판단한다.
  • 길이가 같고 다른 것이 없다면 같다고 판단한다.
  • VARCHAR는 NOT NULL까지 길이를 말한다.

 

상수값과 비교할 경우

  • 상수 쪽을 변수 타입과 동일하게 바꾸고 비교한다.

     

[참고] 문자 유형 칼럼의 경우 WHERE 문자유형칼럼 = K02 처럼 ' ' 표시가 없는 경우 에러가 발생하지만, 숫자 유형 칼럼의 경우 WHERE 숫자유형칼럼 = '170' 처럼 숫자로 변환이 가능한 문자열(Alpha Numeric)과 비교되면 상대 타입을 숫자 타입으로 바꾸어 비교한다. ('170'이 내부적으로 숫자 유형 170으로 바뀌어 처리됨.)

 

 

 

4. SQL 연산자

  • BETWEEN a AND b
  • IN (list)

 

  • LIKE '비교문자열'

    와일드 카드의 종류

    와일드 카드설명
    %0개 이상의 어떤 문자를 의미한다
    _1개인 단일 문자를 의미한다.

     

  • IS NULL

    NULL(ASCII 00)은 값이 존재하지 않는 것으로 확정되지 않은 값을 표현할 때 사용한다. 따라서 어떤 값보다 크거나 작지도 않고 ' '(공백, ASCII 32)이나 0(Zero, ASCII 48)과 달리 비교 자체가 불가능한 값인 것이다.

     

    연산 관련 NULL의 특성은 다음과 같다.

    • NULL 값과의 수치연산은 NULL 값을 리턴한다.
    • NULL 값과의 비교연산은 거짓(FALSE)을 리턴한다.
    • 어떤 값과 비교할 수도 없으며, 특정 값보다 크다, 적다라고 표현할 수 없다.

 

 

 

5. 논리 연산자

  • AND
  • OR
  • NOT

 

 

 

6. 부정 연산자

  • 부정 논리 연산자

    • !=
    • ^=
    • <>
    • NOT 칼럼명 =
    • NOT 칼럼명 >
  • 부정 SQL 연산자

    • NOT BETWEEN a AND b
    • NOT IN (list)
    • IS NOT NULL

 

 

 

7. ROWNUM, TOP 사용

  • ROWNUM

    Oracle의 ROWNUM은 칼럼과 비슷한 성격의 Pseudeo Column으로써 SQL 처리 결과 집합의 각 행에 대해 임시로 부여되는 일련번호이며, 테이블이나 집합에서 원하는 만큼의 행만 가져오고 싶을 때 WHERE 절에서 행의 개수를 제한하는 목적으로 사용한다.

     

    한 건의 행만 가져오고 싶을 때는

    • SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM = 1; 이나
    • SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM <= 1; 처럼 사용할 수 있다.

     

    두 건 이상의 N 행을 가져오고 싶을 때는 ROWNUM = N; 처럼 사용할 수 없으며

    • SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM <= N; 처럼 사용할 수 있다.

     

    추가적인 ROWNUM의 용도로는 테이블 내의 고유한 키나 인덱스 값을 만들 수 있다.

    • UPDATE MY_TABLE SET COLUMN1 = ROWNUM;

     

  • TOP 절

    SQL Server는 TOP 절을 사용하여 결과 집합으로 출력되는 행의 수를 제한할 수 있다. TOP 절의 표현식은 다음과 같다.

    TOP (Expression) [PERCENT] [WITH TIES]
    

     

    • Expression: 반환할 행의 수를 지정하는 숫자이다.
    • PERCENT: 쿼리 결과 집합에서 처음 Expression%의 행만 반환됨을 나타낸다.
    • WITH TIES: ORDER BY 절이 지정된 경우에만 사용할 수 있으며, TOP N(PERCENT)의 마지막 행과 같은 값이 있는 경우 추가 행이 출력되도록 지정할 수 있다.

     

    한 건의 행만 가져오고 싶을 때는

    • SELECT TOP(1) PLAYER_NAME FROM PLAYER; 처럼 사용할 수 있다.

     

    두 건 이상의 N 행을 가져오고 싶을 때는

    • SELECT TOP(N) PLAYER_NAME FROM PLAYER; 처럼 출력되는 행의 개수를 지정할 수 있다.

     

    SQL 문장에서 ORDER BY 절이 사용되지 않으면 Oracle의 ROWNUM과 SQL Server의 TOP 절은 같은 기능을 하지만, ORDER BY 절이 같이 사용되면 기능의 차이가 발생한다. 이 부분은 8절 ORDER BY 절에서 설명하도록 한다.

반응형

댓글