Oracle SQL - 기타연산자

여름·2020년 12월 11일
0

Oracle SQL

목록 보기
13/13

기타연산자

1) IN 연산자
▹ 질의 탐색을 위해 2개 이상의 표현식(항목)을 지정
▹ OR 연산자로 변환 가능

    (사용형식)

  컬럼명 IN(표현식1, 표현식2, ...)

▹ '컬럼명'에 저장된 값이 ( )안에 기술된 표현식 중 어느 하나와 일치하면 전체조건이 참

2) SOME, ANY 연산자
▹ 기본 기능은 IN연산자와 동일
(사용형식)
컬럼명 관계연산자 ANY|SOME (표현식1, 표현식2, ...)
▹ IN 연산자는 동일성만 판단(=ANY, =SOME)
▹ ANY, SOME은 크기도 비교 가능

3) ALL연산자
▹ 질의 탐색을 위해 2개 이상의 표현식(항목)을 지정
▹ 모든 표현식의 평가 결과가 참이어야 WHERE절이 참이 되는 연산자 (거의 사용되는 경우가 없음)
▹ AND연산자로 변환 가능

    (사용형식)

  컬럼명 ALL (표현식1, 표현식2, ...)

4) EXISTS 연산자
▹ 반드시 뒤에 서브쿼리가 나와야함
(사용형식)
WHERE EXISTS (서브쿼리)

5) BETWEEN 연산자
▹ 범위를 지정하여 조건을 구성하는 경우 사용
▹ 기간을 정해서 무언가를 조회할 때 많이 사용

    (사용형식)

  컬럼명 BETWEEN 값1 AND 값2

▹ 숫자열, 문자열 둘 다 가능
▹ 컬럼명의 값이 '값1'에서 '값2' 사이의 값이 참(true)을 반환

6) LIKE 연산자
▹ 문자열에 사용
▹ 패턴을 비교하는 경우 사용하는 연산자
▹ LIKE를 쓰면 해당되는 모든 자료를 꺼내오기 때문에 효율이 좋지 못함
▹ 쓰기는 간편하지만 부담
▹ 와이드카드(패턴문자열)로 '%'와 ''가 사용
▹ '%' : '%'가 사용된 위치에서 그 이후에 나오는 모든 문자열과 대응
예)
'김%' : '김'으로 시작하는 모든 문자열과 대응
'%김' : '김'으로 끝나는 모든 문자열과 대응
'%김%' : 단어 내부에 '김'이 존재하는 모든 문자열과 대응
▹ '
' : ''가 사용된 위치에서 하나의 문자와 대응
예)
'김
' : '김'으로 시작하고 2글자로 구성되며 두번째 글자는 어느글자든 상관없음
'김' : '김'으로 끝나는 2글자로 구성된 문자열과 대응
'
김_' : '김'

Q. 사원 테이블에서 부서코드가 20, 60, 80번 부서에 속한 사원을 검색하시오. Alias는 사원번호, 사원명, 부서코드, 급여

IN 연산자)

(IN 연산자 사용하지 않은 경우)

   SELECT EMPLOYEE_ID AS 사원번호,
          EMP_NAME AS 사원명,
          DEPARTMENT_ID AS 부서코드,
          SALARY AS 급여
     FROM EMPLOYEES
    WHERE DEPARTMENT_ID=20 OR DEPARTMENT_ID=60 OR DEPARTMENT_ID=80
    ORDER BY DEPARTMENT_ID ASC

** ASC 오름차순 / DESC 내림차순

(IN 연산자 사용하는 경우)

    SELECT EMPLOYEE_ID AS 사원번호,
           EMP_NAME AS 사원명,
           DEPARTMENT_ID AS 부서코드,
           SALARY AS 급여
      FROM EMPLOYEES
     WHERE DEPARTMENT_ID IN(20,60,80)
     ORDER BY 3;

ANY 연산자)

    SELECT EMPLOYEE_ID AS 사원번호,
           EMP_NAME AS 사원명,
           DEPARTMENT_ID AS 부서코드,
           SALARY AS 급여
      FROM EMPLOYEES
     WHERE DEPARTMENT_ID AND(20, 60, 80)
     ORDER BY 3;

SOME 연산자)

    SELECT EMPLOYEE_ID AS 사원번호,
           EMP_NAME AS 사원명,
           DEPARTMENT_ID AS 부서코드,
           SALARY AS 급여
      FROM EMPLOYEES
     WHERE DEPARTMENT_ID SOME(20, 60, 80)
     ORDER BY 3;

Q. 회원테이블에서 직업이 공무원인 회원이 가진 마일리지보다 더 많은 마일리지를 보유한 회원을 조회하시오.

Alias 회원번호, 회원명, 직업, 마일리지 (직업이 공무원인 회원의 마일리지

(갑자기 여기에서 뜬금없이 서브쿼리를 사용 🤷‍♂️)
서브쿼리 실행 후 메인쿼리가 실행된다.

/*먼저 서브쿼리 안에 들어갈 내용을 작성*/
    SELECT MEM_NAME, MEM_MILIEAGE
      FROM MEMBER
     WHERE MEM_JOB = '공무원'
     ORDER BY MEM_MILEAGE DESC;
     
/*메인 쿼리 작성 1)IN 연산자*/
    SELECT MEM_ID AS 회원번호,
           MEM_NAME AS 회원명,
           MEM_JOB AS 직업,
           MEM_MILEAGE AS 마일리지
      FROM MEMBER
     WHERE MEM_MILEAGE IN (SELECT MEM_MILEAGE
                             FROM MEMBER
                            WHERE MEM_JOB = '공무원') --IN은 ( )와 같은 값을 가지면 참
                            
/*메인 쿼리 작성 2)ANY 연산자*/
    SELECT MEM_ID AS 회원번호,
           MEM_NAME AS 회원명,
           MEM_JOB AS 직업,
           MEM_MILEAGE AS 마일리지
      FROM MEMBER
     WHERE MEM_MILIEAGE > ANY (SELECT MEM_MILEAGE
                                 FROM MEMBER
                                WHERE MEM_JOB = '공무원') --ANY는 4가지 중 하나라도 만족하면 참    

Q. 사원테이블에서 부서번호가 30, 50, 80부서에 속하지 않은 사원을 조회하시오.
Alias 사원번호, 사원명, 부서번호, 입사일

    SELECT EMPLOYEE_ID AS 사원번호,
           EMP_NAME AS 사원명,
           DEPARTMENT_ID AS 부서번호,
           HIRE_DATE AS 입사일
      FROM EMPLOYEES
     WHERE NOT DEPARTMENT_ID = ANY(30, 50, 80)
   --WHERE DEPARTMENT_ID NOT IN(30, 50, 80)   --둘 중 어느 것을 사용해도 상관없음
     ORDER BY DEPARTMENT_ID;

Q. 회원테이블에서 여성회원이고 마일리지 3000이상인 회원정보를 조회하시오.
Alias 회원번호, 회원명, 주민번호, 직업, 마일리지

   SELECT MEM_ID AS 회원번호,
          MEM_NAME AS 회원명,
          MEM_REGNO1|| '-' || MEM_REGNO2 AS 주민번호,
          MEM_JOB AS 직업,
          MEM_MILEAGE AS 마일리지
     FROM MEMBER
    WHERE SUBSTR(MEM_REGNO2,1,1) IN (2,4)    --SUBSTR : 문자열 추출
      AND MEM_MILEAGE >= 3000;

Q. 상품테이블(PROD)에서 분류코드(PROD_LGU)가 'P102'이고 판매가격(PROD_PRICE)이
10만원 이상인 상품을 조회하시오.
Alias 상품코드, 상품명, 분류코드, 판매가격

    SELECT PROD_ID AS 상품코드,
           PROD_NAME AS 상품명,
           PROD_LGU AS 분류코드,
           PROD_PRICE AS 판매가격
      FROM PROD
     WHERE PROD_LGU = 'P102'
       AND PROD_PRICE>=100000;
      

Q. 장바구니 테이블에서 2005년 7월 1일 ~ 7월 15일 판매정보를 조회하시오.
Alias 장바구니번호, 회원번호, 수량
단, 구매수량이 많은 것부터 출력(ORDER BY 사용)

    SELECT CART_NO AS 장바구니번호,
           CART_MEMBER AS 회원번호,
           CART_QTY AS 수량
      FROM CART
     WHERE SUBSTR(CART_NO,1,8) > '20050701' AND SUBSTR(CART_NO,1,8)<'20050715'
     ORDER BY 3 DESC;

0개의 댓글