728x90
01. WHERE 조건절
SELECT [DISTINCT / ALL] 칼럼명 [ALIAS명]
FROM 테이블명
WHERE 조건식;
WHERE 절은 FROM 절 다음에 위치하며, 조건식은 아래 내용으로 구성된다.
- 칼럼명(보통 조건식의 좌측에 위치)
- 비교 연산자
- 문자, 숫자, 표현식 (보통 조건식의 우측에 위치)
- 비교 칼럼명 (JOIN 사용시)
02. 연산자의 종류
WHERE 절에 사용되는 연산자
- 비교 연산자 (부정 비교 연산자 포함)
- SQL 연산자 (부정 SQL 연산자 포함)
- 논리 연산자
구분 | 연산자 | 연산자의 의미 |
비교 연산자 | = | 같다 |
> | 보다 크다 | |
>= | 보다 크거나 작다 | |
< | 보다 작다 | |
<= | 보다 작거나 같다 | |
SQL 연산자 | BETWEEN A AND B | A와 B값 사이에 있으면 된다 (A와 B값 포함) |
IN (list) | 리스트에 있는 값 중에서 어느 하나라도 일치하면 된다 | |
LIKE '비교문자열' | 비교문자열과 형태가 일치하면 된다 | |
IS NULL | NULL 값인 경우 | |
논리 연산자 | AND | 앞에 있는 조건과 뒤에 오는 조건이 참(TRUE)이 되면서 결과도 참(TRUE)이 된다 |
OR | 앞의 조건이 참(TRUE)이거나 뒤의 조건이 참(TRUE)이 되어야 결과도 참(TRUE)이 된다 | |
NOT | 뒤에 오는 조건에 반대되는 결과를 되돌려 준다 | |
부정 비교 연산자 | != | 같지 않다 |
^= | ||
<> | ||
NOT 칼럼명 = | ~와 같지 않다 | |
NOT 칼럼명 > | ~보다 크지 않다 | |
부정 SQL 연산자 | NOT BETWEEN A AND B | A와 B 값 사이에 있지 않다 (A와 B값을 포함하지 않음) |
NOT IN (list) | list 값과 일치하지 않는다 | |
IS NOT NULL | NULL 값을 갖지 않는다 |
💡 연산 우선순위
① 괄호()
② NOT 연산자
③ 비교 연산자, SQL 비교 연산자
④ AND
⑤ OR
비교 연산자
*문자 유형간의 비교 조건이 발생하는 경우
비교 연산자의 양쪽이 모두 CHAR 유형 타입인 경우
- 길이가 서로 다른 CHAR형 타입이면 작은 쪽에 SPACE를 추가하여 길이를 같게 한 후에 비교한다
- 서로 다른 문자가 나올 때까지 비교한다
- 달라진 첫 번째 문자의 값에 따라 크기를 결정한다
- BLANK의 수만 다르다면 서로 같은 값으로 결정한다
비교 연산자의 어느 한쪽이 VARCHAR 유형 타입인 경우
- 서로 다른 문자가 나올 때까지 비교한다
- 길이가 다르다면 짧은 것이 끝날 때까지 비교한 후에 길이가 긴 것이 크다고 판단한다
- 길이가 같고 다른 것이 없다면 같다고 판단한다
- VARCHAR는 NOT NULL까지 길이를 말한다
상수값과 비교할 경우
- 상수 쪽을 변수 타입과 동일하게 바꾸고 비교한다
문자 유형 칼럼의 경우 WHERE 문자유형칼럼 = K02 처럼 '' 표시가 없는 경우 에러가 발생하지만, 숫자 유형의 칼럼의 경우 WHERE 숫자유형칼럼 = '170' 처럼 숫자로 변환이 가능한 문자열과 비교 되면 상대 타입을 숫자 타입으로 바꾸어 비교한다.
('170'이 내부적으로 숫자 유형 170으로 바뀌어 처리됨)
SQL 연산자
- BETWEEN a AND b
- IN (list)
- LIKE '비교문자열'
- 와일드카드 '%': 0개 이상의 어떤 문자를 의미
- 와일드카드 '_': 1개의 단일 문자를 의미
- IS NULL
연산 관련 NULL 특성
- NULL 값과의 수치연산은 NULL 값을 리턴
- NULL 값과의 비교연산은 거짓(FALSE)을 리턴
- 어떤 값과 비교할 수 없으며, 특정 값보다 크다, 적다라고 표현할 수 없음
논리연산자
- AND
- OR
- NOT
부정 연산자
구분 | 연산자 |
부정 논리 연산자 | != |
^= | |
<> | |
NOT 칼럼명 = | |
NOT 칼럼명 > | |
부정 SQL 연산자 | NOT BETWEEN a AND b |
NOT IN (list) | |
IS NOT NULL |
03. ROWNUM, TOP 사용
ROWNUM
Oracle의 ROWNUM은 칼럼과 비슷한 성격의 Pseudeo Column으로써 SQL 처리 결과 집합의 각 행에 대해 임시로 부여되는 일련번호이다. 테이블이나 집합에서 원하는 만큼 행만 가져오고 싶을 때 WHERE 절에서 행의 개수를 제한한는 목적으로 사용한다.
한 건의 행만 가져오고 싶을때
SELCT USER_NAME FROM USER WHERE ROWNUM = 1;
OR
SELECT USER_NAME FROM USER WHERE ROWNUM <=1;
두 건 이상의 N행을 가져오고 싶을 때
SELECT USER_NAME FROM USER WHERE ROWNUM <= N;
// ROWNUM = N 은 사용 X
추가적인 ROWNUM의 용도로는 테이블 내의 고유한 키나 인덱스 값을 만들 수 있음
UPDATE MY_TABLE SET COLUMN1 = ROWNUM;
TOP 절
SQL Server는 TOP절을 사용하여 결과 집합으로 출력되는 행의 수를 제한할 수 있다.
TOP (Expression) [PERCENT] [WITH TIES]
Expression: 반환할 행의 수를 지정하는 숫자
PERCENT: 쿼리 결과 집합에서 처음 Expression%의 행만 반환됨을 나타냄
WITH TIES: ORDER BY 절이 지정된 경우에만 사용할 수 있으며, TOP N(PERCENT)의 마지막 행과 같은 값이 있는 경우 추가 행이 출력되도록 지정할 수 있다
한 건의 행만 가져오고 싶을때
SELECT TOP(1) USER_NAME FROM USER;
두 건 이상의 N행을 가져오고 싶을 때
SELECT TOP(N) USER_NAME FROM USER;
⚠️ SQL 문장에서 ORDER BY 절이 사용되지 않으면 Oracle의 ROWNUM과 SQL Server의 TOP절은 같은 기능을 하지만, ORDER BY절이 같이 사용되면 기능의 차이가 발생한다
728x90
'자격증 > SQLD' 카테고리의 다른 글
[SQLD] SQL 기본 - GROUP BY, HAVING 절 (0) | 2023.08.31 |
---|---|
[SQLD] SQL 기본 - FUNCTION (0) | 2023.08.31 |
[SQLD] SQL 기본 - TCL (Transaction Control Language) (0) | 2023.08.30 |
[SQLD] SQL 기본 - DML(Data Manipulation Language) (0) | 2023.08.30 |
[SQLD] SQL 기본 - DDL(Data Definition Language) (0) | 2023.08.30 |