목록DB/Oracle (20)
개발자 항해
아래 구문들은 같은 결과값을 나타낸다. 두번째 구문처럼 grouping sets을 쓰면 더 간단히 나타낼수 있다. group by 절에 rollup이나 cube를 쓰면 값이 달라진다. 예) group by rollup dept_id, job_id,mgr_id (d, j, m) (d, j) (d) (전체) 출력 group by rollup (dept_id, job_id),mgr_id (d, j, m) (d, j) (전체) 출력 group by rollup dept_id,( job_id,mgr_id) (d, j, m) (d) (전체) 출력 group by cube dept_id, job_id,mgr_id (d, j, m) (d, j) (j,m)(d,m) (d) (j)(m)(전체) 출력 group by cub..
1. Group화 2. Group by 절 3. HAVING 절 SELECT [column,] group_function(column)... FROM table [WHERE condition] [GROUP BY group_by_expression] [HAVING having_expression] [ORDER BY column]; 4. GROUP BY에 ROLLUP 나 CUBE 사용 1) rollup 기본 그룹화와 소계값을 구해주는 연산자 -rollup(N개 컬럼) => N+1개의 그룹화한 결과가 반환됨 rollup(dept_id) => (dept_id),(전체) => rollup (컬럼 1개) : N+1 = 1 + 1 =2번의 그룹화 rollup(dept_id, job_id) => (dept_id,job..
부서 정보와 사원정보를 조인해서 많이 자주 쓴다고 치자. (부서테이블, 사원정보테이블 따로 있는 상황) 그래서 매번 아래와 같이 조인을 해야한다면.. 불편하다. 그래서 department_name 컬럼을 employees테이블에 추가했다. 추가하고 보니 새로생긴 컬럼에 데이터를 채워야 하는 상황 자료가 많이 일일이 추가하기는 힘들다. 그럴때 상호관련 서브쿼리로 업데이트를 쓰면 편하다. 그리고 update하고 commit;을 해줘야 저장이 된다. delete 구문에도 사용될수있다. 예시는 사직서 낸 사원을 삭제하는 구문.
인라인 뷰에서 데이터 검색을 할수 있고 한테이블에서 다른 테이블로 데이터 복사가 가능하다. 그리고 다른 테이블의 값을 기초로하여 테이블 데이터를 갱신할수 있고 다른 테이블 행을 기초로하여 테이블에서 행을 삭제 할수 있다. 1. subquery로 테이블 복사 2. subquery 구문 1번처럼 쓰나 2번처럼 쓰나 의미가 같다. 그래서 보통 1번 처럼 쓴다. 3. with check option 아래 구문과 위 구문이 비슷해보이지만 아래 구문처럼 with check option 을 붙이면 해당 조건을 만족하는 조건만 삽입시킨다.
메인 쿼리 안에 반복이 되는 쿼리안에 with절로 선언하고 이름을 붙이고 필요한 부분에 이름을 불러 갖다쓰는 개념. with절 결과를 임시저장 해놓고 갖다쓰므로 성능개선에 도움이 된다. 예제1) 예제2) 우리회사 평균 급여보다 큰 부서의 급여 합계를 출력하는 예제 실행 순서는 번호 매긴 순이다.
1. 자기 밑에 부하직원이 존재하는지 출력 아래 처럼 작성해도 같은 결과 값이 나옴 2. 직원이 소속되어 있지 않는 빈부서 구하기 아래와 같이 작성해서 같은 결과 값을 얻는다. 주의!! ) 아래처럼 작성하면 서브쿼리에 null값이 포함되어있어 결과 값이 나오지 않는다.
scalar subquery 는 한행에서 하나의 열값을 반환한다. 1. case의 scalar subquery 1번 서브 쿼리를 실행하고 2번 메인쿼리를 실행( 1번 서브 쿼리만 따로 실행해도 실행된다.) 2. Correlated Subquery (상호관련 서브쿼리) 실행 순서 예시 1) 자신의 부서의 평균급여보다 많은 급여를 받는 사원출력 아래 그림과 같이 반복되면서 실행된다. 상호 관련 서브쿼리 구문을 사용하지 않고도 작성할수 있다. (Inline View 사용) 성능은 상호관련 서브쿼리보다 더 좋다. 그러면 상호 관련 서브쿼리는 왜쓰느냐? 그 서브쿼리를 쓸수밖에 없는 상황이 있다. 예시2) 각 부서에서 급여가 가장 높은 사원의 정보 표시 상호관련 서브쿼리 사용 상호 관련 서브쿼리 사용 안하고 일반적..
1. union 쿼리구문 마다 select 해온 값을 중복 제외하고 모두 출력함 - 사용시 유의점 1) select 절이 컬럼 갯수가 맞아야한다. emp_id, dept_id가 유형이 같아야하고 last_name과 d_name이 유형이 같야야한다. 왜냐하면 같은 컬럼에 나오기때문이다. select emp_id, last_name from emp where d_id=50 union select dept_id, d_name from dept; 2) 이어서 쓸수 있고 이럴때는 우선 순위가 동등하다. select emp_id, last_name from emp where d_id=50 union select dept_id, d_name from dept minus select dept_id, d_name fro..