1. WHERE절
SELECT문으로 데이터를 조회할 때 특정 조건을 기준으로 원하는 행을 출력하는 데 사용한다. SELECT 문이 열을 지정하는 것이라면, WHERE절은 행을 지정하는 것이다. WHERE절에서 문자열을 비교할 때는 작은 따옴표 '로 묶어 주어야 한다. 테이블 안의 값들은 대소문자를 구별하므로, 정확하게 지정해야 한다.
SELECT *
FROM TABLE
WHERE A=1;
2. 연산자
WHERE절에서 원하는 행만 골라내려면, 조건식이 필요하다. 이 때 사용하는 것이 연산자이다.
1) 논리 연산자
AND, OR 등
2) 산술 연산자
+, -, *, /
3) 비교 연산자
>, >=, <, <= : 대소 비교
= : 같으면 TRUE
!=, <>, ^= : 다르면 TRUE
4) NOT 연산자
논리 부정 연산자. 뒤에 오는 전체 조건식을 부정하는 연산자. 복잡한 조건식에서 정반대의 최종 결과를 원할 때 주로 사용한다.
5) IN 연산자
출력하고 싶은 열의 조건이 여러 가지 일 때, OR 대신 사용
WHERE 열 이름 IN (데이터1, 데이터2, ... 데이터 N);
6) BETWEEN A AND B 연산자
A이상 B이하
WHERE 열 이름 BETWEEN 최솟값 AND 최댓값;
7) LIKE 연산자
검색 기능에서 일부 문자열이 포함된 데이터를 조회할 때 사용한다.
와일드 카드를 활용할 수 있다.
와일드 카드 종류
%: 길이와 상관없이 모든 문자 데이터를 의미한다. 아무 값도 없는 것도 포함한다.
_: 길이가 1인 문자 데이터를 의미한다.
예를 들어 _a%라고 작성하면 A열의 값이 두번째 글자가 a이고, 그 뒤에 오는 값은 상관 없는 경우를 의미한다.
SELECT *
FROM TABLE
WHERE A LIKE '_a%';
가장 자주 사용하는 검색 방법은 어떤 값을 포함하는 것을 찾는 것이다.
그럴 때는 '%원하는값%' 이라고 작성하면 원하는 값을 포함하는 모든 것들을 찾을 수 있을 것이다.
SELECT *
FROM TABLE
WHERE A LIKE '%원하는값%';
와일드 카드가 찾고자 하는 데이터의 일부일 경우: ESCAPE 절을 사용한다.
WHERE A LIKE 'a\_a%' ESCAPE '\';
위와 같이 작성하면 \바로 뒤에 있는 문자는 와일드 카드가 아니라는 의미이다. (\대신 다른 문자를 사용할 수 있다.)
따라서 a_a로 시작하는 데이터들을 모두 찾을 것이다.
8) IS NULL 연산자
- NULL이면 TRUE, 아니면 FALSE를 반환한다.
- A열의 값이 NULL 이어도 WHERE A = NULL; 과 같이 쓰면 TRUE가 아닌 NULL이 반환되어 데이터를 조회할 수 없다.
?와 ?를 비교했을 때 그 값이 같다고 할 수없는 것과 같다. 같을 수도 있고, 다를 수도 있기 때문이다. 그래서 ?를 의미하는 NULL이 반환된다. 그래서 어떤 열의 데이터가 NULL인 경우를 구별해 내고 싶다면, IS NULL 연산자를 사용해야 한다.
- 데이터가 NULL이 아닌 경우를 찾고 싶다면 IS NOT NULL 을 사용하면 된다.
NULL의 의미는 값이 완전히 비어있음을 의미한다(0이 아니다!). 아래와 같이 이해하면 편하다.
- 존재하지 않는 값 (EX. 아직 미혼인 사람의 결혼기념일)
- 확정되지 않은 값 (EX. 아직 대학 재학 중인 사람의 최종 학점 평균)
- 노출할 수 없는 값 (EX. 민감한 개인 정보)
※ 참고
AND 연산의 결과
T | F | NULL | |
T | T | F | NULL |
F | F | F | F |
NULL | NULL | F | NULL |
OR 연산의 결과
T | F | NULL | |
T | T | T | T |
F | T | F | NULL |
NULL | T | NULL | NULL |
NULL 값을 ?라고 생각하면 편하다. T*? 의 값은 T나 F가 될 수 있으므로 하나로 확정되지 않아 그 결과는 NULL이 된다. AND 연산의 결과 표에서 T열에서, 행이 T이냐 F이냐에 따라 결과가 T가 될 수도 있고, F가 될 수도 있다. 그러므로 NULL을 곱하면 NULL이 되는 것이다.
9) 집합 연산자
두 개 이상의 SELECT 문의 결과 값을 연결할 때 사용한다.
SELECT 문이 출력하려는 열 개수와 각 열의 자료형이 순서대로 일치해야만 사용할 수 있다. 조회하는 열 이름이 다른 것은 문제가 되지 않는다.
집합 연산자의 종류
UNION | 합집합 |
UNION ALL | 합집합 (중복 제거 없는) |
MINUS | 차집합 |
INTERSECT | 교집합 |
3. 연산자의 우선순위
우선순위 | 연산자 | |
높음 | *, / | |
+, - | ||
=, !=, >, < | 대소 비교 연산자 모두 | |
IS NULL, LIKE, IN | NOT 포함 가능 | |
BETWEEN A AND B | ||
NOT | ||
AND | ||
낮음 | OR |
'BackEnd > DB, SQL' 카테고리의 다른 글
SQL 4편: 문자 함수(LENGTH, SUBSTR, INSTR, REPLACE, LPAD, RPAD, CONCAT, TRIM, LRTIM, RTRIM) (0) | 2021.12.27 |
---|---|
SQL 3편: 함수의 종류(단일행 함수, 다중행 함수) (0) | 2021.12.27 |
SQL 1편: SELECT문 (0) | 2021.12.17 |
오라클 데이터베이스에 접속하기/SCOTT 계정 설정하기 (0) | 2021.12.15 |
관계형 데이터베이스 (0) | 2021.12.02 |
댓글