
목차
WHERE 절은 쿼리에서 중요하고 많이 사용합니다.
잘못된 연산자를 사용할 경우 테이블 전체를 삭제한다던가,
원하는 데이터만 빼고 나머지를 UPDATE 하는 등 생각하고 싶지도 않은 상황이 발생할 수 있습니다.
WHERE에서 만큼은 돌다리를 두 번, 세 번 두들기고 COMMIT을 클릭하는 것이 좋겠습니다.
오라클 책자에서 설명하는 비교연산자는 아래표와 같지만 이번 포스팅에서는 더 추가해서 알아보겠습니다.
=
'=' 연산자는 두 값이 같은지 비교합니다. 값이 같으면 조건이 참이 됩니다.
- 나이가 30인 직원들을 조회하고자 할 때
SELECT employee_id, full_name FROM employees WHERE age = 30;
<> 또는 !=
'<>' 또는 '!=' 연산자는 두 값이 다른지 비교합니다. 값이 다르면 조건이 참이 됩니다.
- 나이가 30이 아닌 직원들을 조회하고자 할 때
SELECT employee_id, full_name FROM employees WHERE age <> 30;
>
'>' 연산자는 첫 번째 값이 두 번째 값보다 큰지 비교합니다. 값이 크면 조건이 참이 됩니다.
- 나이가 30보다 많은 직원들을 조회하고자 할 때(30이 포함 안 되는)
SELECT employee_id, full_name FROM employees WHERE age > 30;
<
'<' 연산자는 첫 번째 값이 두 번째 값보다 작은지 비교합니다. 값이 작으면 조건이 참이 됩니다.
- 나이가 30보다 적은 직원들을 조회하고자 할 때(30이 포함 안 되는)
SELECT employee_id, full_name FROM employees WHERE age < 30;
>=
'>=' 연산자는 첫 번째 값이 두 번째 값보다 크거나 같은지 비교합니다. 값이 크거나 같으면 조건이 참이 됩니다.
- 나이가 30 이상인 직원들을 조회하고자 할 때(30이 포함되는)
SELECT employee_id, full_name FROM employees WHERE age >= 30;
<=
'<=' 연산자는 첫 번째 값이 두 번째 값보다 작거나 같은지 비교합니다. 값이 작거나 같으면 조건이 참이 됩니다.
- 나이가 30 이하인 직원들을 조회하고자 할 때(30이 포함되는)
SELECT employee_id, full_name FROM employees WHERE age <= 30;
BETWEEN AND
'BETWEEN AND' 연산자는 값이 지정된 범위 내에 있는지 확인합니다. 값이 범위 내에 있으면 조건이 참이 됩니다.
- 나이가 20세 이상 30세 이하인 직원들을 조회하고자 할 때(20세, 30세가 포함되는)
SELECT employee_id, full_name FROM employees WHERE age BETWEEN 20 AND 30;
LIKE
'LIKE' 연산자는 특정 패턴과 일치하는 값을 찾습니다. 와일드카드 문자를 사용하여 다양한 패턴을 정의할 수 있습니다. '%'는 0개 이상의 문자와 일치하며, '_'는 한 개의 문자와 일치합니다.
1. 특정 문자로 시작하는 값 찾기
예를 들어, 이름이 'J'로 시작하는 직원을 찾고자 할 때 다음과 같은 쿼리를 작성할 수 있습니다.
SELECT employee_id, full_name FROM employees WHERE full_name LIKE 'J%';
2. 특정 문자로 끝나는 값 찾기
이름이 'a'로 끝나는 직원을 찾고자 할 때 다음과 같은 쿼리를 작성할 수 있습니다.
SELECT employee_id, full_name FROM employees WHERE full_name LIKE '%a';
3. 특정 문자가 포함된 값 찾기
이름에 'son'이 포함된 직원을 찾고자 할 때 다음과 같은 쿼리를 작성할 수 있습니다.
SELECT employee_id, full_name FROM employees WHERE full_name LIKE '%son%';
4. 특정 위치의 문자 찾기
이름의 두 번째 글자가 'a'인 직원을 찾고자 할 때 다음과 같은 쿼리를 작성할 수 있습니다.
SELECT employee_id, full_name FROM employees WHERE full_name LIKE '_a%';
5. 특정 문자 개수에 따른 값 찾기
이름이 정확히 세 글자인 직원을 찾고자 할 때 다음과 같은 쿼리를 작성할 수 있습니다.
SELECT employee_id, full_name FROM employees WHERE full_name LIKE '___';
NOT LIKE
'NOT LIKE' 연산자는 주어진 패턴과 일치하지 않는 값을 확인합니다. 만약 주어진 값이 패턴과 일치하지 않으면 조건이 참이 됩니다.
- 이메일 주소에 'gmail.com' 도메인이 아닌 직원들을 조회하고자 할 때
SELECT e.employee_id, e.email FROM employees e WHERE e.email NOT LIKE '%@gmail.com';
IN
'IN (...)' 연산자는 주어진 값이 서브쿼리에서 반환된 목록에 있는지 확인합니다. 값이 목록에 있으면 조건이 참이 됩니다.
- 나이가 25, 30, 35인 직원들을 조회하고자 할 때
SELECT employee_id, full_name FROM employees WHERE age IN (25, 30, 35);
NOT IN
'NOT IN' 연산자는 주어진 값이 서브쿼리에서 반환된 목록에 없는지 확인합니다. 만약 주어진 값이 서브쿼리 결과에 없으면 조건이 참이 됩니다.
- 관리자가 아닌 직원들을 조회하고자 할 때
SELECT e.employee_id, e.full_name FROM employees e
WHERE e.employee_id NOT IN (SELECT m.employee_id FROM employees m WHERE m.job_title = 'Manager');
IS NULL
'IS NULL' 연산자는 특정 컬럼의 값이 NULL인지 확인합니다. 값이 NULL이면 조건이 참이 됩니다.
- 이메일 주소가 없는 직원들을 조회하고자 할 때
SELECT employee_id, full_name FROM employees WHERE email IS NULL;
IS NOT NULL
'IS NOT NULL' 연산자는 특정 컬럼의 값이 NULL이 아닌지 확인합니다. 값이 NULL이 아니면 조건이 참이 됩니다.
- 이메일 주소가 있는 직원들을 조회하고자 할 때
SELECT employee_id, full_name FROM employees WHERE email IS NOT NULL;
ANY, SOME
'SOME' 연산자는 'ANY' 연산자와 동일하게 동작하며, 'ANY' 연산자는 서브쿼리에서 반환된 결과 중 하나라도 주어진 조건을 만족하는지 확인합니다. 주로 비교 연산자와 함께 사용됩니다.
- 직원 중에서 급여가 어떤 관리자의 급여보다 높은 직원을 조회하고자 할 때
SELECT e1.employee_id, e1.salary FROM employees e1
WHERE e1.salary > ANY (SELECT e2.salary FROM employees e2 WHERE e2.job_title = 'Manager');
ALL
'ALL' 연산자는 서브쿼리에서 반환된 모든 결과가 주어진 조건을 만족하는지 확인합니다. 주로 비교 연산자와 함께 사용됩니다.
- 직원 중에서 급여가 모든 관리자의 급여보다 높은 직원을 조회하고자 할 때
SELECT e1.employee_id, e1.salary FROM employees e1
WHERE e1.salary > ALL (SELECT e2.salary FROM employees e2 WHERE e2.job_title = 'Manager');
EXISTS
'EXISTS' 연산자는 서브쿼리에서 반환된 결과가 존재하는지 확인합니다. 만약 서브쿼리가 하나 이상의 결과를 반환하면 조건이 참이 됩니다.
- 관리자가 있는 부서 중에서 모든 부서를 조회하고자 할 때
SELECT d.department_id, d.department_name FROM departments d
WHERE EXISTS
(SELECT 1 FROM employees e
WHERE e.department_id = d.department_id AND e.job_title = 'Manager');
NOT EXISTS
'NOT EXISTS' 연산자는 서브쿼리에서 반환된 결과가 없는지 확인합니다. 만약 서브쿼리가 결과를 반환하지 않으면 조건이 참이 됩니다.
- 관리자가 없는 부서 중에서 모든 부서를 조회하고자 할 때
SELECT d.department_id, d.department_name FROM departments d
WHERE NOT EXISTS
(SELECT 1 FROM employees e WHERE e.department_id = d.department_id AND e.job_title = 'Manager');
'오라클' 카테고리의 다른 글
잘못 삭제하거나 수정한 데이터 복구하는 방법(FLASHBACK 설정과 사용) (0) | 2023.03.29 |
---|---|
오라클 사용자 정의 함수 (0) | 2023.03.28 |
쿼리에서 중복을 제거하는 방법(DISTINCT와 GROUP BY 차이점) (0) | 2023.03.24 |
오라클 데이터 타입과 정확히 작성해야 하는 이유 (0) | 2023.03.22 |
sql에서 가독성을 높이는 별칭 사용법(Column Aliases, Table Aliases) (0) | 2023.03.18 |