Oracle - SELECT 내 WHERE절

갓김치·2020년 8월 11일
0

Oracle

목록 보기
11/33
post-thumbnail

참조

2020-08-11-01)SELECT내 WHERE절.sql
2020-08-12-01)LIKE_BETWEEN.sql

  • 일반조인이나 조인조건을 기술하는 절
  • HAVING 은 일반조건 처리불가
  • 관계연산자 (>, <, =, >=, <=, !=(<>))

조건

관계 연산자

  • 개발언어의 IF문에 사용되는 조건문과 동일
  • '> , <, >=, <=, !=(<>), = 사용

논리연산자 - NOT(!), AND, OR

  • 복수개의 조건문을 구성

기타 연산자

  • ANY, SOME, IN, ALL, EXISTS 등이 제공됨
  • ANY, SOME = (=IN)
    • IN에는 관계연산자 = 가 붙지 않음
  • ALL : 전체 조건이 만족되어야함
  • EXISTS : 반드시 뒤에 서브쿼리가 나와야함

예시

1. 회원테이블(MEMBER)에서 출생년도가 1973년도 이후 출생한 회원을 조회하시오.

  • 단, Alias는 회원번호, 회원명, 주민등록번호이다.

1-1. MEM_REGNO1 (CHAR) 을 조건문에 사용

1-2. MEM_BIR (DATE) 을 조건문에 사용

  • 생일 =/= 주민번호 이어서 결과값이 다름

2. 사원테이블(EMPLOYEES)에서 급여(SALARY)가 5000이상이고 부서코드(DEPARTMENT_ID)가 80번인 사원을 조회하시오.

  • 단, Alias는 사원번호, 사원명, 부서코드, 급여, 전화번호

3. 사원테이블에서 30, 40, 60번부서에 속한 사원정보를 조회하시오.

  • 단, Alias는 사원명, 부서코드, 부서명, 직무명

1-1. OR 연산자 사용

  • JOIN 발생 시 조건 수 = 최소 (JOIN테이블 수 - 1개) 이상

1-2. IN 연산자 사용

  • 사용형식: 컬럼명(표현식) IN (값1,값2,값3...)
  • 컬럼의 값이 복수개로 주어진 값 중 어느 하나와 일치하면 전체가 참(TRUE)을 반환
  • OR 연산자와 호환가능
  • ANY(SOME) 연산자로 변환할 때 관계연산자 추가

  • 1-1. OR 연산자 결과와 같음

1-3. ANY(SOME) 연산자

  • 사용형식: 컬럼명(표현식) 관계연산자 ANY(SOME) (값1, 값2, ...)
  • 컬럼의 값이 복수개로 주어진 값 중 어느 하나와 일치하면 전체가 참(TRUE)을 반환
  • OR 연산자로 변환 가능
  • IN 연산자로 변환할 때 관계연산자 생략

  • 1-1. OR 연산자 결과와 같음

NULL 조건식

  • NULL 값의 비교는 관계연산자('=')로 비교할 수 없음
  • IS NULL, IS NOT NULL

예시

사원테이블(EMPLOYEES)에서 영업실적코드(COMMISSION_PCT)가 NULL이 아닌 사원을 조회하시오

  • 단, Alias는 사원이름, 부서코드, 영업실적

사원테이블(EMPLOYEES)에서 보너스를 지급하여 급여액을 조회하시오

  • 보너스=본봉(SALARY) * 영업실적 / 지급액=본봉+보너스
  • 단, Alias는 사원명, 본봉, 보너스, 지급액

널처리 함수 미사용

널처리 함수 사용

  • NVL(해당값,숫자) -- 해당값이 NULL이면 숫자로 출력

LIKE 연산자

  • 문자열 비교시에만 사용
  • 많이 사용되지만, 많이 쓰면 실행속도 느려짐
  • 패턴비교 연산
  • 와일드카드 : '%'와 '_'
    • '%' : 사용된 위치 이후의 모든 문자열과 대응 (모든 문자열: NULL, 공백도 포함)
      ex) '김%' -> '김'으로 시작하는 모든 문자열과 대응
    • '_' : 사용된 위치에서 한글자와 대응
      ex) '홍_동' -> 첫글자가 '홍'이고 3글자로 구성되고, 마지막 글자가 '동'인 문자열과 대응

예시

회원테이블에서 거주지가 '서울'인 회원을 조회하시오.

  • 단, Alias는 회원번호, 회원명, 성별,주소, 마일리지
  • 주소는 상세주소까지 출력

문제

1. 매입테이블(BUYPROD)에서 2005년 5~6월에 매입한 전자제품(P102)매입 현황을 조회하시오

  • 단, Alias는 날짜, 제품코드, 수량, 단가, 금액이다.

ORDER 적용

BETWEEN ~ AND 조건식

  • 사용형식: 컬럼명|수식 BETWEEN 값1 AND 값2
    • '컬럼명|수식'에 저장된 값이 '값1'에서 '값2' 사이의 값이면 참(TRUE)을 반환
  • 범위를 지정하여 비교하는 경우 사용
  • AND(논리연산자)를 대신하여 사용 가능
  • 문자열, 숫자, 날짜 타입 모두에 적용 가능

예시

장바구니테이블(CART)에서 2005년 6월 회원별 구매현황을 조회하시오

  • 단, Alias는 회원번호, 회원명, 구매금액합계
  • 회원별 = 회원으로 GROUPING

  • 일반컬럼 + 집계함수가 나왔는데 GROUP BY가 안나오면 오류임

문제

사원테이블에서 급여가 5000~12000사이의 사원정보를 조회하시오

  • 단, Alias는 사원번호, 사원명, 급여, 직무코드

profile
갈 길이 멀다

0개의 댓글