본문 바로가기

오라클

WHERE 절에서 연산자 사용

목차

    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');