개발/교육
(데이터베이스)23일차
kakk789
2022. 4. 27. 18:01
ROWNUM
- 오라클 내부적으로 생성되는 가상 컬럼으로 SQL 조회 결과의 순번을 나타냄
- SELECT 결과에 행 번호를 매겨주는 키워드
1. ROWNUM 단일로만 사용 -- 행번호가 같이 출력됨
2. ROWNUM ..... WHERE ROWNUM <=3 -- 행번호와 3행만 출력됨
3. WHERE ROWNUM <=3 -- 속성에 ROWNUM 안쓰면 행번호는 출력 안되고 3행만 출력됨
- ROWNUM과 ORDER BY를 같이 사용할 때에는 order by 결과를 먼저 동작하도록 하기 위하여 서브쿼리를 사용해야함
예시1
SELECT rownum, custid, NAME
FROM (SELECT custid,NAME FROM customer ORDER BY CUSTID DESC);
예시2
1. 1번은 SELECT가 선 진행하여 5줄 뽑아 온 후에 ORDER BY 가 실행
2. 2번은 ORDER BY 선 진행 후에 정렬된 데이터 기준으로 5줄을 출력
부속질의 (서브쿼리)
스칼라 부속질의
1. SELECT 절
- 단일 행이 오도록 해야함
- 상관/비상관 서브쿼리를 사용하여 진행 (서브 쿼리의 where 절로 상관서브쿼리임을 나타내는 것임)
- 당연한 건데, 상관서브쿼리를 이용한 이유는 단일 값을 리턴 받기 위함.
상관 서브쿼리 사용
(해당 예시의 경우 join을 해도 되지만 상관서브쿼리를 이요하여 진행하였음)
SELECT custid ,
(SELECT NAME FROM customer c WHERE c.custid= o.CUSTID) "name",
SUM(saleprice) FROM orders o GROUP BY custid;
2. UPDATE 절
UPDATE orders
SET bookname =
(SELECT bookname FROM book WHERE book.BOOKID = orders.BOOKID)
인라인 뷰 ( FROM 절 )
- FROM 절에서 결과를 뷰(view)로 반환하기 때문에 인라인 뷰라고 함.
중첩질의 ( WHERE 절 )
- 결과를 한정시 키기 위해 사용
중첩 질의 연산자
비교 | = , > , < , >=, <=, <> |
집합 | IN, NOT IN |
한정 | ALL, SOME(ANY) |
존재 | exists, not exists |
다중행 연산자란?
- 서브쿼리가 where절에 사용될 때에 서브쿼리의 건수가 여러 건 일 때 사용하는 연산자로 in, not, in all some, any 등이 존재
- all, any(some) 서브쿼리의 개수가 여러개 일 때 사용 (>, <, >=, <=)
all
- 3번 고객의 반환 'saleprice' 반환 값이 6개 나오고 all 연산자를 사용함으로써 해당 반환 값을 모두 검사
예시 - 3번고객이 주문한 금액보다 큰 금액을 표현
EXISTS, NOT EXISTS
- 서브쿼리에 데이터의 존재 유무를 확인
- EXISTS 서브쿼리에 데이터가 있으면 메인쿼리 동작
- NOT EXISTS 서브쿼리에 데이터가 없으면 메인쿼리 동작
뷰(VIEW)
- 하나 이상의 테이블을 합하여 만든 가상의 테이블
- 자주 사용하는 복잡한 SQL문을 미리 VIEW로 만들어서 사용
CREATE VIEW 뷰이름[(열이름 [ ,....n])]
AS SELECT 문
장점
- 편리성 및 재사용성 : 자주 사용하는 복잡한 SQL문을 미리 VIEW로 만들어서 사용
- 보안성 : 각 사용자 별로 필요한 데이터만 선별하여 보여줄 수 있음. 중요한 질의의 경우 질의 내용을 암호화 할 수 있음 (개인정보, 급여,건강 같은 민감 정보를 제외한 테이블을 만들어 사용)
- 독립성 제공 : 미리 정의된 뷰를 일반 테이블처럼 사용할 수 있음
뷰 (VIEW) 생성화면
VIEW로 INSERT, UPDATE, DELETE
- VIEW 로 레코드를 INSERT, UPDATE, DELETE 를 하게 되면 부모 테이블로 추가/수정/삭제가 된다.
- 만약, VIEW 생성 시에 조건에 맞지않는 레코드를 추가하게 되면 모테이블에는 추가는 되는데, VIEW 에는 조건식이 맞지 않기 때문에 당연히 나타나지 않는다.
WITH CHECK OPTION
- 뷰 생성시에 사용한 조건식에 맞는 레코드만 추가 /수정 하도록 하기 위한 옵션
CREATE VIEW 뷰이름 AS SELECT ~~ 조건식 WITH CHECK OPTION;
WITH READ ONLY
- 읽기만 가능한 뷰 생성 하는 옵션
CREATE VIEW 뷰이름 AS SELECT ~~ 조건식 WITH READ ONLY;
쿼리문 실행 순서
FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY
반응형