본문 바로가기
Infra & Security Eng/Database Engineering

SQL - WHERE절 (기본 개념, 다양한 조건 검색, 날짜 검색, 관계 연산자와 부정 연산자)

by 엔지니어 E 2026. 1. 28.
반응형

WHERE절의 기본 개념

SELECT 컬럼명 FROM 테이블명
WHERE 조건식;
ORDER BY 컬럼 [ASC/DESC], 컬럼[ASC|DESC], ...


데이터베이스에 테이블(표)이 있을때, 모든 데이터를 다 가져오는 것이 아니라 특정 기준을 통과한 데이터만 필터링 하고 싶을 때 사용 한다

* WHERE 조건식에는 비교 연산자가 사용된다 --->  =, <, >, <=, >=, * !=, <>, ^= 이 3개는 같지 않다 라는 표현 

 

다양한 조건 검색

사원 중에 급여가 4000 이상인 사원을 검색
SQL> SELECT eno 사번, ename 이름, sal 급여 ---> 조건 검색은 원하는 데이터만 적는게 좋음
2 FROM emp
3 WHERE sal >= 4000;

이름이 최미나인 사원을 검색 
SQL > SELECT * FROM emp 
2 WHERE ename = '최미나' ; ---> 최미나에 대한 모든 정보(eno, ename, sal 등) 가 다 나옴

SQL > SELECT ename
FROM emp
WHERE ename = '최미나'; ---> 최미나에 대한 이름만 나옴

10번 이외 부서 정보를 검색
SQL> SELECT * FROM dept ---> dept: 
2 WHERE dno != '10'; ---> 데이터타입이 숫자 인지 문자(10)인지 꼭 확인 해야 함

급여가 4000 이상인 사원을 급여 순으로 검색 
SQL> SELECT eno 사번, ename 이름, sal 급여
2 FROM emp
3 WHERE sal >= 4000
4 ORDER BY sal DESC;

연봉이 30000 이상인 사원을 부서별로 검색
SQL> SELECT dno 부서, eno 사번,
2                        ename 이름, sal*12+nvl(comm,0) 년봉 ---> 데이터에 있는 NULL 값에 대한 계산 오류를 막기 위해 수식 사용
3 FROM emp
4 WHERE sal*12+nvl(comm,0) >= 30000 ← 년봉 >= 30000 사용 불가!!
5 ORDER BY dno; ---> 이렇게만 정렬하면 부서는 같은데 연봉 같은사람끼리 뭉쳐서 나오고 정렬은 안됨

*부서가 같고 연봉순으로 정렬하고 싶다면 
5 ORDER BY dno; 년봉 DESC; 이 내용으로 정렬 해줘야 함

 

날짜 검색

입사일이 1996년 이후인 사원의 정보를 검색
SQL> SELECT * FROM emp
2 WHERE hdate >= '1996/01/01'; ---> 1996/01/01 입사한 사원의 모든 정보(sal, eno, ename 등)

* 사원 이름과 입사일만 나오게 하려면?
SQL> SELECT eno 사번 ename 이름 입사일 hdate
2 FROMR emp
3 WHERE hdate >= '1996/01/01'


날짜 확인, 날짜 형식 변경 하기
1)현재 시간과 날짜 확인하기 > select sysdate from dual; 

2) 날짜 형식 변경 확인하기


ALTER SESSION SET NLS_DATE_FORMAT ='YYYY/MM/DD';
현재 세션에서 수정하겠다, 날짜출력 포맷을 = YYYY/MM//DD 로

SELECT *
FROM NLS_SESSION_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';

 

관계 연산자(조건이 여러 개인 경우)와 부정 연산자

조건이 여러 개인 경우나 부정 검색인 경우 관계 연산자가 사용됨 - AND, OR, NOT

회계 업무를 담당하는 여성 사원을 검색
SQL> SELECT * FROM emp
2 WHERE job='회계' AND sex='여';

SQL> SELECT DISTINCT job FROM emp ---> job(회계, 마케팅 등)이 중복되서 나오므로 DISTINCT를 입력 해야 함
2 WHERE NOT job='회계'; ← job != '회계' 으로 사용을 더 많이 함 (NOT job='회계';) = job !='회계'

 

알고리즘 이진 탐색(Binary Search) 개념 정리

데이터가 정렬되어 있다면, 처음부터 하나씩 읽는 것보다 훨씬 빠른 방법이다

1. 탐색 예시 (데이터 1,000개 기준)

1   2    3    4   ..... 1000 
a   bb  k    y             x       ---> 1에는 a 데이터, 2에는 bb 데이터 ... 가 있다


상황: 1부터 1,000까지 정렬된 데이터에서 x 혹은 df 라는 데이터를 찾고 싶을 때
비효율적인 방식(선형 탐색): 1번 부터 1,000번 까지 하나씩 읽음 ---> 최대 1.000번 읽어야 함 

2. 이진 탐색 진행 과정 
효율적인 방식(이진 탐색): 500번째 데이터를 먼저 확인
1) 500번째 데이터를 확인한다 ---> 500번째 데이터는 ff 라는 데이터를 가지고 있음
2) 찾으려는 값(df)이 ff 보다 큰지 작은지 비교한다
3) df가 ff보다 작다면 뒤쪽 500개(500, 501, ... , 1000) 는 읽을 필요 없이 버린다 
남은 500개 중 다시 절반인 250번째를 확인하며 범위를 좁혀 나간다 

 

문제