'Oracle SQL'에 해당되는 글 5건

  1. 2010/08/06 boyo 7.2 / DCL
  2. 2010/08/06 boyo 6.30 / DDL and Transantion
  3. 2010/08/06 boyo 6.25 / Date and Nesting Function
  4. 2010/08/06 boyo 06.23 / sqlplus & function
  5. 2010/08/06 boyo 06.22 / oracle install & sql intro

7.2 / DCL

Oracle/SQL 2010/08/06 14:09
with read only 읽기 전용
select view_name from user_views;--뷰 확인
sequences
일련번호 생성기, PK 기본값
next.val : transaction의 영향 안받음., 다음 숫자
currentval.val : transcation의 영향 받음., 세션에서의 마지막 리턴 숫자
cache 메모리에서 미리 읽어 드림.
cycle : maxvlaue에 도착하면 minvalue로 바꿔라

create sequence ss
increment by 10
start with 5
maxvalue 20
minvalue 3
cycle
nocache

select sequence_name from user_sequences;
시퀀스 확인

index
select index_name from user_indexes
인덱스 확인
index은 primary key로 설정하면 인덱스가 자동으로 생성
primary key로 생성된 인덱스 삭제 방법
alter table ttt drop constraint sys_C005440;
수동으로 생성된 인덱스 삭제 방법
drop index index_name;

물리적인 rowid 확인
select comm, rowid from emp where comm is not null order by comm

built-in view
 performance view - from 메모리(V$~~시작 : v$fixed_table)
 data dictionary view - from 파일 [dictionary view] : (DBA_~~ : 전체, ALL_~~ : 접근가능한, USER_~~ : 내가소유한)

 scott 소유한 테이블
 select count(*) from user_tables;
 scott 접근 가능한 테이블
 select count(*) from all_tables;
 db전체의 테이블 수(sysdba)
 select count(*) from dba_tables;
 전체 view(sysdba)
 select count(*) from dba_views;
 현재 접속자(session) 리스트(sysdba)
 select username from v$session where username is not null

세션관련 테이블
select name from v$fixed_table where name like '%SESSION%';

--built-in view검색하기(save fv)
select view_name from dba_views where view_name like upper('%&key%')

select CONSTRAINT_NAME, CONSTRAINT_TYPE from USER_CONSTRAINTS where TABLE_NAME='EMP'

07.02 오후 dcl

grant select on emp to hr;
revoke select on emp from hr;
rol 권한의 집합, 권한 받을 때는 유저처럼 권한 줄때는 system권한처럼...

ddl -- alter문
 add - defualt
 modify - defualt
 drop

flashback 기능 -> 과거의 변화를 추적 혹은 복원
external 테이블 -> text파일을 select할 수 있음.

flashback

external tables -> text파일을 select할수 있음

insert all
insert first

dss 의사결정지원 시스템
dw-dss 분석
1.자료수집 - external table
2.분류작업 -
3.분석
4.레포팅
rollup : 부분합
cube : cross tabulation질의 (차원질의,타블릿질의)

5장
date
timestamp : 소주점 이하 초까지
timestamp with timezone : 위에꺼 플러스 시간대 정보
timestamp with local timezone : 시간대 정보가 자동으로 변경
interval day to second (3 12:13:5) : 3일 12시간 13분 5초
interval year to month 3-4 : 3년 4개월

6장
서브쿼리

7장
트리구조 구현
self조인응용.

8장
Regular Expression(정규표현식)

기존    10g정규표현식 응용(4개 함수로)
컬럼명 like 키문자열  regexp_like(컬럼명,표현식)
replace    regexp_replace
substr    regxp_substr
instr    regxp_instr

2010/08/06 14:09 2010/08/06 14:09

statment-level rollback
ex)ddl 실패시 해당 문장만 rollback되고 자동으로 commit됨
read consistency commit하기 전까지는 다른 유저가 못 봄

table : 데이터를 저장하는 객체
view : select문 저장 객체(table처럼 사용됨)
sequence : 일련번호 생성기
 create sequence t2s;
 t2s.nextval;
 select t2s.currval from dual;

index : 검색속도 향상위해 미리 만든 객체
create index

synonym : 동의어

질의 실행 시간 측정 (set timing on)
질의의 실행 계획 확인 set autot on exp
truncate 공간까지 비워짐(delete은 undo 테이블에 복사하기때문에 느리고 공간도 안비워짐)

select emp.ename from scott.emp; 테이블 명과 유저명 생략(당연한 거니까 ㅋㅋㅋ)
다른 유저의 테이블을 볼러면 유저명을 써서 사용한다.

data types
varchar2(size) 가변길이-> 글자영릐 넓이값까지 저장, 공간은 덜차지
char(size) 고정길이: 글자1이 들어가도 넓이값만큼 공간차지
number(p,s) p: 전체넓이, s : 그중에서도 소주점으로 사용할 자리수.
datetime data types
timestamp : 소주점이하까지
interval year to month
interval day to second
timestamp with local time zone : 자동으로 변환해서 저장.

not null 널을 허용 안함
unique 중복을 허용 안함, 에러위치 모름
primary key not null + unique
foreign key 다른(특정) primary key값만 허용.
check 특정 조건만 허용

talbe level로 하는 것을 권장
inline방식 constraint 지정
create table tc2(xx number unique, x2 number); column level
outline방식 constraint 지정
create table tc2a(xx number, yy number, constraint tc2a_uk unique(xx)) table level

create table tc4( id number, yy number, deptno number, constraint tc4_fk foreign key(deptno) references dept(deptno));
constraint tc5_ck check(xx>0);

not null talbe level constraint을 지원하지 않음

crating table as : constraint는 복사가 안됨

alter table
alter table d2 add(xxx number);
alter table d2 add constraint d2_pk primary key(deptno);
alter table d2 modify(xxx number(4) default 0);
alter table d2 drop column xxx;
alter table d2 drop(loc);

테이블이 이미 있다고 하면 찾아보기 (시퀀스나 인덱스에 있을수 있음)
select object_name, object_type from user_objects where object_name like '%&key%'

simple view는 dml이 모두 가능

2010/08/06 14:08 2010/08/06 14:08
  1. 단위

     10^3 k
    10^6 m
    10^9 g
    10^12 t
    10^15 peta
    10^18 exa

  2. date function
  3. months_between 월과 월차이
    add_months 몇개월후
    next_day 돌아오는 해당일
    last_day 해당월일의 마지막날
    round 반올림
    trunc 내림
  4.  implicit(암시적,자동)
    select last_day(sysdate-30) from dual;
  5. explicit(명시적, 수동)
    select to_char(1)||to_char(1), to_number('1')+to_number('1') from dual;
  6. 문자->날짜
    select sysdate-to_date('1986.09.30','yyyy.mm.dd') from dual
  7. 날짜-문자
    select to_char(sysdate,'yyyy')||'년 ' || to_char(sysdate,'MM')||'월' from dual

    hh:hour,hh24,mi:분,ss : 초,ff6: 소수점 이하 초(6자리

    yy(95을 2095년으로 인식) rr(1950~2049년으로 자동 mapping)

  8. nesting functions(중첩 가능한 이유는 리터값이 1개라서)
  9. nvl 널이면 특정값으로 변환
  10. nvl2 널이면 두번째값 리턴 아니면 세번째값 리턴
  11.  SQL> select nvl2(null,1,2), nvl2(123,1,2) from dual;

    NVL2(NULL,1,2) NVL2(123,1,2)
    -------------- -------------
                 2             1

  12. nullif 같으면 널 값리턴, 다르면 첫번째 값

    select nullif(1,1), nullif(1,2) from dual;
    NULLIF(1,1) NULLIF(1,2)
    ----------- -----------
                          1

  13.  coalesce : nul중첩 (null이 아닌 첫번째 파라미터 리턴)
    select coalesce(null,null,null,1) from dual

    COALESCE(NULL,NULL,NULL,1)
    --------------------------
                             1

  14.  성능 때문에
    case expression(where절에서 많이 사용)
    select ename,
        case deptno
         when 10 then 'ACCOUNTING'
        when 20 then 'RESEARCH'
        when 30 then 'SALES'
        when 40 then 'OPERATIONS'
        else 'OPERATIONS'
       end dname
        from emp;
  15.  decode function(select와 from사이에 사용)

    select ename,
    decode( deptno
    , 10 , 'ACCOUNTING'
    , 20 , 'RESEARCH'
    , 30 , 'SALES'
    , 40 , 'OPERATIONS'
    , 'OPERATIONS'
    ) dname
    from emp


     버퍼 사용시 중간 강제 종료시 해결 방법
    ed을 수정하는 중 강제 종료 되면 swp 파일이 남아 있다
    그럼 sqlplus로 접속후 ed 편집하면 에러 메시지 발생
    그럴경우 rm .*.swp 실행

  16.  메뉴얼 보는 법

     otn.oracle.com -> documentation
    키워드 이용 : 단어는 아는데 뜻을 모르는 경우
    ex)는 oe/oe or hr/hr 계정에서
    분류체게 이용. 뜻은 아는데 단어를 모르는 경우
    books->

  17.  락 풀기
    alter user oe identified by oe account unlock;
  18.  4장

    aggregated (group multi-row에 대해 연산하는...)
    select job, count(*) from emp group by job having count(*)>1
    job별로 1명이상인 job의 명수를 구하기.
    stddev 편준편찬(값자체를 이용할때), variance 분산(단순비교형)
    count(컬럼)널이 아닌 값의 갯수
    count(*) row의 갯수
    select avg(nvl(comm,0)) from emp;

    group by 묶은 컬럼명만 사용 가능
    select deptno, avg(nvl(sal,0)), sum(sal) from emp group by deptno;

  19.  5장
    multiple tables (join -92, 99)
    sql 92를 통한 조인
2010/08/06 14:08 2010/08/06 14:08
  1. 질의의 기본 절차
    1. 접속
       conn scott/tiger
    2. 테이블 리스트 확인
       select * from tab;
    3. 테이블 컬럼 리스트
       desc dept;
    4. 질의 확인
      select * from table_name;
  2. sqlplus 명령어
    list : 마지막 실행 명령어
    run : 마지막으로 실행시킨(버퍼에 있는) 명령 실행
    conn : 접속
    show user : 접속한 유저명 보기
    save t : 버퍼에 있는 명령 저장
    @t : 실행(확장자 sql로 자동) t는 파일명
    ! : command 창으로 나가기
    exit : 다시 들어오기
    get t : 해당 파일 불러오기
    ed t : 해당 파일 수정하기
    ed : 버퍼를 편집 - sql명령 1개만 편집가능
    sav t replace : 덮어 씌기
    show all : 설정사항 확인
    set command : 설정 사항 변경
    set linesize : 라인 크기
    /u01/app/oracle/product/10.2.0/db_1/sqlplus/admin/glogin.sql : 세팅 파일
  3. isqlplus : 웹버전 sqlplus
  4. SQL

    select
    * 모든 컬럼
    distinct 중복제거
    expression : 계산식 계산
    alias : 컬럼의 heading을 지정

sql는 대소문자(case-sensitive) 구별 안함. 단 따옴표("')안에서는 구분
' : 문자열
" : 객체명, 비번 컬럼 alias

select 300*3 from dual; dual 가상 테이블 1개만 나오게 함
null값 연산은 null 값

concatenation operator : 문자열 더하기 ||


EX)

select 1+'1', '1'+'1', 1||1, '1'||'1' from dual;

     1+'1'    '1'+'1' 1| '1
---------- ---------- -- --
         2          2 11 11

  1. literal character strings
    select 'Mr. '||ename from emp;

    'MR.'||ENAME
    --------------
    Mr. SMITH
    Mr. ALLEN
    Mr. WARD

  2. alternative quote(q) operator
    select 'Mr. '||ename||'''s salary is '||sal from emp

    'MR.'||ENAME||'''SSALARYIS'||SAL
    -------------------------------------------------------------------
    Mr. SMITH's salary is 800
    Mr. ALLEN's salary is 1600


    select 'i''m a boy.' from dual; //9i버전
    select q'-i'm a boy.-' from dual; //10g 버전

  3. distinct : duplicate rows

  4. isqlplus (익스플로러 영문으로 해야 깨지지 않음)

  5. append sql

    EX)
    SQL> select * from
      2
    SQL>
    SQL> a  emp
      1* select * from emp
    SQL> r
      1* select * from emp

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80        800                    20

where 은 로우 마다 비교

정규표현식 검색

is null
is not null

rules of precedence (연산자 우선순위)
(), */+-, ||(문자열 더하기) , < =, like, is null, between, between, not, and, or

&변수 정의 / 매번 실행 물어봄
&&변수 / 처음 한번만 물어봄 , define 변수에 등록함
define 환경 변수 셋팅
undefine sortcolumn 환경변수 지우기
set verify off

  1. Function
    1. user defined function : pl/sql 로 만든 함수
    2. built-in function
      1.  single function :
          ex)
          select power(2,10) from dual;,
          select ename, sal+nvl(comm, 0) from emp;
          select ename from emp where ename like upper('%bl%')
        1. character : lower, upper, initcap
             concat ||
             substr 뽑아내기
             length 길이
             instr 몇번째 있는가?
             lpad | rpad 채우기
             trim 양끝단 '' 없애기
             replace 치환
        2. number
             round : 반올림 round(11.2111, 2)
             trunc : 내림
             mod : 나머지 mod(1600,300)
        3. date function : sysdate(시스템 날짜)
              alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
             1일(시간) = 숫자 1
             시각 + 시간 = 시각
             시각 - 시각 = 시간
             하루 1440분 / 86400초
        4. conversion
        5. general
      2.  group function : count(*), sum(sal)
    3. function의 arg는 n개 result는 1개
2010/08/06 14:07 2010/08/06 14:07
  1. 윈도우 오라클 설치
    1. setup 실행 안될 시
    2.  / install/oui 실행 후 설치
  2. 설치시 주의점
    1. 설치 파일이 있는 폴더에 한글이나 특수문자 있으면 안됨.
    2.  설치 유저명에 특수문자나 한글 있으면 안됨.
    3. 기존 버전 정리... 처음 설치시는 삭제
  3. 기존 버전 설치 여부 확인 방법
    1. cmd -> sqlplus
    2. 제어판 - 관리도구 - 서비스 - 관련서비스가 있음
  4. 설치 후 확인 절차
    1. cmd -> sqlplus / as sysdba  -> select status from v$instance;

      STATUS
      ------------
      OPEN  <-- 설치 완료

  5. 윈도우 오라클 삭제 방법
  6.  실행 - regedit

  7.  local_machin - software - oracle <- delete

  8.  local_machin - system - controlset001 - services - oracle 시작하는 서비스 4개(기본적으로)
    - controlset 폴더 있는 거 전부 2차 처럼 지우기

  9.  재부팅

  10.  c:\Program files\oracle <- 폴더 삭제

  11. INTRO
    1. 소개

    Dr.E.F.Codd(전산, 집합론)
    IBM에서 상용화

  12. 데이터베이스와의 차이점

    종이문서 : 간단한 경우

    EXCEL  : 복사 용이, 보관용이 / 파일을 메모리에 올리기 때문에

    데이터베이스 : 동시사용자 지원, 대용량 지원

  13.  정리

    인사DB 샘플
     직원명부 부서리스트
    SCOTT  EMP   DEPT     <--수업용
    HR EMPLOYEES DEPARTMENTS <--숙제용, 교재용

    설계시 Entity / 테이블 (실제 존재)
    Attribute 컬럼
    UID PK

    PK(NOT NULL + UNIQUE)
    FK(다른 테이블의 PK만 들어오도록 함)


    select from  SQL -> oracle server
    테이블 <-  Cursor

    빌트인 뷰

  14. SQL

    1. Query

      select

    2. DML

      insert  
      update
      delete
      merge 있으면 업데이트 없으면 삽입

    3. DDL
      create  
      alter
      drop
      rename
      truncate 비우기
      comment 주석달기

    4. DCL

      grant  권한주기
      REVOKE 권한뺏기

    5. Transaction

      Transaction (all or nothing) 전무 혹은 전부를 보장
      저장 commit
      취소 rollback
      savepoint

    6. 기타

      DML (Transaction 수동)
      DDL DCL (Transaction 자동)

2010/08/06 14:06 2010/08/06 14:06