DML(SELECT)

MINIMI·2023년 1월 11일
0

ORACLE

목록 보기
2/11
post-thumbnail
  • 다른 테이블과 관계 : 외래키
  • 중복되지 않는 고유한 속성 : 기본키
  • RESULTSET : 데이터 조회 결과
  • FROM DUAL : 가상 테이블 이용
  • 실행시에는 대소문자 구분 X > 보편적으로는 대문자
  • WHERE절에는 단일행 함수만 사용 가능
  • 설정 언어를 영어로 변경
ALTER SESSION SET NLS_LANGUAGE = AMERICAN;

데이터 타입

  • NUMBER : 숫자
  • CHARACTER : CHAR / VARCAHR2 / LONG
  • DATE
  • LOB : 가변길이(CLOB BLOB)

2-1. SELECT

1) 개념

  • SELECT 구문에 의해 반환된 행들의 집합

2) 기본 작성법
SELECT : 조회하고자 하는 컬럼명 기술
여러 컬럼을 기술하는 경우 쉼표로 구분
모든 컬럼 조회시 * 기호 사용 가능
조회 결과는 기술한 컬럼명 순으로 표시
FROM : 조회 대상 컬럼이 포함된 테이블명 기술
WHERE : 행을 선택하는 조건 기술
여러 개의 제한 조건 포함 / 각각의 제한 조건은 논리 연산자로 연결

3) 예시

  • 컬럼에 별칭 짓기(AS)
    • 별칭은 띄어쓰기 포함이 안되므로 ""로 감싼다
    • AS는 굳이 안써도 됨
    • 띄어쓰기가 포함되지 않을 경우 그냥 작성해도 가능
SELECT
       DEPARTMENT_NAME "학과 명"
     , CATEGORY 계열
  FROM tb_department;
  • DISTINCT : 중복된 컬럼 값 제거
  • WHERE절에서 NULL 값 조회(IS NOT NULL도 가능)
SELECT
	EMP_NAME
FROM EMPLOYEEE
WHERE SALARY IS NOT NULL;
  • IN 연산자 : 비교하는 값 목록에 일치하는 값이 있는지 확인
SELECT
	EMP_NAME
FROM EMPLOYEE
WHERE DEPT_CODE IN ('D6', 'D8);
  • BETWEEN AND : 컬럼명 BETWEEN 하한값 AND 상한값 - 하한값 이상 상한값 이하의 값
  • LIKE 연산자
    • 컬럼명 LIKE '문자패턴'
    • 글자%(글자로 시작하는 값) %글자(글자로 끝나는 값) %글자%(글자가 포함되는 값)
    SELECT
         EMP_NAME
       , HIRE_DATE
    FROM EMPLOYEE
    WHERE EMP_NAME LIKE '김%';
  • 와일드 카드 사용 : _ (글자 한 자리), %(0개 이상의 글자)
SELECT
       EMP_NAME
     , PHONE
  FROM EMPLOYEE
 WHERE PHONE LIKE '___9%';
-- 전화 번호 국번이 4자리면서 9로 시작하는 직원의 이름, 전화번호 조회
SELECT
       EMP_NAME
     , PHONE
  FROM EMPLOYEE
 WHERE PHONE LIKE '___9_______';
  • ESCAPE : JAVA에서 \ 같은 의미 ; '_' 나 '%' 같은 것을 문자의 의미로 사용하는 경우 사용
SELECT
       EMP_NAME
     , EMAIL
  FROM EMPLOYEE
 WHERE EMAIL LIKE '___#_%' ESCAPE '#';
  • 연산자 우선순위
    논리연산자( && > || ) : 우선 순위를 생각해서 코드 작성

1-2. 함수

1) 정의

  • 반복적으로 사용되는 부분들을 분리하여 작성해 놓은 작은 서브 프로그램
  • 컬럼 값을 읽어서 계산한 결과 리턴

1-3. 그룹 함수

  • 컬럼에 기록 된 N개의 값을 읽어서 한개의 결과를 리턴

1) SUM

  • SUM(숫자가 기록 된 컬럼명)
  • 합계를 구해서 리턴

2) AVG

  • AVG(숫자가 기록된 컬럼명)
  • 평균을 구하여 리턴

3) MAX

  • MAX(컬럼명)
  • 컬럼에서 가장 큰 값 리턴
  • 자료형은 어떤 것이든 취급

4) MIN

  • MIN(컬럼명)
  • 컬럼에서 가장 큰 값 리턴
  • 자료형은 어떤 것이든 취급

5) COUNT

  • COUNT(* ) : 행의 갯수를 헤아려서 리턴
  • COUNT([DISCOUNT] 컬럼명) : 중복을 제거한 행 갯수 리턴
  • COUNT(조건식) : NULL을 포함한 전체 행 갯수 리턴
  • COUNT(컬럼명) : NULL을 제외한 실제 값이 기록된 행 갯수 리턴

1-4. 단일행 함수

1) 문자 처리 함수

  • LENGTH : 주어진 문자열의 길이 반환

  • LENGTHB : 주어진 문자열의 길이를 바이트로 계산해서 반환

  • INSTER('문자열' 또는 컬럼명, '찾을 문자', 찾을 위치의 시작값, [빈도])

    • 찾을 위치의 시작 값을 -1로 하면 뒤에서부터 찾는다
    SELECT INSTR('AABAACAABBAA', 'B') FROM DUAL;
    -- 첫번째 B를 찾아달라는 뜻
    SELECT INSTR('AABAACAABBAA', 'B', 1) FROM DUAL;
    -- 뒤에서부터 첫번째 B를 찾아달라는 뜻
    SELECT INSTR('AABAACAABBAA', 'B', -1) FROM DUAL;
    -- 첫번째부터 시작해서 두번째 B를 찾아달라는 뜻
    SELECT INSTR('AABAACAABBAA', 'B', 1, 2) FROM DUAL;
    SELECT INSTR('AABAACAABBAA', 'B', -1, 2) FROM DUAL;
  • LPAD / RPAD : 주어진 컬럼 문자열에 임의의 문자열을 덧붙여 길이 N의 문자열을 반환하는 함수

    SELECT
       LPAD(EMAIL, 20, '#')
    FROM EMPLOYEE;
    
  • LTRIM / RTRIM : 주어진 컬럼이나 문자열 왼쪽 / 오른쪽에서 지정한 문자 혹은 문자열을 제거한 나머지를 반환하는 함수

    • 인자 제공하지 않을 시 공백 제거
    • 인자에 쓴 문자는 하나씩 따로 생각(SELECT LTRIM('123456', '123') 일 경우 1,2,3을 제거
    -- 앞에서부터 제거하다 만약 제거하려고 하는 문자가 아닐 경우 제거를 멈춤
    SELECT LTRIM('132123GREEDY123', '123') FROM DUAL;
    SELECT LTRIM('   GREEDY') FROM DUAL;
  • TRIM : 주어진 칼럼이나 문자열의 앞/뒤에 지정한 문자를 제거

    • LEADING : 왼쪽에서 오른쪽으로 제거
    • TRALLING : 오른쪽에서 왼쪽으로 제거
    • BOTH : 양쪽에서 제거
  • SUBSTR : 컬럼이나 문자열에서 지정한 위치로부터 지정한 갯수의 문자열을 잘라서 리턴하는 함수

    SELECT SUBSTR('SHOWMETHEMONEY', 5, 2) FROM DUAL;
  • LOWER(문자열 혹은 컬럼) : 소문자로 변경

  • UPPER(문자열 혹은 컬럼) : 대문자로 변경

  • INICAP(문자열 혹은 컬럼) : 앞 글자만 대문자로 변경

  • CONCAT : 문자열 혹은 컬럼 두개를 입력 받아 하나로 합친 후 리턴

    • 반드시 두개만 가능
    SELECT CONCAT('가나다','ABCD') FROM DUAL;
  • REPLACE : 컬럼 혹은 문자열을 입력 받아 변경하고자 하는 문자열을 변경하려고 하는 문자열로 바꾼 후 리턴

    • REPLACE(문자열 혹은 컬럼, 바꾸고 싶은 문자열, 변경하려는 문자열)

2) 숫자 처리 함수

  • ABS(숫자 혹은 숫자로 된 컬럼명) : 절대값
  • MOD(숫자 혹은 숫자로 된 컬럼명, 숫자 혹은 숫자로 된 컬럼명) : 두 수를 나누어서 나머지를 구하는 함수
    • 처음 인자는 나누어지는 수, 두 번째 인자는 나눌 수
  • ROUND(숫자 혹은 숫자로 된 컬럼명, [위치]) : 반올림 해서 리턴하는 함수
    SELECT ROUND(123.456, 1) FROM DUAL;
  • FLOOR(숫자 혹은 숫자로 된 컬럼명) : 내림처리 하는 함수
    • 뒤에 있는 소수자리를 모두 버림
  • TRUNC(숫자 혹은 숫자로 된 컬럼명, [위치]) : 내림처리(절삭) 함수
  • CEIL(숫자 혹은 숫자로 된 컬럼명) : 소수점 뒤 올림처리 함수

3) 날짜 처리 함수

  • SYSDATE : 시스템에 저장 되어 있는 날짜를 반환
    • 시, 분, 초도 포함되지만 출력되지는 않음
  • MONTHS_BETWEEN(날짜, 날짜) : 두 날짜의 개월 수 차이를 숫자로 리턴
    -- 근무년수를 만으로 계산하는 경우에는 월의 차이를 계산해야 한다
    SELECT
         EMP_NAME
       , HIRE_DATE
       , FLOOR(MONTHS_BETWEEN(SYSDATE, HIRE_DATE)/12) "만 근무년수"    
    FROM EMPLOYEE;
  • ADD_MONTHS(날짜, 숫자) : 날짜에 숫자만큼 개월 수 더해서 리턴
  • NEXT_DAY(기준날짜, 요일(문자 혹은 숫자)) : 기준 날짜에서 구하려는 요일에 가장 가까운 날짜 리턴
    SELECT SYSDATE, NEXT_DAY(SYSDEATE, '금요일') FROM DUAL;
    -- 숫자는 1~7이며, 일요일부터 시작.
    SELECT SYSDATE, NEXT_DAY(SYSDATE, 6) FROM DUAL;
    -- 시스템 환경에 따라 설정되어 있으므로 변경을 원하면 설정을 변경해서 사용한다.
    SELECT SYSDATE, NEXT_DAY(SYSDATE, 'FRIDAY') FROM DUAL;
  • LAST_DAY(날짜) : 해당 월의 마지막 날짜를 구하여 리턴
  • EXTRACT : 년, 월, 일 정보를 추출하여 리턴
    • EXTRACT(YEAR FROM 날짜)
    • EXTRACT(MONTH FROM 날짜)
    • EXTRACT(DAY FROM 날짜)

1-5. 형변환 함수

1) TO_CHAR

  • TO_CHAR(날짜, [포맷]) : 날짜형 데이터를 문자형 데이터로 변경
  • TO_CHAR(숫자, [포맷]) : 숫자형 데이터를 문자형 데이터로 변경
    SELECT TO_CHAR(1234) FROM DUAL;
    -- 자리수(9 또는 0이라는 문자 사용) 9 는 자리를 맞춰주고 빈자리 비워둠
    SELECT TO_CHAR(1234, '99999') FROM DUAL;
    -- 0으로 맞추면 빈자리에 0이 들어감
    SELECT TO_CHAR(1234, '00000') FROM DUAL;
    -- L : 시스템 상 화폐 단위
    SELECT TO_CHAR(1234, 'L99999') FROM DUAL;
    SELECT TO_CHAR(1234, '$99999') FROM DUAL;
    -- ,을 찍고 싶은 자리에 표시
    SELECT TO_CHAR(1234, '00,000') FROM DUAL;
    -- 표기하려는 자리수보다 작은 자리수를 주면 표기 불가
    SELECT TO_CHAR(1234, '999') FROM DUAL;
  • 날짜 데이터 포맷 적용 시에도 TO_CHAR 함수 사용
    -- 24시간체제
    SELECT TO_CHAR(SYSDATE, 'PM HH24:MI:SS') FROM DUAL;
    -- fm : 01이라고 표기하지 않고 1로 표기
    SELECT TO_CHAR(SYSDATE, 'YYYY-fmMM-DD DAY') FROM DUAL;
    SELECT
         EMP_NAME
    -- 문자를 포멧 안에 넣고 싶을땐 ""로 표기
       , TO_CHAR(HIRE_DATE, 'YYYY"년" MM"월" DD"일"') 입사일
      FROM EMPLOYEE;
  • RR과 YY의 차이
    • RR : 두자리 년도를 네자리로 바꿀 때 바꿀 년도가 50년 미만일 경우 2000년을 적용 / 50년 이상일 경우 1900년을 적용
    • YY : 현재 세기 적용
      SELECT
      -- 로마문자
         , TO_CHAR(SYSDATE, 'RM')
      -- 요일을 표시하지 않음(목)
         , TO_CHAR(SYSDATE, 'DY')
      FROM DUAL;
      2) TO_DATE
  • 문자 혹은 숫자형 데이터를 날짜형 데이터로 변환하여 리턴
    SELECT TO_DATE('2020101', 'RRRRMMDD') FROM DUAL;
  • 문자열은 보편적인 형식일 경우 자동 형변환 가능(예시 '20201111')
  • 숫자는 자동 형변환 되지 않음

3) TO_NUMBER

  • 문자 데이터를 숫자로 리턴

4) NULL 처리 함수

  • NVL(컬럼명, 컬럼값이 NULL일 때 바꿀 값)
  • NVL2(컬럼명, 바꿀값1, 바꿀값2)
    • 해당 컬럼이 값이 있으면 1로 변경, NULL이면 2로 변경

1-6. 선택 함수

  • 여러 가지 경우 선택할 수 있는 기능 제공

1) DECODE

  • DECODE(계산식 혹은 컬럼명, 조건값1, 선택값1, 조건값2, 선택값2 ....)
  • 마지막 인자로 조건 값 없이 선택값을 작성하면 아무런 조건에 해당하지 않을 때, 마지막에 작성한 값을 무조건 선택
SELECT
      EMP_ID ID
    , EMP_NAME 이름
    , EMP_NO 주민등록번호
    , DECODE(SUBSTR(EMP_NO, 8, 1), '1', '남', '여') 성별
 FROM EMPLOYEE;

2) CASE WHEN THEN


/*
   CASE
      WHEN 조건식 THEN 결과값
      WHEN 조건식 THEN 결과값
      ELSE 결과값
   END
*/
- 급여가 500만원을 초과하면 '고급', 300~500 사이면 '중급', 그 이하는 '초급'으로 출력
-- 처리하고 별칭은 '구분'으로 한다.
SELECT
      EMP_NAME
    , SALARY
    , CASE
          WHEN SALARY > 5000000 THEN '고급'
          WHEN SALARY BETWEEN 3000000 AND 5000000 THEN '중급'
          ELSE '초급'
      END 구분
 FROM EMPLOYEE;
profile
DREAM STARTER

0개의 댓글