본문 바로가기
IT/SQL

SQL 정리6

by 김보리 2021. 11. 30.
728x90
반응형

2021-0615-01) 2) 관계연산자

  • 대소관계를 비교할 때 사용되는 연산자
  • , <, >=, <=, =, !=(<>)
  • 조건절 구성에 사용(where 절)
    사용예) 사원테이블에서 사원의 이름, 입사일, 부서코드, 급여를 조회하시오
    SELECT FIRST_NAME|| ' ' || LAST_NAME AS 이름,
           HIRE_DATE AS 입사일,
           DEPARTMENT_ID AS 부서코드,
           JOB_ID AS 직무코드,
           SALARY AS 급여
      FROM HR.EMPLOYEES -- WHERE절 없을 시 전부 출력 가능
    ORDER BY 3;

    사용예) 사원테이블에서 급여가 5000이상인 사원의 이름, 입사일, 부서코드, 급여를 조회하시오
    SELECT FIRST_NAME|| ' ' || LAST_NAME AS 이름,
           HIRE_DATE AS 입사일,
           DEPARTMENT_ID AS 부서코드,
           JOB_ID AS 직무코드,
           SALARY AS 급여
      FROM HR.EMPLOYEES -- WHERE절 없을 시 전부 출력 가능
      WHERE SALARY >= 5000 -- 급여가 5000 이상인 사람만 출력
    ORDER BY 3;

    사용예) 사원테이블에서 급여가 5,000이상 10,000이하인 사원의 이름, 입사일, 부서코드, 급여를 조회하시오
    SELECT FIRST_NAME|| ' ' || LAST_NAME AS 이름,
           HIRE_DATE AS 입사일,
           DEPARTMENT_ID AS 부서코드,
           JOB_ID AS 직무코드,
           SALARY AS 급여
      FROM HR.EMPLOYEES -- WHERE절 없을 시 전부 출력 가능
      WHERE 10000 >= SALARY AND SALARY >= 5000 -- 급여가 5000 이상, 10000 이하인 사람만 출력
    ORDER BY 3;

    ** 테이블 삭제 : DROP : DRAP TABLE 테이블명;
    DROP TABLE TEMP01;
    DROP TABLE TEMP02;
    DROP TABLE TEMP03;
    DROP TABLE TEMP04;
    DROP TABLE TEMP05;
    DROP TABLE TEMP06;
    DROP TABLE TEMP07;
    DROP TABLE TEMP08;
    DROP TABLE TEMP09;

    사용예) 회원테이블에서 마일리지가 3000이상인 회원의 회원번호, 회원명, 주소, 직업, 마일리지를 조회하시오
           -- SELECT 문 실행 순서 : (1) FROM -> (2) WHERE -> (3) SELECT
           SELECT MEM_ID AS 회원번호,
                  MEM_NAME AS 회원명,
                  MEM_ADD1||' '||MEM_ADD2 AS 주소, -- || : 문자열 연산자
                  MEM_JOB AS 직업,
                  MEM_MILEAGE AS 마일리지
             FROM MEMBER
            WHERE MEM_MILEAGE >= 3000; -- SELECT에서 별칭을 부여했지만, WHERE절에서 인식X

    사용예) 회원테이블에서 마일리지가 3000이상인 여성회원의 회원번호, 회원명, 주소, 직업, 마일리지를 조회하시오
           -- SELECT 문 실행 순서 : (1) FROM -> (2) WHERE -> (3) SELECT
           SELECT MEM_ID AS 회원번호,
                  MEM_NAME AS 회원명,
                  MEM_ADD1||' '||MEM_ADD2 AS 주소, -- || : 문자열 연산자
                  MEM_JOB AS 직업,
                  MEM_MILEAGE AS 마일리지
             FROM MEMBER
            WHERE MEM_MILEAGE >= 3000 -- SELECT에서 별칭을 부여했지만, WHERE절에서 인식X
                AND SUBSTR(MEM_REGNO2,1,1) IN ('2','4'); -- 주민번호 뒷자리의 1번째 숫자가 2 또는 4인 경우

    사용예) 회원테이블에서 마일리지가 3000이상인 여성회원이며, 대전에 거주하는 회원의 회원번호, 회원명, 주소, 직업, 마일리지를 조회하시오
           -- SELECT 문 실행 순서 : (1) FROM -> (2) WHERE -> (3) SELECT
           SELECT MEM_ID AS 회원번호,
                  MEM_NAME AS 회원명,
                  MEM_ADD1||' '||MEM_ADD2 AS 주소, -- || : 문자열 연산자
                  MEM_JOB AS 직업,
                  MEM_MILEAGE AS 마일리지
             FROM MEMBER
            WHERE MEM_MILEAGE >= 3000 -- SELECT에서 별칭을 부여했지만, WHERE절에서 인식X
                AND SUBSTR(MEM_REGNO2,1,1) IN ('2','4') -- 주민번호 뒷자리의 1번째 숫자가 2 또는 4인 경우
                AND MEM_ADD1 LIKE '대전%'; -- 주소에 대전이 들어갈 경우
           --   AND SUBSTR(MEM_ADD1,1,2) IN ('대전'); -- 주소의 앞부분 1번째부터 2번째까지 대전인 경우

 3) 논리연산자(NOT, AND, OR)
    - 두개 이상의 조건을 결합하거나(AND, OR) 논리 부정(NOT) 연산 수행
    ----------------------------
       0 : FALSE   1 : TRUE
      A    B    결과  AND  OR
      0    0          0    0
      0    1          0    1
      1    0          0    1
      1    1          1    1
    ----------------------------
    OR : ~거나, 또는, 혹은 AND : ~고, ~이고, ~면서(범위 지정할 때 사용)
    사용예) 회원테이블에서 직업이 주부이거나 학생인 회원정보를 조회하시오
        Alias는 회원번호, 회원명, 직업, 마일리지
        SELECT MEM_ID AS 회원번호,
               MEM_NAME AS 회원명,
               MEM_JOB AS 직업,
               MEM_MILEAGE AS 마일리지
          FROM MEMBER
         WHERE MEM_JOB = '주부' OR MEM_JOB = '학생';
      -- WHERE MEM_JOB IN ('주부','학생');

    사용예) 회원테이블에서 직업이 주부이면서 마일리지가 3000 이상인 회원정보를 조회하시오
        Alias는 회원번호, 회원명, 직업, 마일리지
        SELECT MEM_ID AS 회원번호,
               MEM_NAME AS 회원명,
               MEM_JOB AS 직업,
               MEM_MILEAGE AS 마일리지
          FROM MEMBER
         WHERE MEM_JOB = '주부'
               AND MEM_MILEAGE >= 3000;

    사용예) 회원테이블에서 마일리지가 2000에서 5000사이의 값을 보유한 회원정보를 조회하시오
        Alias는 회원번호, 회원명, 직업, 마일리지
        SELECT MEM_ID AS 회원번호,
               MEM_NAME AS 회원명,
               MEM_JOB AS 직업,
               MEM_MILEAGE AS 마일리지
          FROM MEMBER
         WHERE MEM_MILEAGE BETWEEN 2000 AND 5000; -- 문자도 가능 ex) BETWEEN '김' AND '최'
         -- MEM_MILEAGE >= 2000 AND MEM_MILEAGE <= 5000;

    사용예) 미국 이외의 지역에서 근무하는 사원정보를 조회하시오
           Alias는 사원명, 부서, 근무지역
           SELECT A.FIRST_NAME||' '||A.LAST_NAME AS 사원명,
                  B.DEPARTMENT_ID AS 부서,
                  D.COUNTRY_NAME 근무지역
             FROM HR.EMPLOYEES A, HR.DEPARTMENTS B, HR.LOCATIONS C, HR.COUNTRIES D -- 테이블명 A, B, C, D로 별칭 부여

            WHERE A.DEPARTMENT_ID = B.DEPARTMENT_ID -- A테이블과 B테이블과 연결
                AND B.LOCATION_ID = C.LOCATION_ID -- B테이블과 C테이블 연결
                AND C.COUNTRY_ID = D.COUNTRY_ID -- C테이블과 D테이블 연결
                AND C.COUNTRY_ID != 'US'; -- 근무지역이 US가 아닌 사원정보 조회

 4) 기타연산자
    가) IN
        - 질의 탐색을 위해 사용될 둘 이상의 표현식을 지정
        - ANY, SOME 연산자로 변경 가능(관계연산자 ANY (SOME) => IN)
            사용형식)
                expr IN (값1, 값2, ... 값n)
                  - expr이 값1 ~ 값n 중에 어느 하나와 일치하면 전체가 참이됨
                  - OR 연산자나 =ANY, =SOME으로 치환 가능

                  SELECT 12345/113 FROM DUAL;

  1. 함수 : 모든 사람들이 똑같은 목적으로 사용 SELECT, WHERE 사용가능
    • 미리 작성하고 컴파일하여 실행 가능한 상태의 서브프로그램
    • 네트워크의 트래픽을 감소시킴

2021-0615-02) 4) 기타연산자 가) IN 연산자

  • 주어진 값 중 어느 하나와 일치하면 참(TRUE)을 반환하는 연산자
  • =ANY, =SOME 이나 OR 연산자로 친환 가능
  • 관계연산자 ANY (SOME) => IN
  • 불연속적인 값의 비교에 주로 사용
  • 서브쿼리가 사용되는 경우 서브쿼리의 결과가 다중행을 반환하는 경우에는 반드시 IN 연산자를 사용해야 함
  • 질의 탐색을 위해 사용될 둘 이상의 표현식을 지정 사용형식) expr IN (값1,값2[,값3,...,값n])
  • expr이 값1 ~ 값n 중에 어느 하나와 일치하면 전체가 참이됨
  • OR 연산자나 =ANY, =SOME으로 치환 가능
        사용예) 사원테이블에서 부서코드가 20, 50, 90번 부서에 소속된 사원의 사원번호, 사원명, 부서코드, 급여를 조회하시오.
            (IN 연산자를 사용하지 않은 경우)
            SELECT EMPLOYEE_ID AS 사원번호,
                   FIRST_NAME||' '||LAST_NAME AS 사원명,
                   DEPARTMENT_ID AS 부서코드,
                   SALARY AS 급여
              FROM HR.EMPLOYEES
             WHERE DEPARTMENT_ID = 20 OR DEPARTMENT_ID = 50 OR DEPARTMENT_ID = 90;

            (IN 연산자를 사용한 경우)
            SELECT EMPLOYEE_ID AS 사원번호,
                   FIRST_NAME||' '||LAST_NAME AS 사원명,
                   DEPARTMENT_ID AS 부서코드,
                   SALARY AS 급여
              FROM HR.EMPLOYEES
             WHERE DEPARTMENT_ID IN (20, 50, 90);

             (ANY(SOME) 연산자를 사용한 경우)
            SELECT EMPLOYEE_ID AS 사원번호,
                   FIRST_NAME||' '||LAST_NAME AS 사원명,
                   DEPARTMENT_ID AS 부서코드,
                   SALARY AS 급여
              FROM HR.EMPLOYEES
             WHERE DEPARTMENT_ID =ANY (20, 50, 90);
          -- WHERE DEPARTMENT_ID =SOME (20, 50, 90);
        사용예) 사원테이블에서 소속인원이 5명 이상인 부서에 소속된 사원의 사원번호, 사원명, 부서코드, 급여를 조회하시오.
            SELECT B.EMPLOYEE_ID AS 사원번호,
                   B.FIRST_NAME||' '||B.LAST_NAME AS 사원명,
                   B.DEPARTMENT_ID AS 부서코드,
                   B.SALARY AS 급여
              FROM HR.EMPLOYEES B
             WHERE B.DEPARTMENT_ID IN (SELECT A.DEPARTMENT_ID -- 사원은 1명이지만, 부서는 5개일 경우 IN 사용
                                      FROM (SELECT DEPARTMENT_ID,
                                                   COUNT(*)
                                              FROM HR.EMPLOYEES
                                             GROUP BY DEPARTMENT_ID
                                            HAVING COUNT(*)>=5)A);

  1. 함수 : 모든 사람들이 똑같은 목적으로 사용 SELECT, WHERE 사용가능
    • 미리 작성하고 컴파일하여 실행 가능한 상태의 서브프로그램
    • 네트워크의 트래픽을 감소시킴

 

728x90
반응형

'IT > SQL' 카테고리의 다른 글

DB 설계  (0) 2022.05.08
[ORACLE] db 테이블 컬럼명 자바 vo 변수로 변환  (0) 2022.05.06
SQL 정리5  (0) 2021.11.30
SQL 정리4  (0) 2021.11.30
SQL 정리3  (0) 2021.11.30

댓글