Oracle 7강 - 연산자

Whatever·2021년 9월 14일
0

기초 ORACLE

목록 보기
6/27

연산자

  • 사칙연산자(+,-,/,*) -> 나머지 연산자는 다른 용도로 사용됨.
  • 관계연산자(>,<,>=,<=,!=(<>)) -> WHERE절에 조건을 나타낼 때 사용됨.
  • 논리연산자(not, and, or)
  • 기타연산자(IN, ANY, SOME, ALL, EXISTS, LIKE, BETWEEN)
  • 문자열 결합 연산자: '||'

! : 1의 보수를 구하는 연산자(=NOT의 의미)

다중행 서브쿼리 - 일반 관계연산자나 논리연산자 사용 불가능
-> 이 때 사용하는 게 IN, ANY, SOME 등

EXISTS : 뒤에 서브쿼리가 나와야 함.
LIKE : 패턴을 비교할 때 쓰는 것 - 문자열 비교시 사용, 날짜타입 사용금지(ex. 거주지가 대전인 사람을 추출해라.)
BETWEEN : 어미를 지정해서 비교할 때 사용, 날짜, 숫자, 문자 모두 비교할 수 있음.(AND 연산자와 함께사용.)
|| : 문자열을 합쳐줌.

** ORACLE은 숫자가 가장 우선순위가 높음.

  1. 사칙연산자, 관계연산자, 논리연산자
  • WHERE 절의 조건문 구성에 사용

사용예) 회원테이블에서 마일리지가 3000 이상인 회원들을 조회하시오
조회할 컬럼은 회원번호, 회원명, 주소, 나이, 마일리지이다.

    SELECT MEM_ID AS 회원번호,
    	MEM_NAME AS 회원명,
        MEM_ADD1 ||' '||MEM_ADD2 AS 주소
        EXTRACT(YEAR FROM SYSDATE)-EXTRACT(YEAR FORM MEM_BIR) AS 나이
        MEM_MILEAGE AS 마일리지
     FROM MEMBER
    WHERE MEM_MILEAGE>=3000; 

줄을 선택 : WHERE 절(줄의 갯수 선택) / 열을 선택 : SELECT 절
회원테이블, 마일리지 3000이상

WHERE절 부터 수행 - WHERE절이 참일때만 SELECT절이 수행됨
참일 때 - 리스트업
거짓일 때 - 패스

FROM keyword not found where expected 에러메시지 : 컬럼 별칭에 공백을 썼거나, 콤마를 생략할 때 나옴.

사용예) 상품테이블에서 매입가가 10만원 이상인 상품을 조회하시오
Alias는 상품코드,상품명,매입가,거래처명

  SELECT A.PROD_ID AS 상품코드,
          A.PROD_NAME AS 상품명,
          A.PROD_COST AS 매입가,
          B.BUYER_NAME AS 거래처명
     FROM PROD A, BUYER B
    WHERE A.PROD_COST>=100000 -- 테이블을 두 개 가져올 때 A와 B로 바꿔줌
    AND A.PROD_BUYER=B.BUYER_ID;
      
      

다른 계정에서 테이블을 불러오려면 HR.TABLE명으로 써야함.

사용예) 사원테이블에서 급여가 5000이상 10000이하인 사원을 조회하시오
Alias는 사원번호,사원명,입사일,부서코드,급여 --HR의 테이블을 참조하려면 HR.TABLE명 으로 사용할 수 있음

      SELECT EMPLOYEE_ID AS 사원번호,
             FIRST_NAME||' '||LAST_NAME AS 사원명,
             HIRE_DATE AS 입사일,
             DEPARTMENT_ID AS 부서코드,
             SALARY AS 급여
        FROM HR.EMPLOYEES
       WHERE SALARY>=5000 AND SALARY<=10000;
       (WHERE SALARY BETWEEN 5000 AND 10000 같은 의미)
       ORDER BY 4, SALARY DESC;  -- 부서코드가 작은 값에서 큰 값 순으로 정렬, 그 중 급여가 많은 순으로 정렬

사용예) 2005년 1월 매입정보를 조회하시오
Alias는 일자,상품코드,매입수량,매입단가,금액

   SELECT BUY_DATE AS 일자,
          BUY_PROD AS 상품코드,
          BUY_QTY AS 매입수량,
          BUY_COST AS 매입단가,
          BUY_QTY*BUY_COST AS 금액
     FROM BUYPROD
    WHERE EXTRACT(YEAR FROM BUY_DATE) = '2005' AND EXTRACT(MONTH FROM BUY_DATE) = '01';
    -- WHERE BUY_DATE>=TO_DATE('20050101') AND BUY_DATE<=TO_DATE('20050131')
    ORDER BY 1;
    

날짜를 바꾸는 방법은 여러가지가 있음
TO_DATE(' ')로 날짜형 데이터로 변경하는 방법

사용예)회원테이블에서 직업이 주부이면서 마일리지가 3000이상인 회원을 조회하시오.
Alias는 회원번호,회원명,직업,마일리지

 SELECT MEM_ID AS 회원번호,
        MEM_NAME AS 회원명,
        MEM_JOB AS 직업,
        MEM_MILEAGE AS 마일리지
   FROM MEMBER
  WHERE MEM_JOB ='주부' AND MEM_MILEAGE >= 3000; 
  
  1. 기타연산자(IN, ANY, SOME, EXISTS, ALL, BETWEEN, LIKE)
    1) IN 연산자
    - 하나의 컬럼과 다수 개의 데이터를 비교하여 그 중 어느 하나라도 일치하면 전체 결과가 참(TRUE)이 됨.
    -=ANY, =SOME으로 치환될 수 있음 -- ANY와 SOME은 앞에 등호가 꼭 와야함. 나머지는 모두 똑같음
    -OR 연산자로 치환 가능
    (사용형식)
    expr IN(값1[, 값2,...])
    . 연속적이지 않은 값들을 비교하는 경우 주로 사용

사용예) 사원테이블에서 부서번호 10-30번 부서의 사원번호를 조회하시오
Alias는 사원번호, 사원명, 부서번호, 직무코드 => 이 경우 IN 연산자보다 BETWEEN 또는 AND 연산자가 효율적임.

 (AND 연산자 사용)
     SELECT EMPLOYEE_ID AS 사원번호,
            FIRST_NAME||' '||LAST_NAME AS 사원명,
            DEPARTMENT_ID AS 부서번호,
            JOB_ID AS 직무코드
       FROM HR.EMPLOYEES
      WHERE DEPARTMENT_ID>='10' AND DEPARTMENT_ID <='30'
      ORDER BY 3;
    
    (BETWEEN 연산자 사용)
   SELECT EMPLOYEE_ID AS 사원번호,
          FIRST_NAME||' '||LAST_NAME AS 사원명,
          DEPARTMENT_ID AS 부서번호,
          JOB_ID AS 직무코드
     FROM HR.EMPLOYEES
    WHERE DEPARTMENT_ID BETWEEN '10' AND '30'
    ORDER BY 3;
    
    (IN 연산자 사용)  
   SELECT EMPLOYEE_ID AS 사원번호,
          FIRST_NAME||' '||LAST_NAME AS 사원명,
          DEPARTMENT_ID AS 부서번호,
          JOB_ID AS 직무코드
     FROM HR.EMPLOYEES
    WHERE DEPARTMENT_ID IN(10,20,30)
    ORDER BY 3;
    
    (OR 연산자 사용)
   SELECT EMPLOYEE_ID AS 사원번호,
          FIRST_NAME||' '||LAST_NAME AS 사원명,
          DEPARTMENT_ID AS 부서번호,
          JOB_ID AS 직무코드
     FROM HR.EMPLOYEES
    WHERE DEPARTMENT_ID =10
       OR DEPARTMENT_ID =20
       OR DEPARTMENT_ID =30         
    ORDER BY 3;
    
    

사용예2) 사원테이블에서 부서번호 30,70,90,100번부서의 사원정보를 조회하시오
Alias는 사원번호,사원명,부서번호,직무코드 =>이 경우 IN 연산자가 다른 연산자보다 더 효율적임(불특정하거나 규칙적이지 않을 때)

   (IN 연산자 사용)
   SELECT EMPLOYEE_ID AS 사원번호,
          FIRST_NAME||' '||LAST_NAME AS 사원명,
          DEPARTMENT_ID AS 부서번호,
          JOB_ID AS 직무코드
     FROM HR.EMPLOYEES
    WHERE DEPARTMENT_ID IN(30,70,90,100)
    ORDER BY 3;
       
    (OR 연산자 사용)
   SELECT EMPLOYEE_ID AS 사원번호,
          FIRST_NAME||' '||LAST_NAME AS 사원명,
          DEPARTMENT_ID AS 부서번호,
          JOB_ID AS 직무코드
     FROM HR.EMPLOYEES
    WHERE DEPARTMENT_ID = 30
       OR DEPARTMENT_ID = 70
       OR DEPARTMENT_ID = 90
       OR DEPARTMENT_ID = 100
    ORDER BY 3; 
    
    (=SOME, =ANY 연산자 사용)
   SELECT EMPLOYEE_ID AS 사원번호,
          FIRST_NAME||' '||LAST_NAME AS 사원명,
          DEPARTMENT_ID AS 부서번호,
          JOB_ID AS 직무코드
     FROM HR.EMPLOYEES
    WHERE DEPARTMENT_ID =ANY(30,70,90,100)
    ORDER BY 3;
    

사용예)사원의 수가 5명 이상인 부서에 속한 사원들을 조회하시오
Ailas는 사원번호, 사원명, 부서코드

  SELECT EMPLOYEE_ID AS 사원번호, 
         FIRST_NAME||' '||LAST_NAME AS 사원명, 
         DEPARTMENT_ID AS 부서코드
    FROM HR.EMPLOYEES
   WHERE DEPARTMENT_ID IN(SELECT A.DID
                          FROM (SELECT DEPARTMENT_ID AS DID,
                                       COUNT(*) AS CNT
                                  FROM HR.EMPLOYEES  
                              GROUP BY DEPARTMENT_ID
                          HAVING COUNT(*)>=5) A) 
  ORDER BY 3;                 

0개의 댓글

관련 채용 정보