서브쿼리

삼전·2023년 6월 11일
0

Oracle

목록 보기
12/15
post-thumbnail

EMP테이블

DEPT테이블

1. EXISTS

  • 서브쿼리의 데이터가 존재하는가의 여부를 먼저 따져 존재하는 값들만을 결과로반환

2. 다중열 서브쿼리

  • Pairwise(쌍비교) Subquery: 서브쿼리의 결과값이 '두 개 이상의 컬럼을 반환'하는 서브쿼리
  • 서브쿼리가 한 번 실행되면서 모든 조건을 검색해서 주 쿼리로 넘겨준다.

3. FROM절 상의 서브쿼리 (사용빈도 높음)

  • 이해: 원래 '테이블을 필터' SELECT한다
  • SQL 작성: SELECT * FROM (SELECT 컬럼1, 컬림2... FROM EMP WHERE 조건컬럼 = 값) ⭐별칭 WHERE 별칭.컬럼 > 조건값;

4. paging

  • SQL 작성: SELECT * FROM(서브쿼리) 별칭 WHERE ROWNUM <= row 수 x 페이지 수
  • where rownum <=3*2 의미는 "한 페이지 3명 볼거고, 2페이지 사원목록이 필요한 경우"

경우1) 한 페이지에 3명 * 2페이지

경우2) 한 페이지에 3명

5. UNION

  • UNION은 두 테이블의 결합을 나타내며, 결합시키는 두 테이블의 중복되지 않은 값들을 반환 합니다.

경우1)

경우2)

6. INTERSECT

  • INTERSECT는 두 행의 집합중 공통된 행을 반환 합니다.
  • SQL 작성 예) SELECT DEPTNO FROM EMP INTERSECT SELECT DEPTNO FROM DEPT;

7.MINUS

  • MINUS는 첫번째 SELECT문에 의해 반환되는 행중에서 두번째 SELECT문에 의해 반환되는 행에 존재하지 않는 행들을 반환 합니다.
  • SELECT DEPTNO FROM DEPT MINUS SELECT DEPTNO FROM EMP;

8.조인(Join)

  • 둘 이상의 테이블을 연결하여 데이터를 검색하는 방법입니다.
  • 보통 둘 이상의 행들의 공통된 값 Primary Key 및 Foreign Key 값을 사용하여 조인합니다.
  • 그러므로 두 개의 테이블을 SELECT문장 안에서 조인하려면 적어도 하나의 칼럼이 그 두
    테이블 사이에서 공유 되어야 합니다.

조인 종류 다이어그램

  • INNER JOIN == JOIN: 이너조인은 '공집합'을 의미한다

경우1)

경우2)

  • Equijoin(동등조인, 내부조인): '='를 사용하여 값들이 정확하게 일치하는 경우에 사용하는 조인을 의미하고 '단순 조인' '내부 조인'이라고 한다. .

  • Non-equi join: 조인 조건이 정확히 일치하지 않는 경우에 사용

salgrade(급여 등급) 테이블:


  • Self join: 때때로 자체적으로 테이블을 조인할 필요가 있다.
  • LEFT OUTER JOIN(LEFT JOIN): 왼쪽 및 공집합을 의미한다. null 값이 나오는 쪽에 +연산자를 해준다

명시적인 방법

  • FULL OUTER JOIN
  • INNER JOIN ~ USING: 조인 양쪽 테이블의 필드명이 같은 필드끼리 조인할 때 테이블을 생략
    즉 짧게, USING(deptno) == on e.deptno = d.depno

9. VIEW

  • CREATE OR REPLACE VIEW 뷰이름 AS 서브쿼리
    예시)
    CREATE VIEW testview
    AS
    SELECT EMPNO, ENAME, SAL FROM EMP;

  • 에러:Ask your database administrator or designated security
    administrator to grant you the necessary privileges

해결법: cmd창에서 sys as sysdba 로그인 후 SQL> grant create view to scott

  • SELECT * FROM TAB; 조회를 하면 TABTYPE은 VIEW라고 나온다.

경우1)

경우2)

여러 문제들

시스템 권한

어떤 유저가 있나 ?
show user
접속
SQL> conn system/master1234
아이디 만들기
SQL> create user test identified by 1234;
권한주기
SQL> grant create session to test;
SQL> create table a(f number); *에러: ORA-01031: insufficient privileges
아이디/비번 바꾸기
alter user test identified by 5678
권한 회수
revoke create session from test;
유저 없앰
drop user test;

profile
풀스택eDot

0개의 댓글