ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL WHERE절과 연산자
    back-end&DB/SQL(Oracle) 2023. 5. 3. 12:53
    728x90

    1. WHERE

     

    SELECT 컬럼

    FROM 테이블

    WHERE 조건

     

    SELECT
        *
    FROM
        employees
    WHERE
        job_id = 'IT_PROG';

    * Oracle의 경우 Ctrl + F7의 경우 정렬이 된다.

     

     - 실행 순서 FROM > WHERE > SELECT 

     - employees 테이블에서 IT_PROG의 조건에 해당하는 모든 컬럼에서 찾는다.

     

    1.1. 실습

     

     - 직원 ID가 105인 사람의 성과 이름을 출력

    SELECT
        first_name,
        last_name
    FROM
        employees
    WHERE
        employee_id = '105';

     

    2. 연산자

     

    2.1. 산술연산자( +, -, *, / )

    SELECT
        salary,
        salary + 2
    FROM
        employees;
    
    SELECT
        salary,
        salary - 2
    FROM
        employees;
    
    SELECT
        salary,
        salary * 2
    FROM
        employees;
    
    SELECT
        salary,
        salary / 2
    FROM
        employees;

    2.2. 비교연산자(=, >, <, <=, >=) 

     

     - 부서 ID가 50인 직원 ID와 부서ID 출력

    SELECT
        employee_id,
        department_id
    FROM
        employees
    WHERE
        department_id = 50;

     

    2.2.1. 실습

     

     - 직원 테이블에서 급여 5000 이하 인 사람들의 이름과 급여 출력

    SELECT
        last_name,
        salary
    FROM
        employees
    WHERE
        salary <= 5000;

     - 직원 테이블에서 연봉 50000 이상 사람들의 이름과 연봉을 출력 단 연봉은 annSal 출력

    SELECT
        last_name,
        salary * 12 AS annsal
    FROM
        employees
    WHERE
        salary * 12 >= 50000;

     

    2.3 등가 비교 연산자

     

     - 같다  =

     - 같지않다 !=, <>, ^=

     - 부정한다 NOT(부정의 역할, 의미가 반대로 변하게 만들어주는 성질)

    SELECT
        *
    FROM
        employees
    WHERE
        department_id != 50;
    
    SELECT
        *
    FROM
        employees
    WHERE
        department_id <> 50;
    
    SELECT
        *
    FROM
        employees
    WHERE
        department_id ^= 50;
    
    SELECT
        *
    FROM
        employees
    WHERE
        not department_id = 50;

     - NOT의 경우 맨 앞에 사용(부정의 의미).

     - 부서 ID가 50인 것이 '아닌 것'

     

    2.3.1. 실습

     

     - 급여가 10000 미만이 아닌 직원의 이름과 급여를 출력

    SELECT
        FIRST_name,
        employee_id
    FROM
        employees
    WHERE
        not salary < 10000;

    2.4. 논리연산자

     

     - AND 그리고 모든 조건이 True일 때만 True
     - OR 혹은 하나의 조건이 True 이면 True

     

    2.4.1 실습

     

     - JOB_ID가 IT_PROG와 FI_ACCOUNT가 아닌 직원의 이름과 JOB_ID를 출력

    SELECT
        FIRST_name,
        job_id
    FROM
        employees
    WHERE
        job_id != 'IT_PROG'
        AND job_id != 'FI_ACCOUNT';

     

     - 부서 ID가 100이거나 입사일이 16년 2월 2일 이후 입사한 직원의 이름과 입사일 출력

    SELECT
        FIRST_name,
        hire_date
    FROM
        employees
    WHERE
        department_id = 100
        or hire_date > '16/02/02';

     - 부서ID가 100이거나 50인 직원 중에서 연봉 10000 이상 직원의 ID와 이름 그리고 연봉출력(Annsal)

    SELECT
        FIRST_name,
        hire_date,
        salary * 12 as Annsal
    FROM
        employees
    WHERE
     (department_id = 100
     or department_id = 50)
     and salary * 12 >= 10000;

     

     - 부서 아이디가 100이거나 90인 직원 중에서 직원 ID가 101 사람 직원 ID 이름 연봉 출력하기(Annsal)

    SELECT
        FIRST_name,
        salary * 12 as Annsal,
        employee_ID,
        department_id
    FROM
        employees
    WHERE
        (department_id = 100
        or department_id = 90)
        and employee_ID = 101;

     - 먼저 계산을 원하는 부분을 () 처리를 해야 된다.

     - 사칙 순서 and가 순위가 더 높다.

     

    3. is null, is not null

     

     - NULL을 처리할 수 있는 유일한 연산자
     - is null : null 있는지 확인
     - is not null : null이 아닌지 확인

     

    SELECT
        *
    FROM
        employees
    WHERE
        first_name IS NULL;
    
    SELECT
        *
    FROM
        employees
    WHERE
        first_name IS NOT NULL;

     

    3.1. 실습

     

     - 핸드폰 번호가 NULL인 직원의 이름과 핸드폰 번호를 출력

    SELECT
        first_name, phone_number
    FROM
        employees
    WHERE
        phone_number IS NULL;

     - 커미션 비율이 NULL이 아닌 직원의 이름과 커미션 비율 출력

    SELECT
        first_name, commission_pct
    FROM
        employees
    WHERE
        commission_pct IS NOT NULL;

     

    4. IN연산자과 NOT IN연산자

     

    4.1 IN연산자

     

     - IN연산자 > =연산자 + OR연산자

    SELECT
        *
    FROM
        employees
    WHERE
        department_id = 30
        OR department_id = 60
        OR department_id = 90;

     - IN연산자를 사용을 한다면

    SELECT
        *
    FROM
        employees
    WHERE
        department_id IN(30, 60, 90);

     - 줄이는 것이 가능하다.

     - 그러나 NULL이 포함되어 있으면 무시를 한다.

    SELECT
        *
    FROM
        employees
    WHERE
        department_id IN(30, 60, 90, NULL);

     - 이렇게 적어도 NULL은 출력이 되지 않는다.(실제 NULL 데이터 보유)

    SELECT
        *
    FROM
        employees
    WHERE
        department_id = 30
        OR department_id = 60
        OR department_id = 90
        OR department_id = null;

     

     - 풀어서 적으면 NULL은 출력이 되지 않는다.

     - NULL를 정상적으로 출력하려면

    SELECT
        *
    FROM
        employees
    WHERE
        department_id = 30
        OR department_id = 60
        OR department_id = 90
        OR department_id is null;

     - = 과 is는 다르다. is null만 null 출력이 가능하다.

     

    4.2 NOT IN 연산자

     

     - not in : in 조건에 해당하지 않는 데이터 출력
     - not : 부정의 역할, 의미가 반대로 변하게 만들어주는 성질
     - not in 연산자 : <> 연산자와 AND 연산자

    SELECT
        *
    FROM
        employees
    WHERE
        department_id <> 30
        OR department_id <> 50
        OR department_id <> 90;
    SELECT
        department_id
    FROM
        employees
    WHERE
        department_id not IN(30, 50, 90);

      -  not in에 NULL이 포함되어 있으면 어떠한 값도 출력이 되지 않는다.

     

     

     

    5. BEETWEEN

     

     - 범위에 조건을 걸 때 이용

    SELECT
        FIRST_name, salary    
    FROM
        employees
    WHERE salary >= 10000
    and salary < 20000;

     - BEETWEEN 이용 시

    SELECT
        FIRST_name, salary  
    FROM
        employees
    WHERE
        salary BETWEEN 10000 and 19999;

     - BETWEEN(10000 이상 ~ 19999 이하)

     

    5.1 실습

     

     -  2005년에 입사한 직원의 이름과 입사일을 출력

    SELECT
        FIRST_name, hire_date
    FROM
        employees
    WHERE
        hire_date BETWEEN '05/01/01' and '05/12/31';

     

    6. LIKE

     

      - LIKE 특정 조건을 검색할 때 이용
     - 와일드카드 % : 문자대체
     - 칼럼 LIKE '문자%' 해당 문자로 시작하는 데이터 검색
     - 칼럼 LIKE '%문자' 해당 문자로 끝나는 데이터 검색
     - 칼럼 LIKE '%문자%' 해당 문자를 포함하는 데이터 검색
     - 컬럼 LIKE '1__' 1로 시작하는 3글자로 이루어진 데이터 검색
     - 컬럼 LIKE '__1' 1로 끝나는 3글자로 이루어진 데이터 검색

     

    SELECT
        FIRST_NAME
    FROM
        employees
    WHERE
        first_name LIKE 'S%';
        
        SELECT
        FIRST_NAME
    FROM
        employees
    WHERE
        first_name LIKE '%s';
        
            SELECT
        FIRST_NAME
    FROM
        employees
    WHERE
        first_name LIKE '%s%';

    - S로 시작하는 직원 이름

    - s로 끝나는 직원 이름

    - s가 포함된 직원 이름

    SELECT
        employee_ID
    FROM
        employees
    WHERE
        employee_id LIKE '1__';
        
        SELECT
        employee_ID
    FROM
        employees
    WHERE
        employee_id LIKE '__1';
    
        SELECT
        employee_ID
    FROM
        employees
    WHERE
        employee_id LIKE '_1_';

     - 직원 ID에 1로 시작하는 세 글자 찾기

     - 직원 ID에 1로 끝나는 세글자 찾기

     - 직원 ID에  중간에 1이 포함되는 세글자 찾기

     

    6.1 실습

     - 650으로 시작하는 핸드폰 번호 찾기

    SELECT
        phone_number
    FROM
        employees
    WHERE
         phone_number LIKE '650%';

     

     - 이름이 S로 시작하고 N으로 끝나는 직원 찾기

    SELECT
        first_name
    FROM
        employees
    WHERE
         first_name LIKE 'S%'
         AND first_name LIKE '%n';

     - 이름에 두 번째 글자가 e인 직원 찾기

    SELECT
        first_name
    FROM
        employees
    WHERE
         first_name LIKE '_e%';

     - 01월에 입사한 직원 찾기

    SELECT
        first_name
    FROM
        employees
    WHERE
         hire_date LIKE '___01___';

     - '___01%' 똑같이 출력이 가능합니다.

    728x90

    'back-end&DB > SQL(Oracle)' 카테고리의 다른 글

    SQL CREATE와 ALTER 그리고 제약 조건  (0) 2023.05.10
    SQL JOIN  (0) 2023.05.09
    SQL GROUP BY와 HAVING와 ORDER BY  (0) 2023.05.08
    SQL 함수  (0) 2023.05.04
    SQL SELECT절과 FROM절  (0) 2023.05.02
Designed by Tistory.