SQL

[ Oracle ] SQL 기본 & 오라클함수

hanjuCoding 2024. 8. 2. 10:57

 

오라클 좀 사셈

😎 작성 순서

→ SELECT > FROM > WHERE > GROUP BY > HAVING >ORDER BY

 

sql 기본

select
    empno,ename,deptno
from emp;
//이 형식으로 작성하자
//주석은 --로
  • SELECT
    • DISTINCT (중복제거, 대신에 나중에 배우는 GROUP BY를 사용하자)
      • ex)
      SELECT DISTINCT A;
      
    • ALL (*)
    • AS ( 별칭 )
    • SELECT a AS b; //as는 생략 가능 //b는 큰따옴표("")로 묶을 수 있음
  • FROM
  • WHERE
    • AND / OR / NOT / IN / (NOT IN) /BETWEEN /LIKE
      • IS NULL
        • =NULL 대신 IS NULL 사용하기 or IS NOT NULL
      • LIKE
        • _ / %
        • ☆ ‘%x%’ → x를 포함하는 문자열 (검색기능때 많이 씀)
  • OREDER BY
    • SQL문 중에 가장 마지막 부분에 작성
    • DESC 내림차순, ASC 오름차순
      • ex)
      SELCT * FROM EMP
      ORDER BY A ASC, B DESC;
      //A로 먼저 오름차순한 다음, B를 기준으로 내림차순
      
  • UNION
    • 집합연산
    • UNION: 중복 제거 // UNION ALL: 중복 허용
    • columm명은 첫번째의 select문을 따라감

between

where sal>=500 and sal<=1000;
where sal between 500 and 1000;
//서로 같은거임

 

 

오라클함수

  • dual 테이블
  • -어떤 단일 연산/결과만을 출력하고 싶을때 사용하는 더미 테이블

1. 문자 함수

  1. UPPER( str ), LOWER( str ) : 대소문자로 출력
  2. INITCAP( str ) : 첫글자만 대문자, 나머지는 소문자로 출력
  3. LENGTH( str ) : 문자열 길이 출력
  4. SUBSTR( str , a , b ) : 문자열 일부 추출
    1. str에서 a부터 b까지 출력
    2. p언어와는 다르게 인덱스번호 1부터 시작
    3. b는 생략 가능 생략하면 a 부터 끝까지출력
  5. INSTR( str , char , a , b )
    1. str 에서 char 문자 인덱스 출력, 없으면 0 출력
    2. a 인덱스부터 찾기 시작
    3. a부터 시작해서 b번째 char 인덱스
    4. a,b는 생략가능 default는 1번 인덱스
  6. REPLACE( str , a , b )
    1. str 에서 a를 b로 바꿔 출력(db상에는 변동x)
    2. b생략시 a없애고 빈자리 떙겨출력
  7. LPAD, RPAD : 패딩 (잘안씀)
  8. CONCAT( str1, str2 ) : str1, str2 합쳐 출력 (중요)

2. 숫자 함수

  1. ROUND, TRUNC, CEIL, FLOOR ,MOD
    1. ROUND: 반올림
      1. ROUND(A, b) : A에서 b위치에서 반올림, b가 음수면 자리수*10
    2. TRUNC: 버림
      1. ROUND랑 메커니즘 같

3. 날짜 함수

SYSDATE 함수 : 시스템 상 현재 날짜 정보

  1. date+/- d: d일 이후/이전의 날짜
  2. ADD_MONTHS( date, m ) : m개월 후 날짜
  3. MONTHS_BETWEEN( date1, date2 ) : date1,date2 개월 수 차이
    1. NEXT_DAY ( date , dy ) : 다음 dy요일의 날짜
  4. LAST_MONTH( date ) : 달의 마지막 날짜

*코테꿀팁

select to_char(sysdate , 'yyyy-mm-dd') from dual;
//대신에
select substr(sysdate,1,10) from dual;
//을 사용하자
//결과는 같음

4. 변환 함수

자동형변환 은 뭐 그냥 하면댐

강제형변환 → TO_CHAR , TO_NUMBER, TO_DATE

숫자↔문자↔날짜 (숫자&날짜 불가)

  1. TO_CHAR( date , str ) : date 날짜를 str의 형식으로 출력 (str ex: yyyy/mm/d hh24:mi:ss 형식이 정해져있음)
  2. TO_NUMBER( num , n ) : 숫자형태로 생긴 문자열 num을 n의 형태로 바꿈
  3. 랭킹(순위 함수)
  4. select sal, row_number() over(order by sal desc) rank1, rank() over(order by sal desc) rank2, dense_rank() over(order by sal desc) rank3 from emp; //sal을 기준으로 순위를 내림차순 1등~x등 출력

5. null 처리 함수

  1. NVL( data , d ) : data가 null이 아니면 그대로 출력 , null이면 d를 출력
  2. null은 계산이 안됨 ex) 금액이 0 일때 null로 저장되는 경우가 있음, 0으로 계산할때사용
  3. NVL2( data , a, b ) : data가 null이 아니면 a 출력 , null이면 b를 출력
  4. 일반 SQL 에서는 NVL대신에 IFNULL 사용

6. decode 함수 , case문

decode() : if문과 비슷(조건문)

CASE()문 CASE-WHEN-THEN 절

  • connect by (오라클 쿼리, 많이 사용하지는 않음)
  • 계층형
    --connect by
    --계층형 (트리구조)로 조회(oracle)
    select
        level,lpad(' ',(level-1)*4)||level, empno,mgr,ename
    from emp
    start with mgr is null
    connect by prior empno = mgr;