원하는 자료만을 검색하기 위해 SQL 문장에 WHERE절을 이용해 자료를 제한할 수 있다.
1. WHERE절은 FROM절 다음에 위치한다. SELECT > FROM > WHERE
2. 연산자 우선순위
- ( ) 괄호로 묶은 연산이 제일 먼저 연산 처리된다.
- 연산자들 중에는 비교연산자( =, >, >=, <, <=), SQL연산자(BETWEENV a AND b, IN (list), LIKE, IS NULL)가 먼저 처리되고
- NOT 부정 연산자가 처리되고
- 논리 연산자 중에서는 AND, OR가 순서대로 처리된다.
3. 비교연산자 ( =, >, >=, <, <=)
- 칼럼들을 특정한 값들과 조건을 비교하는 데 사용됨
- WHERE columnName = 'SKY' (값은 따음표 묶어야함)
- 비교 연산자의 양쪽이 모두 CHAR 유형타입인 경우
- 길이가 서로 다른 CHAR형 타입이면 작은 쪽에 스페이스를 추가해 길이를 같게 한 후 비교한다.
- 서로 다른 문자가 나올 때까지 비교한다.
- 달라진 첫 번째 문자의 값에 따라 크기를 결정한다.
- 문자 끝 블랭크 수만 다르면 서로 같은 값으로 결정한다.
- 비교 연산자의 어느 한 쪽이 VARCHAR유형 타입인 경우
- 서로 다른 문자가 나올 때까지 비교한다.
- 길이가 다르면 짧은 것이 끝날 때까지만 비교한 후 길이가 긴 것이 크다고 판단한다.
- 길이가 같고 다른 것이 없다면 같다고 판단한다.
- VARCHAR는 NOT NULL까지 길이를 말한다. 즉 문자 끝 블랭크도 문자로 취급한다.
- 상수값과 비교할 경우
- 상수 쪽을 변수 타입과 동일하게 바꾸고 비교한다.
- 변수 쪽이 CHAR 유형 타입이면 위의 CHAR 유형 타입의 경우를 적용한다.
- 변수 쪽이 VARCHAR 유형 타입이면 위의 VARCHAR 유형 타입의 경우를 적용한다.
4. SQL 연산자
- BETWEEN a AND b : a<= x <=b (양쪽 다 포함!)
WHERE HEIGHT BETWEEN 170 AND 180
- IN (list) : 리스트에 있는 값 중에서 어느 하나라도 일치한다.
WHERE TEAM_ID IN ('K02', 'K07');
/*아래 두개는 다른거다. 위에 거는 딱 저 2 조합만, 아래는 4가지 조합*/
SELECT NAME, JOB, DEPTNO
FROM EMP
WHERE (JOB, DEPTNO) IN (('MANAGER', 20), ('CLERK', 30));
SELECT NAME, JON, DEPTNO
FROM EMP
WHERE JOB IN ('MANAGER', 'CLERK') AND DEPTNO IN (20, 30);
- LIKE '비교문자열' : 비교문자여로가 형태가 일치한다.(%, _ 사용)
- % : 0개 이상의 어떤 문자를 의미
- _ : 1개인 단일 문자를 의미
--김xx or 김x or 김xxx 등이 출력
WHERE PLAYER_NAME LIKE '김%';
--김x재 출력
WHERE PLAYER_NAME LIKE '김_재'
- IS NULL : NULL 값인 경우를 의미한다.
- 값이 존재하지 않음. 공백이나 0 과 다른거다.
- NULL 값과의 수치연산의 NULL 값을 리턴한다.
- NULL 값과의 비교연산은 FALSE를 리턴한다.
- 어떤 값과 비교할 수도 없으며, 특정 값보다 크다/작다고 표현할 수 없다.
- NULL값의 비교 연산은 IS NULL, IS NOT NULL이라는 정해진 문구를 사용해야 한다.
5. 논리 연산자
- NOT : 반대 결과를 리턴
- AND : 앞 뒤 다 참이어야 참
- OR : 앞 뒤 중 하나만 참이어도 참
6. 부정 연산자
- 부정 논리연산자
- <> : 같지 않다 (!=, ^= 도 같은 의미지만, <>가 표준)
- NOT 칼럼명 = : ~와 같지 않다.
- 부정 SQL 연산자
- NOT BETWEEN a AND b
- NOT IN (list)
- IS NOT NULL
--K02팀 중에 MF가 아니고, 키가 175 이상 185 이하가 아닌 선수
WHERE TEAM_ID = 'K02' AND NOT POSITION = 'MF' AND NOT HEIGHT BETWEEN 175 AND 185
--이렇게 써도 된다
WHERE TEAM_ID = 'K02' AND POSITION <> 'MF' AND HEIGHT NOT BETWEEN 175 AND 185
7. 조건도 결과도 내부처리 방법도 같다.
WHERE TEAM_ID = 'K01' OR TEAM_ID = 'K07'
==
WHERE TEAM_ID IN ('K01', 'K07')
WHERE HEIGHT >=170 AND HEIGHT <= 180
==
WHERE HEIGHT BETWEEN 170 AND 180
'Programming > Database' 카테고리의 다른 글
[SQL] 함수 (정리 필요) (0) | 2022.10.15 |
---|---|
[SQL] SELECT 문 (0) | 2022.10.13 |
댓글