Oracle #2

황현근·2023년 4월 19일
0

Acorn-Academy

목록 보기
9/28
post-thumbnail

DQL (Data Query Language)

SELECT

[기본형식]
SELECT 칼럼명1, 칼럼명2,...
FROM 테이블명
WHERE 조건절
GROUP BY 칼럼명
HAVING 조건절
ORDER BY 칼럼명 [ASC|DESC]


예제

SQL> select ename "이름" , job as 업무, hiredate 입사일 from emp;

이름       업무      입사일
---------- --------- --------
SMITH      CLERK     80/12/17
ALLEN      SALESMAN  81/02/20
WARD       SALESMAN  81/02/22
JONES      MANAGER   81/04/02
MARTIN     SALESMAN  81/09/28
BLAKE      MANAGER   81/05/01
CLARK      MANAGER   81/06/09
SCOTT      ANALYST   87/04/19
KING       PRESIDENT 81/11/17
TURNER     SALESMAN  81/09/08
ADAMS      CLERK     87/05/23
JAMES      CLERK     81/12/03
FORD       ANALYST   81/12/03
MILLER     CLERK     82/01/23

14 개의 행이 선택되었습니다.

데이터 추출

  select 컬럼명,... from 테이블명,... where 컬럼명 조건;

① from : 현재 유저가 테이블을 소유하고 있는지 확인한다.
→ 테이블 전체가 후보가 됨.
② where : 행(데이터)을 제한한다.
→ where절이 참인 행만 추출
③ select - 컬럼을 제한한다.


연산자

  • 산술연산자 : +, -, *, /, mod
  • 관계연산자 : =, ≠, (<>), >, <, ≥, ≤
  • 문자열 연산자 : like (% 모든 문자, _ 한 개의 문자)
  • 논리연산자 : not, and, or (두 개의 조건을 묻는 연산)

    예제

    부서 번호가 20번인 사람

    select deptno, ename from emp where deptno = 20;

    급여가 1000 ~ 2000인 사람

    SQL> select ename, sal from emp where sal >= 1000 and sal <= 2000;
    
    ENAME             SAL
    ---------- ----------
    ALLEN            1600
    WARD             1250
    MARTIN           1250
    TURNER           1500
    ADAMS            1100
    MILLER           1300
    
    6 개의 행이 선택되었습니다.

    급여가 1000 ~ 2000이 아닌 사람

    SQL> select ename, sal from emp where sal < 1000 or sal > 2000; 
    
    ENAME             SAL
    ---------- ----------
    SMITH             800
    JONES            2975
    BLAKE            2850
    CLARK            2450
    KING             5000
    JAMES             950
    FORD             3000
    
    7 개의 행이 선택되었습니다.

    업무가 ‘salesman’, ‘clerk’ 인 사람

    SQL> select ename, job from emp
      2   where job = 'SALESMAN' or job = 'CLERK';
    
      ENAME      JOB
    ---------- ---------
    SMITH      CLERK
    ALLEN      SALESMAN
    WARD       SALESMAN
    MARTIN     SALESMAN
    TURNER     SALESMAN
    ADAMS      CLERK
    JAMES      CLERK
    MILLER     CLERK
    
    8 개의 행이 선택되었습니다.

    커미션이 NULL인 사원

    SQL> select ename 이름, sal 급여, comm 커미션,
    sal+nvl(comm, 0) 총급여  from emp;
    
      이름             급여     커미션     총급여
    ---------- ---------- ---------- ----------
    SMITH             800                   800
    ALLEN            1600        300       1900
    WARD             1250        500       1750
    JONES            2975                  2975
    MARTIN           1250       1400       2650
    BLAKE            2850                  2850
    CLARK            2450                  2450
    SCOTT            3000                  3000
    KING             5000                  5000
    TURNER           1500          0       1500
    ADAMS            1100                  1100
    
    이름             급여     커미션     총급여
    ---------- ---------- ---------- ----------
    JAMES             950                   950
    FORD             3000                  3000
    MILLER           1300                  1300

    이름의 두 번째 문자가 L인 사람

    SQL> select ename from emp where ename like '_L%';
    
    ENAME
    ----------
    ALLEN
    BLAKE
    CLARK

함수 (Function)

함수의 종류

  • 단일행 함수 : 하나의 row 당 하나의 결과값을 반환하는 함수
    • input 하나의 행 → output 하나
    • 데이터 종류별로 여러 개의 함수가 있다.

  • 복수행 함수 : 여러개의 row 당 하나의 결과값을 반환하는 함수
    • input 여러 개의 행 → output 하나
    • 계산과 관련된 함수가 주를 이룬다.
    • count, max, min, sum
    • 계산함수, 그룹함수 라고도 한다.

단일행 함수

1. 문자열 함수

  • trim : 양쪽 공백 제거
  • rtrim : 오른쪽 공백 제거
  • ltrim : 왼쪽 공백 제거
  • lower : 모든 문자를 소문자로
  • upper : 모든 문자를 대문자로
  • initcap : 단어의 첫글자만 대문자로
  • concat : 문자열 연결
  • replace : 문자열을 바꿔줌
  • substr : 문자열의 n1번째 위치에서 n2개 만큼 문자열 빼옴
  • length : 문자열 길이를 반환
  • least : 문자열 중에 가장 앞의 값을 리턴
  • nvl : 해당 칼럼이 null인 경우 정해진 값을 반환
  1. 수학 함수
  • round : 자릿수 지정 반올림
  • trunc : 자릿수 지정 버림
  • floor : 최하 정수 리턴
  • ceil : 최상 정수 리턴
  • abs : 절대값으로 반환
  1. 날짜 함수
  • sysdate : 현재 시간을 리턴
  • add_months : 날짜, 더해질 월
  • last_day : 해당날짜의 마지막 날짜 반환
  • months_between : 두 날짜 사이의 월 수

    예시

    select 
    to_char(sysdate, 'yy') "yy", 
    to_char(sysdate, 'year') "year", // twenty twenty-two
    to_char(sysdate, 'month') "month",
    to_char(sysdate, 'mon') "mon",
    to_char(sysdate, 'mm') "mm",
    to_char(sysdate, 'q') "q", // 분기  
    to_char(sysdate, 'd') "d", // 요일을 숫자로 일 - 0
    to_char(sysdate, 'day') "day", // 수요일
    to_char(sysdate, 'dy') "dy", // 수
    to_char(sysdate, 'dd') "dd", 
    to_char(sysdate, 'ddd') "ddd", // 201 - 365일 기준 
    to_char(sysdate, 'hh') "hh", 
    to_char(sysdate, 'hh24') "hh24",
    to_char(sysdate, 'miss') "miss",
    to_char(sysdate, 'am') "am", 
    to_char(sysdate, 'pm') "pm"        
    from dual;
    
    select 
    to_char(sysdate, 'fmyyyy.mm.dd day am hh:mi:ss') 
    from dual; 
    // fm - 07월 -> 7월 
    
    select 
    to_char(sysdate, 'fmyyyy.mmsp.dd day am hh:mi:ss') 
    from dual; 
    // sp - 영문으로 추출 
    
    select 
    to_char(sysdate, 'fmyyyy.mm.ddth day am hh:mi:ss') 
    from dual;
    // th - th붙이기
  1. 숫자 변환함수, 날짜 변환함수
  • to_number : 숫자로 변환
  • to_date : 날짜로 변환

복수행(그룹) 함수

  • count : 해당 칼럼이 존재하는 row의 개수를 반환
    (null인 칼럼은 세지 않는다)
  • sum : 칼럼의 값을 모두 더한 값 리턴
  • avg : 평균값을 리턴 (null 칼럼 제외)
  • max : 최대값 리턴
  • min : 최소값 리턴

    예시

    부서별 평균 급여 구하기

    SELECT deptno, AVG(sal) FROM emp 
    GROUP BY deptno
    
    DEPTNO     AVG(SAL)
    ---------- ----------
            30 1566.66667
            20 2258.33333
            10 2916.66667

0개의 댓글