5월 20일 목요일 (8일차) - 연산자2ㅇ

@_@·2021년 5월 20일
0

Database

목록 보기
13/28

<목차>
ㅇ LIKE 연산자
ㅇ 논리 연산자

  • AND
  • OR
  • NOT

ㅇ 참고자료 <Do it! 오라클로 배우는 데이터베이스 입문>



ㅇ LIKE 연산자

  • 일부 문자열이 포함된 데이터를 조회할 때 사용
  • 와일드 카드
  • %, _ 는 다른 연산자와 사용하면 그냥 원래 문자로 인식★
  • 재작년 정처기 실기문제 : 이씨 성을 가진 자료를 찾아라
    오답 : 이름 = '이%'
    • = 연산자는 그 값 그대로를 찾는 거니까
    • 이름이 이% 인 사람을 찾은 셈이야.

CF. 가장 헷갈려 하는 연산자 중에 하나야

ㅇ % : 길이와 상관없이(문자 없는 경우도 포함) 모든 문자 데이터를 의미

'S%' : S로 시작하는 것을 모두 찾아라
'%S' : S로 끝나는 것을 모두 찾아라
'%S%' : S를 포함하는 것을 모두 찾아라
  • 테이블에 저장된 포맷을 따라야 함
    즉, 현재 테이블의 데이터 포맷을 정확하게 인지하고 있어야 해!

  • 예) 날짜 데이터 03/06/17는 2003년 06월 17일을 의미

    • 날짜에서 / 는 날짜 포맷의 하나의 옵션일 뿐이야
    • 2006을 넣으면 20/06 으로 인식
  • 실습 : 2006년에 입사한 사원의 이름과 날짜 구하기

    • 오답1 : '%2006' (= 20/06 으로 끝나는) = 20월 06일에 입사한 사원 (no row selected. 나옴)
    • 오답2 : '%06' (=06으로 끝나는) = 06일에 입사한 사원 (2 rows selected. 나옴)
    • 정답 : '06%' = 06으로 시작하는 = 06년도 입사한 사원
SELECT last_name, hire_date
FROM employees
WHERE hire_date LIKE '06%'

ㅇ _ (언더바) 어떤 값이든 상관없이 한 개의 문자 데이터를 의미

'_o%' : 앞에서 두 번째 글자가 o인 것을 모두 찾아라
'__a%' : 앞에서 세 번째 글자가 a인 것을 모두 찾아라
'%a_' : 뒤에서 두 번째 글자가 a인 것을 모두 찾아라
'b_' : 두 자리 글자 중, 맨 앞의 글자가 b인 것을 찾아라



ㅇ 논리 연산자

ㅇ AND 연산자

  • 조건이 여러 개라서 WHERE 절에 조건을 추가할 때 사용
  • 조건을 전부 만족할 때 출력
  • AND 뒤에 새로운 조건식 추가해야 해 ★ (가장 많이 틀리는 부분)
    • 예) did= 90 and 50 (X)
      did = 90 AND did = 50 (O) 조건식 전체를 다시 써줘야 해
    • 조건식 = 컬럼 + 연산자 + 값

ㅇ 실습 : 90번 부서에 근무하는 사원 중 급여가 5000 이상인 사람은?

  • 조건1) 90번 부서 근무
  • 조건2) 급여 5000 이상
WHERE department_id = 90
AND salary>= 5000


ㅇ OR 연산자

  • 조건이 여러 개라서 WHERE 절에 조건을 추가할 때 사용
  • 조건을 하나라도 만족하면 출력
  • AND와 용법은 같아

ㅇ 실습 : 급여 10000 이상 이거나 업무 이름 사이에 man 있는 사람은?

  • 조건1) 급여 10000 이상
  • 조건2) 업무 이름 사이에 man 있는 사람
  • 급여 만 이상이면서 맨 안 들어가는 애들도 출력
    업무에 맨 들어가면서 급여 만 안되는 애들도 출력
    (원래 and 실습 예제인데 or에 사용하니 문제의 의미가 없어지긴 하네;;ㅎㅎ 원래 급여 10000 이상이면서 man 붙는 사람이 얼마나 있나 보는 분석이었는데)
WHERE salary>= 10000
OR job_id LIKE '%man%'


ㅇ NOT 연산자

  • 부정하는 연산자
  • 연산자 앞에 사용
    • NULL은 NULL 앞에 사용 ★
WHERE 컬럼 NOT IN (~, ~, ~) : ~, ~, ~ 가 아닌 것 찾기
WHERE 컬럼 NOT BETWEEN A AND B : 이상, 이하를 부정하니까 미만, 초과가 돼
WHERE 컬럼 NOT LIKE '%A%' : %A% 를 가지지 않은 것 찾기
WHERE 컬럼 IS NOT NULL : 값이 있는 것 찾기
  • 단일 연산자 앞에는 NOT 안 써. NOT = , NOT < 이렇게 쓰면 안 돼
    ∵ 얘는 부정 연산자 <>, != 존재하니까
    • 쓸 수 있기는 하지만 오라클 전용 문법은 아니라서 지양해
    • 어떻게 사용하냐면
      WHERE NOT department_id = 90
      컬럼 이름 앞에 NOT을 붙여서 전체를 부정할 때

ㅇ 실습 : 잡 아이디가 ~,~,~가 아닌 사원을 찾아라.

SELECT last_name, job_id
FROM employees
WHERE job_id NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP')

CF. NOT IN 은 모두 아니어야 해

  • ~(p∨q) = ~p∧~q
  • NOT IN (A, B, C) : A도 B도 C도 모두 아니다.



ㅇ 우선순위 규칙

  • 7, 8번은 알아둬 : AND가 OR보다 우선순위가 빨라 (곱하기가 더하기보다 빠른 것처럼)
  • WHERE a
    OR b
    AND c
    순으로 써져 있어도 AND 먼저 처리
  • OR 먼저 처리하고 싶으면 괄호 쓰기
    WHERE (a
    OR b)
    AND c

ㅇ 실습1

  • 조건1) 업무가 'AD_PRES' 이면서 급여 15000 초과
  • 조건2) 업무가 'SA_REP'
SELECT last_name, job_id, salary
FROM employees
WHERE job_id = 'SA_REP'
OR job_id = 'AD_PRES'
AND salary > 15000

  • 실습2
    • 조건1) 업무가 'AD_PRES' 이면서 업무가 'SA_REP'
    • 조건2) 급여 15000 초과
SELECT last_name, job_id, salary
FROM employees
WHERE (job_id = 'SA_REP'
OR job_id = 'AD_PRES') 괄호 잘 챙겨주자!!
AND salary > 15000

profile
STEP BY STEP

0개의 댓글