오라클

오라클 쿼리

chantleman 2024. 7. 31. 18:57

 

 

 

오라클 다른 계정 테이블에 있는 데이터 조회하는 법

 

사용자 이름.테이블명

	SELECT * FROM pc03.MEMBER;

 

 

 

 

일련번호로 행번호 생성하기 (시퀀스 x)

select nvl(max(mem_no),0)+1

    INSERT INTO MEMBER(mem_no, id, pw, name, reg_date)
    VALUES(
        (select nvl(max(mem_no),0)+1    
            from member),
        'ID',
        'PW',
        'NAME',
        SYSDATE);

 

mem_no에 1부터 증가시키는 행번호 삽입하기

 

 

 

 

이전값, 다음값 (lag, lead)

lag: 이전 행의 값 리턴

lead: 다음 행의 값 리턴

 

lag(컬럼명, [값을 가져올 행 위치], [값이 없을 경우 기본값]) over([partition by 그룹 컬럼명] order by 정렬 컬럼명)

lead(컬럼명, [값을 가져올 행 위치], [값이 없을 경우 기본값]) over([partition by 그룹 컬럼명] order by 정렬 컬럼명)

    SELECT empno
         , ename
         , job
         , sal
         , LAG(empno) OVER(ORDER BY empno)  AS empno_prev
         , LEAD(empno) OVER(ORDER BY empno) AS empno_next
      FROM emp 
     WHERE job IN ('MANAGER', 'ANALYST', 'SALESMAN');

 

현재행을 중심으로 이전 행의 사번과 다음 행의 사번 출력

 

 

    SELECT empno
         , ename
         , job
         , sal
         , LAG(empno, 2, 9999) OVER(ORDER BY empno) AS empno_prev
      FROM emp 
     WHERE job IN ('MANAGER', 'ANALYST', 'SALESMAN');

현재 행을 중심으로 두번째 이전 행 값 출력

가져올 행의 값이 없을 경우 기본값 9999를 출력

 

 

 

 

    SELECT empno
         , ename
         , job
         , sal
         , LAG(job) OVER(PARTITION BY job ORDER BY empno) AS empno_prev
      FROM emp 
     WHERE job IN ('MANAGER', 'ANALYST', 'SALESMAN');

 

그룹 컬럼 기준으로 이전 값 또는 다음값 표시

 

 

 

 

여러 컬럼 한번에 수정하기

    update board
    set (cnt,content) = (select cnt+1, content from board where board_no=1)
    where board_no=1;

 

 

 

 

 

복잡한 select문 처리하기(with as)

 

    with data as
    	(select c.*, mem_name, mem_add1, p.*
    		from cart c , member m , prod p
    		where c.cart_member = m.mem_id
    		and c.cart_prod = p.prod_id)
        
    select * from data
    where cart_member='a001';

with as 구문 이용해서 테이블 조인 후 그 결과를 통해 데이터 조회하려고 하는데

조회할 때마다 일일이 테이블 조인하기 힘드니까

 

쿼리가 복잡할 때는

with 테이블 as (쿼리문) 구문으로 한 번 끊으면

data 라는 테이블에 쿼리 결과들이 담기게 되고

 

그 data 테이블로 select 하면 훨씬 간편하게 조회할 수 있음

 

 

 

 

복잡한 select문 처리하기2 (view 만들기)

    create view data
    as 
    	(select c.*, mem_name, mem_add1, p.*
    		from cart c ,member m ,prod p
    		where c.cart_member = m.mem_id
    		and c.cart_prod = p.prod_id);
    select sum(prod_price*cart_qty) 
    from data 
    where cart_member='a001';

'오라클' 카테고리의 다른 글

코드조각  (0) 2024.08.02
MERGE INTO  (0) 2024.08.01
오라클 FK 설정  (0) 2024.07.31
테이블스페이스  (0) 2024.07.30
다른 사용자 db 접속  (1) 2024.07.24