1. WHERE 조건절 개요
SELECT [DISTINCT / ALL] 칼럼명 [ALIAS명]
FROM 테이블명
WHERE 조건식;
WHERE 절은 FROM 절 다음에 위치하며, 조건식은 아래 내용으로 구성된다.
- 칼럼명 (보통 조건식의 좌측에 위치)
- 비교 연산자
- 문자, 숫자, 표현식 (보통 조건식의 우측에 위치)
- 비교 칼럼명 (JOIN 사용시)
2. 연산자의 종류
WHERE 절에 조건식을 사용할 때, 사용되는 비교 연산자에 대해서 살펴보자.
WHERE 절에 사용되는 연산자는 3가지 종류가 있다.
- 비교 연산자 (부정 비교 연산자 포함)
- SQL 연산자 (부정 SQL 연산자 포함)
- 논리 연산자
구분 | 연산자 | 연산자의 의미 |
---|---|---|
비교 연산자 | = | 같다. |
비교 연산자 | > | 보다 크다. |
비교 연산자 | >= | 보다 크거나 같다. |
비교 연산자 | < | 보다 작다. |
비교 연산자 | <= | 보다 작거나 같다. |
SQL 연산자 | BETWEEN a AND b | a와 b의 값 사이에 있으면 된다. (a와 b 값이 포함됨.) |
SQL 연산자 | IN (list) | 리스트에 있는 값 중에서 어느 하나라도 일치하면 된다. |
SQL 연산자 | LIKE '비교문자열' | 비교문자열과 형태가 일치하면 된다. |
SQL 연산자 | IS NULL | NULL 값인 경우 |
논리 연산자 | AND | 앞에 있는 조건과 뒤에 오는 조건이 참(TRUE)이 되면 결과도 참(TRUE)이 된다. |
논리 연산자 | OR | 앞의 조건이 참(TRUE)이거나 뒤의 조건이 참(TRUE)이 되어야 결과도 참(TRUE)이 된다. |
논리 연산자 | NOT | 뒤에 오는 조건에 반대되는 결과를 되돌려 준다. |
부정 비교 연산자 | != | 같지 않다. |
부정 비교 연산자 | ^= | 같지 않다. |
부정 비교 연산자 | <> | 같지 않다. |
부정 비교 연산자 | NOT 칼럼명 = | ~와 같지 않다. |
부정 비교 연산자 | NOT 칼럼명 > | ~보다 크지 않다. |
부정 SQL 연산자 | NOT BETWEEN a AND b | a와 b의 값 사이에 있지 않다. (a, b 값을 포함하지 않는다) |
부정 SQL 연산자 | NOT IN (list) | list 값과 일치하지 않는다. |
부정 SQL 연산자 | IS NOT NULL | NULL 값을 갖지 않는다. |
연산 우선순위 | 설명 |
---|---|
1 | 괄호 () |
2 | NOT 연산자 |
3 | 비교 연산자, SQL 비교 연산자 |
4 | AND |
5 | OR |
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 절에서 설명하도록 한다.
'데이터베이스 > SQLD' 카테고리의 다른 글
[SQLD 과목2 1장-7절] GROUP BY, HAVING 절 (0) | 2021.03.10 |
---|---|
[SQLD 과목2 1장-6절] 함수 (Function) (0) | 2021.03.10 |
[SQLD 과목2 1장-4절] TCL (Transaction Control Language) (0) | 2021.03.09 |
[SQLD 과목2 1장-3절] DML (Data Manipulation Language) (0) | 2021.03.09 |
[SQLD 과목2 1장-2절] DDL (Data Definition Language) (0) | 2021.03.09 |
댓글