오라클
오라클 쿼리
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';
728x90