oracleDB_select

song·2023년 9월 27일

oracle

목록 보기
4/10

select

  • 현재 계정이 가지고 있는 모든 테이블 정보
    select * from user_tables;
  • 테이블 구성 정보 (컬럼마다 데이터 유형이 무엇인지 나옴)
    desc 테이블명;
  • 특정 테이블에 특정 컬럼값 가져오기
    select 컬럼명, ... , 컬럼명 from 테이블명;

as

  • 별칭설정 : '컬럼명 as 별칭' 또는 '컬럼명 별칭'
    '* as 별칭' 으로는 못 씀. (전체선택자에게는 주면 안 됨)
    select 컬럼명 as 별칭, ... , 컬럼명 from 테이블명;

where

  • 테이블에서 특정 조건만 출력 : where 절 (and / or)
    select 컬럼명 from 테이블명 where 조건;
    select 컬럼명 from 테이블명 where 조건 and 조건;
    select 컬럼명 from 테이블명 where 조건 or 조건;
    • 글자랑 비교할 때 쌍따옴표 인식 못 함.
    • 글자랑 비교할 때 대소문자 구문 함.

order by

  • 정렬 : order by 절 (, 로 구분)
    • 오름차순 : select 컬럼명 from 테이블명 order by 컬럼명 asc, ... , 컬럼명 asc;
    • 내림차순 : select 컬럼명 from 테이블명 order by 컬럼명 desc, ... , 컬럼명 desc;
    • 필요할 때만 사용하기. (코스트가 발생하기 때문)

group by

  • 그룹화 : group by절
    • group by절은 집계함수와 같이 사용해야한다.
    • 집계함수
      • count() : 테이블의 row 수 구하기
        select count(*) from 테이블명
      • max(컬럼명) : 해당 컬럼에서 제일 큰 값
      • min(컬럼명) : 해당 컬럼에서 제일 작은 값
      • median(컬럼명) : 중앙값
      • avg(컬럼명) : 평균값
      • sum(컬럼명) : 해당 컬럼들의 합
    • select count(*) from 테이블명 group by 컬럼명, ... , 컬럼명;
    • group by 컬럼명
    • 그룹화시키면 그룹화 시킨 컬럼과 집계함수만 select할 수 있다. 그 외 컬럼을 조회하려고 하면 에러난다.

TO_CHAR()

  • 소수점 자리 구하기(반올림)
  • TO_CHAR(값, 포맷)
    select TO_CHAR(avg(sal), 'FM9990.00') from emp;
    FM9990.00
    • FM : 포맷의 약자
    • 0넣든 9넣든 큰 의미가 없다. 0~9 사이의 숫자를 넣겠다.
    • 0 : 버림. 빈자리에 0을 넣어줌.
    • 9 : 반올림. 빈자리는 그냥 자리만 잡고 냅둠.
    • 소숫점자리 기준으로 앞으로 4개, 뒤로 2개의 숫자를 넣겠다.
    • 자리가 부족하면 #으로 표시됨.

TRIM()

  • RTRIM(), LTRIM(). 우측, 좌측의 빈공간을 제거

having

  • group by한 결과에 where절 추가한 것과 같은 결과.
  • group by 뒤에 써야 한다. group by 없이 혼자 사용 불가.
  • ★group by절 사용시에만 사용 가능.
  • group by절의 범위 제한할 때 사용

연산자

in 연산자

  • select * from emp where job='salesman' or job = 'manager';
    select * from emp where job in('salesman', 'manager');
    위와같이 or로 구분하는 것을 in으로 묶어서 비교할 수 있다.

between 연산자

  • select * from emp where sal >= 1500 and sal <= 2500;
    select * from emp where sal between 1500 and 2500;
    위와같이 and로 숫자 비교하는 것을 between으로 비교할 수 있다.

like 연산자

  • select * from emp where job like 'cl%'
    부분 검색
    %를 이용해서 %부분은 있던 말던 무시.
    • cl% : cl로 시작되는 글자
    • %cl : cl로 끝나는 글자
    • %cl% : 어디든 cl이 들어가는 글자

Null 값 체크

  • null과 비교할 때는 = 을 사용할 수 없다.
  • is not, is로 구분해야 한다.
    select 컬럼명 from 테이블명 where 컬럼명 is not null;

결합연산자

  • 쓸 일은 별로 많지 않음..

union

  • 합집합 (결과값의 중복이 있으면 제거)
    select empno, ename from emp where deptno=10
    UNION
    select empno, ename from emp where deptno=20
    order by deptno empno;

union all

  • 합집합 (결과값의 중복이 있어도 다 보여줌)
    select empno, ename from emp where deptno=10
    UNION ALL
    select empno, ename from emp where deptno=10
    order by deptno empno;

minus

  • 차집합 (먼저 작성한 select의 결과에서 빼기)
    select empno, ename from emp
    MINUS
    select empno, ename from emp where deptno=20;

intersect

  • 교집합 (먼저 작성한 select와 두번째 select랑 겹치는 것만 출력)
    select empno, ename from emp
    INTERSECT
    select empno, ename from emp where deptno=20;

함수

문자함수

upper

  • 모두 대문자
  • select * from emp where ename=upper('allen');

lower

  • 모두 소문자
  • select lower(job) from emp;

initcap

  • 각 단어의 첫문자들만 대문자
  • select initcap(job) from emp;

length

  • 문자열 길이
  • select ename, length(ename) from emp;

count

  • row개수
  • select count(*) from 테이블명

substr

-문자열자르기

  • ex)substr(job, 3, 2)
    -> job에서 세번째 글자부터 2개 잘라오기
  • select job, substr(job, 3, 2) from emp;
    개수는 0이 아닌 1부터 셈.
  • 2개 가져오라고 했는데 최종 글자수가 1개여도 에러나지 않는다.
    그냥 1개만 가져온다.

concat

  • 문자열합치기
  • ex) concat(empno, ename)
    -> empno값+ename값
  • select concat(empno, ename) from emp;
  • 안에는 변수만 넣을 수 있기 때문에 concat(empno, " ", ename) 이런식으로 사용하면 안된다.

숫자함수

round

  • 반올림
  • select round(123.4567) from dual; -> 123

ceil

  • 올림
  • select ceil(123.4567) from dual; -> 124

floor

  • 내림
  • select floor(123.4567) from dual; -> 123

trunc

  • 특정 위치 이하 버림 (소수점, 정수부분 다 가능)
    • select trunc(123.4567) from dual; -> 123
    • 자리수 - 양수 : '소수점 몇자리'를 의미
      • select trunc(123.4567, 1) from dual; -> 123.4
      • select trunc(123.4567, 2) from dual; -> 123.45
    • 자리수 - 음수 : 정수자리를 버리진 않고 0으로 바뀜
      • select trunc(123.4567, -1) from dual; -> 120

mod

  • 나머지 (% 같은 것. 10 % 3 같은 것임.)

abs

  • 절대값

날짜함수

sysdate

  • 대소문자 상관없음
  • 월, 년 바뀔 때 알아서 다 해줌
  • select sysdate from dual;
  • 날짜 더하기 빼기
    select sysdate as "오늘", sysdate+5 as "5일후" from dual;
  • 월 더하기 빼기
    select sysdate as "오늘", add_months(sysdate, 5) as "5달후" from dual;
    select sysdate as "오늘", add_months(sysdate, -5) as "5달후" from dual;
  • 날짜 간격
    select sysdate as "오늘", months_between(sysdate, sysdate+5) as "5달후" from dual;

TO_DATE()

  • 문자형을 Date형으로 변환

TO_CHAR()

  • Date형을 문자형으로 변환
  • 날짜포멧
    select TO_CHAR(sysdate, 'yyyy-mm-dd') from dual; -> 2023-09-27
    select TO_CHAR(sysdate, 'yyyymmdd') from dual; -> 20230927
    select TO_CHAR(sysdate, 'yyyy') from dual; -> 2023
    select TO_CHAR(sysdate, 'yy') from dual; -> 23
    select TO_CHAR(sysdate, 'mm') from dual; -> 09 -> 기본 숫자 2자리
    select TO_CHAR(sysdate, 'mon') from dual; -> 9월 -> 문자형태의 월
    select TO_CHAR(sysdate, 'dd') from dual; -> 27
    select TO_CHAR(sysdate, 'd') from dual; -> 4 -> 요일 (1(일요일)~7)
    select TO_CHAR(sysdate, 'day') from dual; -> 수요일 -> 문자형태의 요일
    select TO_CHAR(sysdate, 'dy') from dual; -> 수 -> 문자형태의 요일(한자리)
    select TO_CHAR(sysdate, 'ddd') from dual; -> 날짜(365일중에 몇 번째 일인지 구해줌)
    select TO_CHAR(sysdate, 'ww') from dual; -> 1년(53주) 중에 몇번째 주인지 출력
    select TO_CHAR(sysdate, 'w') from dual; -> 이번달 중에 몇번째 주인지 출력
    select TO_CHAR(sysdate, 'dl') from dual; -> 2023년 9월 27일 수요일 -> 날짜가 기본 포멧팅으로 돼서 출력
  • 시간 포멧
    select TO_CHAR(sysdate, 'am') from dual; -> 현재가 오전인지 오후인지
    select TO_CHAR(sysdate, 'pm') from dual; -> 현재가 오전인지 오후인지
    select TO_CHAR(sysdate, 'hh') from dual; -> 12시간제
    select TO_CHAR(sysdate, 'hh24') from dual; -> 24시간제
    select TO_CHAR(sysdate, 'mi') from dual; -> 분(기본 두자리수. 00~59)
    select TO_CHAR(sysdate, 'mi') from dual; -> 초(기본 두자리수. 00~59)

형변환

  • TO_CHAR()
  • TO_DATE()
  • TO_NUMBER()

기타

  • 아래와 같이 줄바꿈을 하는 것을 추천한다.
    점점 조건이 많아지면 가독성이 떨어지기 때문.
    select ....
    from ...
    where ...;
  • or과 and를 여러개 쓸 때 괄호 잘 넣어서 사용하자
  • select round(123.4567) from dual;
    select round(123.4567)만 쓰면 안되기 때문에 from dual사용. 폼 맞추기 위해서 쓰는 것.
profile
계속 나아가기

0개의 댓글