-
where 절
- 테이블의 데이터 중 원하는 조건에 맞는 데이터만 조회하고 싶을 경우 사용
- 엑셀의 필터기능과 유사
- 여러 조건 동시 전달 가능(AND와 OR로 조건 연결)
- NULL 조회 시 IS NULL/ IS NOT NULL 연산자 사용(=연산자로 조회 불가)
- 연산자를 사용하여 다양한 표현 가능
- 조건 전달 시 비교 대상의 데이터 타입 일치하는 것이 좋음
ex) EMP 테이블의 부서번호 컬럼의 데이터타입은 숫자인데 문자상수로 비교 시 성능 문제 발생할 수 있음
문법
주의사항
- 문자나 날짜 상수 표현 시 반드시 홀따옴표 사용(다른 절에서도 동일 적용)
- ORACLE은 문자 상수의 경우 대소문자를 구분
- MSSQL은 기본적으로 문자상수의 대소문자를 구분하지 X
① 이름이 SMITH인 직원 조회(조건절에 문자 상수 사용)
👉 ORACLE의 경우 테이블에 데이터는 실제로 대문자로 저장되어 있어 소문자로 조회 시 데이터 출력 안됨
② COMM 값이 NULL인 직원 정보 출력
7 ③ 여러 조건 전달 - AND 연산자의 사용
DEPTNO가 10번이면서 SAL이 2000 이상인 직원 출력
👉 두 조건이 모두 만족하는 대상을 찾을 경우 AND 연산자 사용④ 여러 조건 전달 - OR 연산자의 사용
DEPTNO가 10번이거나 SAL이 2000이상인 직원 정보 출력
👉 위와 똑같은 조건이지만 두 조건을 연결하는 논리연산자를 AND(모두 만족)로 사용할 때와 결과가 다름. OR는 두 조건 중 하나만 성립해도 되는, 두 조건 결과의 합집합을 출력하는 논리연산자임IN 연산자
- 포함연산자로 여러 상수와 일치하는 조건 전달 시 사용
- 상수를 괄호로 묶어서 동시에 전달 (문자와 날짜 상수의 경우 반드시 홀따옴표와 함께)
① SMITH와 SCOTT의 직원 정보 출력
👉 이름이 SMITH 이면서 SCOTT일 수는 없으므로 두 조건을 각각 만족하는 합집합을 구하라는 의미임. 하지만 동일한 조건대상(ENAME)이 계속 반복돼야 하는 불편함이 있음 -> IN 연산자 사용② IN 연산자로 변경
👉 IN 연산자를 사용하면 조건대상(ENAME)과 연산자(=)의 반복을 줄일 수 있음👉 이 때, ()안의 상수도 문자상수와 날짜상수는 홀따옴표 필수
BETWEEN A AND B 연산자
- A보다는 크거나 같고 B도 작거나 같은 조건을 만족
- A와 B에는 범위로 묶을 상수값 전달 (문자,숫자,날짜 모두 전달 가능)
- 반드시 A가 B도 작아야 함 (반대로 작성 시 아무것도 출력되지 X)
① SAL이 2000이상 3000이하인 직원 정보 출력
👉 역시 SAL이 반복되는 특징을 보임 -> BETWEEN A AND B 연산자 사용
② BETWEEN 연산자 사용
👉 BETWEEN 연산자를 사용하면 SAL에 대한 반복을 할 필요 없음
③ BETWEEN 연산자 주의사항
👉 BETWEEN A AND B에서 A가 B보다 더 큰 값일 경우 아무것도 조회되지 않음LIKE 연산자
- ENAME LIKE 'S%'
- 이름이 S로 시작하는
- ENAME LIKE '%S%'
- 이름에 S를 포함하는
- ENAME LIKE '%S'
- 이름이 S로 끝나는
- ENAME LIKE '_S%'
- 이름의 두 번째 글자가 S인
- 맨 앞이 _인것 주의! %이면 자리수 상관없이 S를 포함하기만 하면 됨
- ENAME LIKE '__S__'
- 이름의 가운데 글자가 S이며 이름의 길이가 5글자인
NOT 연산자
- 조건 결과의 반대집합. 즉, 여집합을 출력하는 연산자
- NOT 뒤에 어는 연산 결과의 반대 집합 출력
- 주로 NOT IN, NOT BETWEEN A AND B, NOT LIKE, NOT NULL로 사용
① NOT 연산자의 사용
👉 이 경우 "3000보다 작거나 같은" 조건으로 변경 가능하므로 위처럼 NOT을 사용하지 않는다
👉 1000 이상 3000 이하의 반대 집합 -> 1000 미만 또는 3000 초과
'CS > SQL' 카테고리의 다른 글
[SQLD] ORDER BY절 (0) 2025.02.22 [SQLD] GROUP BY절, HAVING절 (0) 2025.02.22 [SQLD] 함수 (0) 2025.02.21 [SQLD] SELECT문 (0) 2025.02.20 [SQLD] 관계형 데이터베이스 (0) 2025.02.19 댓글