[SQL] 연산자 - 3. 논리연산자

LHR·2022년 5월 11일

SQL

목록 보기
11/11

연산자의 종류

  • 산술연산자
    • 사칙연산자
  • 관계연산자(조건식구성)
    • 부등호
    • WHERE절에서 CASE WHEN THEN
  • 논리연산자
    • AND, OR, NOT
    • 연산순사 NOT→AND→OR
  • 기타연산자
    • IN, ANY/SOME, ALL, BETWEEN, LIKE(문자열만!)

3. 논리연산자

  • 두 개 이상의 조건식의 평가(AND, OR)나 또는 특정 조건식의 부정(NOT)의 결과를 반환 --NOT은 토글(한영키처럼 누를때마다 반전되는거). 데이터가 하나인 단항연산자.
  • 진리표
    0OFF 1ON
    입력값출력값
    XYANDOR
    0000
    0101AND일때는 둘 다 1이어야 1 EX)직렬
    1001OR일때는 둘 중 하나만 1이어도 1 EX)병렬
    1111
    +연산순서는 NOT->AND->OR (괄호로 순서바꿀수있음)

(사용예)회원테이블에서 회원의 출생년도를 추출하여 윤년과 평년을 구별하여 출력하시오. Alias는 회원번호,회원이름,출생년월일, 비고 **윤년 = 4의 배수이며 100의 배수가 아니거나 400배의 배수가 되는 해
--모든 회원 대상이라 WHERE조건절 없음
--MOD 나머지를 구하는 함수, EXTRACT 특정정보추출
SELECT MEM_ID AS 회원번호,
       MEM_NAME AS 회원이름,
       MEM_BIR AS 출생년월일,
       CASE WHEN (MOD(EXTRACT(YEAR FROM MEM_BIR),4)=0) AND (MOD(EXTRACT(YEAR FROM MEM_BIR),100)!=0) OR
                      (MOD(EXTRACT(YEAR FROM MEM_BIR),400)=0)THEN
                      '윤년'
            ELSE
                      '평년'
       END AS 비고
  FROM MEMBER;

총 24명


사원테이블에 EMP_NAME VARCHAR2(80)컬럼을 추가하고 FIRST_NAME과 LAST_NAME을 결합하여 EMP_NAME에 저장하시오
1)컬럼을 추가 & 결합
  ALTER TABLE HR.employees
    ADD EMP_NAME VARCHAR2(80);
  
  UPDATE HR.employees
     SET EMP_NAME=FIRST_NAME||' '||LAST_NAME;
     
     COMMIT;
     
  SELECT * FROM HR.employees;  

(사용예)사원테이블에서 10부서에서 50번부서에 속한 사원정보를 조회하시오.
Alias는 사원번호,사원명,부서번호,입사일,직책코드이며 부서번호순으로 출력하시오.

  1)부서코드 10~50
      SELECT EMPLOYEE_ID AS 사원번호,
             EMP_NAME AS 사원명,
             DEPARTMENT_ID AS 부서번호,
             HIRE_DATE AS 입사일,
             JOB_ID AS 직책코드
        FROM HR.employees
       WHERE DEPARTMENT_ID>=10 AND DEPARTMENT_ID<=50  
-- DEPARTMENT_ID BETWEEN 10 AND 50 --이렇게 코드 써도됨
       ORDER BY 3; --부서번호순                                  
  • 범위를 표현할 때 10<=부서번호<=50 -불가능
  • DEPARTMENT_ID>=10 AND DEPARTMENT_ID<=50

💡 GROUP BY 뒤에 기술된 컬럼 기준으로 집계를 내는데 사용.
SELECT절의 집계함수와 컬럼이 반드시 같이 사용
집계함수 : SUM() MAX() MIN() AVG() COUNT()



(사용예)장바구니테이블(CART)에서 2020년 6월 제품별 판매수량집계를 조회하시오.
출력은 제품코드, 제품명, 판매수량합계, 판매금액합계이며 판매금액이 많은 순으로 출력하시오.
      SELECT A.CART_PROD AS 제품코드,
             B.PROD_NAME AS 제품명,
             SUM(A.CART_QTY) AS 판매수량합계,
             SUM(A.CART_QTY*B.PROD_PRICE) AS 판매금액합계 --수량*단가
        FROM CART A,PROD B                 --CART 테이블 별칭 A. 테이블은 AS필요없음 (설명노션)
       WHERE A.CART_PROD=B.PROD_ID   --JOIN조건
        AND /*1번*/ SUBSTR(A.CART_NO,1,8)>='20200601' AND
             SUBSTR(A.CART_NO,1,8)>='20200630' 
             /*--2번 SUBSTR*SUBSTR(A.CART_NO,1,6)='203006'
             /*3번 A.CART_NO LIKE'202006%' */ -- GROUP BY 뒤에 기술된 컬럼 기준으로 집계를 내는데 사용
      GROUP BY A.CART_PROD,B.PROD_NAME 
      ORDER BY 4 DESC; --4번째줄을 많->작 출력


0개의 댓글