WHERE절
SELECT 컬럼명
FROM 테이블명
WHERE 조건;
조건에 사용되는 연산자
산술 연산자
+ - * /
비교 연산자
문자도 비교 가능
- 대소비교연산자
연산자 | TRUE 반환 |
A > B | A 값이 B 값 초과 |
A >= B | A 값이 B 값 이상 |
A < B | A 값이 B 값 미만 |
A <= B | A 값이 B 값 이하 |
- 등가비교연산자
연산자 | TRUE 반환 |
A = B | A 값이 B 값과 같을 경우 |
A != B | A 값이 B 값과 다를 경우 |
A <> B | |
A ^= B |
AND | OR 연산자
조건 여러 개를 연결할 때 사용
WHERE 조건1
[AND|OR] 조건2
[AND|OR] 조건3
...
- TRUE, FALSE 항목에 따른 AND | OR 연산자 사용 결과
AND | true | false | OR | true | false | |
true | true | false | true | true | true | |
false | false | false | false | true | false |
NOT 연산자
논리 부정 연산자
조건 앞에 NOT을 붙여 사용
IN | BETWEEN 연산자
여러 조건을 한 줄로 작성할 때 사용
-- 특정 컬럼(같은 컬럼)에 포함된 데이터를 여러 개 조회
-- OR 연산자
WHERE 컬럼명 = 데이터1
OR 컬럼명 = 데이터2
...
OR 컬럼명 = 데이터N
-- IN 연산자
WHERE 컬럼명 IN(데이터1, 데이터2, ... , 데이터N)
-- IN 연산자 사용 못하는 경우(같은 컬럼이 아님)
WHERE DEPTNO = 30 OR JOB = 'CLERK'
-- 특정 범위 내의 테이터 조회
-- AND 연산자
WHERE 컬럼명 >= A
AND 컬럼명 <= B
-- BETWEEN 연산자
WHERE 컬럼명 BETWEEN A AND B
-- NOT 연산자와 함께 사용할 경우
WHERE 컬럼명 NOT IN(데이터)
WHERE 컬럼명 NOT BETWEEN A AND B
LIKE 연산자와 와일드 카드
와일드카드 문자로 일부 문자열이 포함된 데이터 조회
- 와일드카드
_ : 어떤 값이든 상관없이 한 개의 문자 데이터를 의미
%: 길이와 상관없이(문자 없는 경우도 포함) 모든 문자 데이터를 의미
-- 'X'가 포함된 데이터 조회
WHERE 컬럼명 LIKE '%X%'
-- 'X'가 2번째 위치에 포함된 데이터 조회
WHERE 컬럼명 LIKE '_X%'
-- 'X'가 3번째 위치에 포함된 데이터 조회
WHERE 컬럼명 LIKE '__X%'
-- 와일드카드 문자(_|%)가 데이터의 일부일 경우
-- '_'가 포함된 데이터 조회
WHERE 컬럼명 LIKE '%\_%' ESCAPE '\'
IS NULL 연산자
NULL이란 데이터 값이 완전히 '비어 있는' 상태를 뜻함 (0이 아님)
의미 | 예시 |
값이 존재하지 않음 | 통장을 개설한 적 없는 고객의 계좌번호 |
해당 사항 없음 | 미혼인 고객의 결혼기념일 |
노출할 수 없는 값 | 고객 비밀번호 찾기 같은 열람을 제한해야 하는 특정 개인 정보 |
확정되지 않은 값 | 미성년자의 출신 대학 |
-- 값이 NULL인 데이터 조회
WHERE 컬럼명 IS NULL
-- 값이 NULL이 아닌 데이터 조회
WHERE 컬럼명 IS NOT NULL
- TRUE, FALSE, NULL 항목에 따른 AND | OR 연산자 사용 결과
AND | true | false | null | OR | true | false | null | |
true | true | false | null | true | true | true | true | |
false | false | false | false | false | true | false | null | |
null | null | false | null | null | true | null | null |
집합 연산자
여러 개의 SELECT문을 통해 조회한 결과를 대상으로 집합 연산 수행
연산자 | 결과 |
UNION | 여러 SELECT문의 합집합 조회 (중복 제거) |
UNION ALL | 여러 SELECT문의 합집합 조회 (중복 포함) |
INTERSECT | 여러 SELECT문의 교집합 조회 (중복 제거) |
MINUS | 앞의 SELECT문을 기준으로 뒤의 SELECT문에 대한 차집합 조회 (중복 제거) |
SELECT ...
[UNION|UNION ALL|INTERSECT|MINUS]
SELECT ...;
집합 연산을 할 때 SELECT문의 컬럼 개수와 타입이 일치해야 함
결과 테이블의 Heading은 앞의 SELECT문에 의해 결정
연산자 우선순위
높음 낮음 |
연산자 | 설명 |
*, / | 산술 연산자 곱하기, 나누기 | |
+, - | 산술 연산자 더하기, 빼기 | |
=, !=, <>, ^=, >, >=, <, <= | 대소 비교 연산자 | |
IS (NOT) NULL, (NOT) LIKE, (NOT) IN | (그 외) 비교 연산자 | |
BETWEEN A AND B | BETWEEN 연산자 | |
NOT | 논리 부정 연산자 NOT | |
AND | 논리 연산자 AND | |
OR | 논리 연산자 OR |
-- AND | OR 연산자 우선순위
WHERE 조건1
OR 조건2
AND 조건3
OR 조건4
-- 잘못된 예상
WHERE (조건1 OR 조건2)
AND (조건3 OR 조건4)
-- 실제 실행
WHERE 조건1
OR (조건2 AND 조건3)
OR 조건4
* 여러 연산자, 조건문을 연결할 때 가독성과 착각 방지를 위해 괄호를 적절히 사용하여 입력하는 것이 좋음
'ORACLE SQL' 카테고리의 다른 글
다중행 함수 & 데이터 그룹화 (0) | 2021.02.28 |
---|---|
단일행 함수 (0) | 2021.02.26 |
SELECT문 (0) | 2021.02.24 |
데이터 형식 (0) | 2021.02.24 |
테이블 & 데이터 (0) | 2021.02.24 |