본문 바로가기
카테고리 없음

SQL 함수

by aitrip 2024. 1. 23.
728x90

 

 

고유 인덱스 생성
CREATE UNIQUE INDEX idx_dept_name
    on department(dname);
    
비고유 인덱스 생성
CREATE INDEX idx_stud_birthdate
    ON student(birthdate);
    
결합 인덱스 생성
CREATE INDEX idx_stud_dno_grade
    ON student(deptno, grade);
    
ASCENDING, DESCENDING INDEX
CREATE INDEX fidx_stud_no_name ON student(deptno DESC, name ASC);

함수 기반 인덱스 
CREATE INDEX uppercase_idx ON emp(UPPER(ENAME));
SELECT * FROM emp WHERE UPPER(ENAME) = 'KING';

인덱스 삭제
DROP INDEX IDX_DEPT_NAME;


1. 인덱스 
-처리 속도를 향상시키기 위해서, 바로 찾기 
-칼럼에 대해 생성하는 객체

고유인덱스: 유일한 값을 가지는 칼럼에 대해 생성하는 인덱스 
비고유인덱스: 중복된 값을 가지는 칼럼에 대해 생성하는인덱스 
단일 인덱스: 하나의 칼럼으로만 구성
결합 인덱스: 두 개 이상의 칼럼을 결합하여 생성
descending index: 칼럼별로 정렬 순서를 별도로 지정하여 결합 인덱스를 생성하기 위한 방법


2. 인덱스 조회

SELECT index_name, uniqueness
    FROM user_indexes
    WHERE table_name = 'STUDENT';

 

 

1. 인덱스 정보 조회

SELECT index_name, column_name
    FROM user_ind_columns
    WHERE table_name = 'STUDENT';

2. 뷰란?
-가상테이블

뮤 생성하기 
create view v_stud_dept101 as
    select studno, name, deptno
        from student
        where deptno = 101;
        
        
select * from v_stud_dept101;        


뷰 생성 함수 (반드시 칼럼 별명을 사용, 아니면 오류)
create view v_prof_avg_sal
    as select deptno, sum(sal) sum_sal, avg(sal) avg_sal
    from professor
    group by deptno;
    
인라인 뷰 예시
select dname, avg_height, avg_weight
    from (select deptno, avg(height) avg_height, avg(weight) avg_weight
            from student
            group by deptno)s,department d
        where s.deptno= d.deptno;

 

 

계층적 질문 top down 방식

select deptno, dname, college
    from department
    start with deptno = 10
    connect by prior deptno = college;
    
 
 계층적 질문 레벨별
 select level
    , lpad(' ', (level-1)*2) || dname 조직도
        from department
        start with dname = '공과대학'
        connect by prior deptno = college;

 

 

계층구조에서 가지 제거 방법 예 1
select deptno, college, dname, loc
    from department
    where dname!= '정보미디어학부'
        start with college is null
        connect by prior deptno = college;
    
계층구조에서 가지 제거 방법 예 2  
select deptno, college, dname, loc
    from department
    start with college is null
    connect by prior deptno = college;
    and dname! = '정보미디어학부';
    
계층적질의문 응용 – CONNECT_BY_ROO    
select LPAD(' ', 4*(LEVEL-1)) || ename 사원명,
        empno 사번,
        CONNECT_BY_ROOT empno 최상위사번,
        LEVEL
        FROM emp
        start with job = upper('president')
        connect by prior empno = mgr;
        
 계층적질의문 응용 – CONNECT_BY_ISLEA
 SELECT LPAD(' ', 4*(LEVEL-1)) || ename 사원명,
    empno 사번,
    CONNECT_BY_ISLEAF Leaf_YN,
    LEVEL
    FROM emp
    START WITH job = UPPER('President')
    
 
 
    CONNECT BY NOCYCLE PRIOR empno = mgr;

 

계층적질의문 응용 – ORDER SIBLINGS BY

SELECT LPAD(' ', 4*(LEVEL-1)) || ename 사원명,
    ename ename2, empno 사번, level
    from emp
    start with job = upper('President')
    connect by nocycle prior empno = mgr
    order siblings by ename;

 

 

댓글