oracle sql join

16618 단어 ORACLE
SQL> select * from emp;

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7369 SMITH      CLERK      7902 1980-12-17     800.00           
 7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00 
 7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30
 7566 JONES      MANAGER    7839 1981-4-2      2975.00               20
 7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30
 7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30
 7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10
 7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20

8 rows selected

SQL> select * from dept;
DEPTNO DNAME          LOC
------ -------------- -------------
    10 ACCOUNTING     NEW YORK
    20 RESEARCH       DALLAS
    30 SALES          CHICAGO
    40 OPERATIONS     BOSTON

내부 연결 (inner join) 조 회 는 A 표 의 각 줄 과 B 표 의 각 줄 을 비교 하여 연결 서술 어 를 만족 시 키 는 조합 을 찾 습 니 다. 연결 서술 어가 만족 되면 A 와 B 에 일치 하 는 줄 은 열 조합 (병렬 조합) 에 따라 결과 가 집 중 된 줄 입 니 다. 연결 결과 집합 은 먼저 두 장의 표를 피리 칼 적 (교차 연결) 으로 정의 할 수 있 습 니 다.-- A 의 각 줄 과 B 의 각 줄 을 조합 한 뒤 연결 술어 에 만족 하 는 기록 을 되 돌려 준다.SQL 은 '연결' 을 나타 내 는 두 가지 서로 다른 문법 방식 을 정의 합 니 다. 먼저 '연결 기호 표시' 입 니 다. 키 워드 는 JOIN 을 명시 적 으로 사용 하고 그 다음은 '암시 적 연결 기호' 입 니 다. 이른바 '암시 적 연결 기호' 를 사용 합 니 다. 암시 적 연결 기 호 는 SELECT 문장의 FROM 부분 에 연결 할 시 계 를 놓 고 쉼표 로 구분 합 니 다. 이렇게 하면 '교차 연결' 을 구성 합 니 다.WHERE 문 구 는 필터 술어 (필터 조건) 를 설치 할 수 있 습 니 다. 필터 술어 들 은 기능 적 으로 명시 적 연결 기호 와 같 습 니 다.
SQL> select *
  2  from emp
  3  inner join dept
  4  on emp.deptno=dept.deptno;

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO DEPTNO DNAME          LOC
----- ---------- --------- ----- ----------- --------- --------- ------ ------ -------------- -------------
 7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30     30 SALES          CHICAGO
 7566 JONES      MANAGER    7839 1981-4-2      2975.00               20     20 RESEARCH       DALLAS
 7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30     30 SALES          CHICAGO
 7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30     30 SALES          CHICAGO
 7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10     10 ACCOUNTING     NEW YORK
 7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20     20 RESEARCH       DALLAS

6 rows selected

SQL> select *
  2  from emp,dept
  3  where emp.deptno = dept.deptno;

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO DEPTNO DNAME          LOC
----- ---------- --------- ----- ----------- --------- --------- ------ ------ -------------- -------------
 7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30     30 SALES          CHICAGO
 7566 JONES      MANAGER    7839 1981-4-2      2975.00               20     20 RESEARCH       DALLAS
 7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30     30 SALES          CHICAGO
 7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30     30 SALES          CHICAGO
 7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10     10 ACCOUNTING     NEW YORK
 7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20     20 RESEARCH       DALLAS

6 rows selected
같은 연결 (equi - join, 또는 equijoin) 은 비교 연결 (θ연결) 의 특례 입 니 다. 연결 용 어 는 같은 비교 만 사용 합 니 다. 다른 비교 연산 자 를 사용 합 니 다 (예 를 들 어
select * from emp inner join dept on emp.deptno=dept.deptno
SQL> select * from emp inner join dept using (deptno);

DEPTNO EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DNAME          LOC
------ ----- ---------- --------- ----- ----------- --------- --------- -------------- -------------
    30  7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00 SALES          CHICAGO
    20  7566 JONES      MANAGER    7839 1981-4-2      2975.00           RESEARCH       DALLAS
    30  7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00 SALES          CHICAGO
    30  7698 BLAKE      MANAGER    7839 1981-5-1      2850.00           SALES          CHICAGO
    10  7782 CLARK      MANAGER    7839 1981-6-9      2450.00           ACCOUNTING     NEW YORK
    20  7788 SCOTT      ANALYST    7566 1987-4-19     3000.00           RESEARCH       DALLAS

6 rows selected
USING 구 조 는 문법 설탕 뿐만 아니 라 위 에서 조회 한 결과 와 명시 적 서술 어 를 사용 하여 얻 은 조회 결과 가 다 릅 니 다. 특히 USING 부분 에 열 거 된 열 (column) 은
한 번 만 나타 나 고 이름 은 표 이름 없 이 수식 합 니 다.
자연 연결 (natural join) 은 같은 연결 보다 더욱 특례 화 됩 니 다. 두 표 가 자연 연결 을 할 때 두 표 의 모든 이름 이 같은 열 을 비교 합 니 다. 이것 은 암시 적 입 니 다. 자연 연결 입 니 다.
도착 한 결과 표 에서 두 표 의 이름 이 같은 열 은 한 번 만 나타 납 니 다.
SQL> select * from emp natural join dept;

DEPTNO EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DNAME          LOC
------ ----- ---------- --------- ----- ----------- --------- --------- -------------- -------------
    30  7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00 SALES          CHICAGO
    20  7566 JONES      MANAGER    7839 1981-4-2      2975.00           RESEARCH       DALLAS
    30  7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00 SALES          CHICAGO
    30  7698 BLAKE      MANAGER    7839 1981-5-1      2850.00           SALES          CHICAGO
    10  7782 CLARK      MANAGER    7839 1981-6-9      2450.00           ACCOUNTING     NEW YORK
    20  7788 SCOTT      ANALYST    7566 1987-4-19     3000.00           RESEARCH       DALLAS

6 rows selected

교차 연결 (cross join) 은 피리 칼 연결 (cartesian join) 또는 차 승 (Product) 이 라 고도 부 릅 니 다. 모든 유형의 내 연결 의 기초 입 니 다. 시 계 를 행 기록 의 집합, 교차 연결 로 봅 니 다.
이 두 집합 한 피리 칼 적 을 받 아 라.
SQL> select * from emp cross join dept;
SQL> select * from emp,dept;

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO DEPTNO DNAME          LOC
----- ---------- --------- ----- ----------- --------- --------- ------ ------ -------------- -------------
 7369 SMITH      CLERK      7902 1980-12-17     800.00                      10 ACCOUNTING     NEW YORK
 7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00            10 ACCOUNTING     NEW YORK
 7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30     10 ACCOUNTING     NEW YORK
 7566 JONES      MANAGER    7839 1981-4-2      2975.00               20     10 ACCOUNTING     NEW YORK
 7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30     10 ACCOUNTING     NEW YORK
 7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30     10 ACCOUNTING     NEW YORK
 7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10     10 ACCOUNTING     NEW YORK
 7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20     10 ACCOUNTING     NEW YORK
 7369 SMITH      CLERK      7902 1980-12-17     800.00                      20 RESEARCH       DALLAS
 7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00            20 RESEARCH       DALLAS
 7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30     20 RESEARCH       DALLAS
 7566 JONES      MANAGER    7839 1981-4-2      2975.00               20     20 RESEARCH       DALLAS
 7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30     20 RESEARCH       DALLAS
 7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30     20 RESEARCH       DALLAS
 7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10     20 RESEARCH       DALLAS
 7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20     20 RESEARCH       DALLAS
 7369 SMITH      CLERK      7902 1980-12-17     800.00                      30 SALES          CHICAGO
 7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00            30 SALES          CHICAGO
 7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30     30 SALES          CHICAGO
 7566 JONES      MANAGER    7839 1981-4-2      2975.00               20     30 SALES          CHICAGO

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO DEPTNO DNAME          LOC
----- ---------- --------- ----- ----------- --------- --------- ------ ------ -------------- -------------
 7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30     30 SALES          CHICAGO
 7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30     30 SALES          CHICAGO
 7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10     30 SALES          CHICAGO
 7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20     30 SALES          CHICAGO
 7369 SMITH      CLERK      7902 1980-12-17     800.00                      40 OPERATIONS     BOSTON
 7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00            40 OPERATIONS     BOSTON
 7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30     40 OPERATIONS     BOSTON
 7566 JONES      MANAGER    7839 1981-4-2      2975.00               20     40 OPERATIONS     BOSTON
 7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30     40 OPERATIONS     BOSTON
 7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30     40 OPERATIONS     BOSTON
 7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10     40 OPERATIONS     BOSTON
 7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20     40 OPERATIONS     BOSTON

32 rows selected
외부 연결 (outer join) 은 연결 을 요구 하지 않 는 두 표 의 모든 기록 이 상대방 표 에 일치 하 는 기록 입 니 다. 연결 표 는 모든 기록 을 보존 합 니 다. 심지어 이 기록 은 일치 하 는 기록 이 없습니다.
외부 연결 도 유지 해 야 합 니 다. 외부 연결 은 연결 표 에 따라 왼쪽 표, 오른쪽 표 또는 모든 표 의 줄 을 유지 하고 왼쪽 외 연결, 오른쪽 외 연결 과 전체 연결 로 나 눌 수 있 습 니 다. 표준 SQL 언어 에 서 는 외부 연결 이 없습니다.
암시 적 연결 기호 입 니 다. 이것 은 왼쪽 외 연결 이 왼쪽 표 의 모든 기록 과 오른쪽 표 의 일치 하 는 기록 의 조합 을 되 돌려 주 는 것 을 의미 합 니 다. (오른쪽 표 에 일치 하 는 기록 이 없 으 면 오른쪽 표 의 모든 열 에서 온 값 을 설정 합 니 다. 
NULL). 왼쪽 표 의 한 줄 이 오른쪽 표 에 여러 개의 일치 하 는 줄 이 존재 한다 면 왼쪽 표 의 줄 은 오른쪽 표 와 같은 줄 의 수량 을 복사 하고 조합 하여 연결 결 과 를 생 성 합 니 다.
SQL> select * from emp left outer join dept on emp.deptno=dept.deptno;

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO DEPTNO DNAME          LOC
----- ---------- --------- ----- ----------- --------- --------- ------ ------ -------------- -------------
 7369 SMITH      CLERK      7902 1980-12-17     800.00                                        
 7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00                              
 7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30     30 SALES          CHICAGO
 7566 JONES      MANAGER    7839 1981-4-2      2975.00               20     20 RESEARCH       DALLAS
 7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30     30 SALES          CHICAGO
 7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30     30 SALES          CHICAGO
 7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10     10 ACCOUNTING     NEW YORK
 7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20     20 RESEARCH       DALLAS

8 rows selected
오른쪽 외부 연결 은 오른쪽 연결 이 라 고도 부 릅 니 다. 왼쪽 외부 연결 과 완전히 유사 합 니 다. 연결 하 는 표 의 순서 가 반대 일 뿐 입 니 다. 만약 에 A 표 오른쪽 에 B 표를 연결 하면 '오른쪽 표' B 의 모든 줄 에 있 습 니 다.
연결 표 에 적어도 한 번 은 나타 납 니 다. 만약 B 표 의 기록 이 "왼쪽 표" A 에서 일치 하 는 줄 을 찾 지 못 하면 연결 표 에서 A 에서 유래 한 열의 값 을 NULL 로 설정 합 니 다.
SQL> select * from emp 

right outer join dept on emp.deptno=dept.deptno;

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO DEPTNO DNAME          LOC
----- ---------- --------- ----- ----------- --------- --------- ------ ------ -------------- -------------
 7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10     10 ACCOUNTING     NEW YORK
 7566 JONES      MANAGER    7839 1981-4-2      2975.00               20     20 RESEARCH       DALLAS
 7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20     20 RESEARCH       DALLAS
 7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30     30 SALES          CHICAGO
 7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30     30 SALES          CHICAGO
 7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30     30 SALES          CHICAGO
                                                                            40 OPERATIONS     BOSTON

7 rows selected
전체 연결 은 좌우 외부 연결 의 집합 입 니 다. 연결 표 는 연 결 된 표 의 모든 기록 을 포함 하고 일치 하 는 기록 이 없 으 면 NULL 로 채 웁 니 다.
SQL> select * from emp full outer join dept on emp.deptno=dept.deptno;

     EMPNO ENAME      JOB              MGR HIREDATE           SAL       COMM     DEPTNO DEPTNO DNAME          LOC
---------- ---------- --------- ---------- ----------- ---------- ---------- ---------- ------ -------------- -------------
      7369 SMITH      CLERK           7902 1980-12-17         800                                             
      7499 ALLEN      SALESMAN        7698 1981-2-20         1600        300                                  
      7521 WARD       SALESMAN        7698 1981-2-22         1250        500         30     30 SALES          CHICAGO
      7566 JONES      MANAGER         7839 1981-4-2          2975                    20     20 RESEARCH       DALLAS
      7654 MARTIN     SALESMAN        7698 1981-9-28         1250       1400         30     30 SALES          CHICAGO
      7698 BLAKE      MANAGER         7839 1981-5-1          2850                    30     30 SALES          CHICAGO
      7782 CLARK      MANAGER         7839 1981-6-9          2450                    10     10 ACCOUNTING     NEW YORK
      7788 SCOTT      ANALYST         7566 1987-4-19         3000                    20     20 RESEARCH       DALLAS
                                                                                            40 OPERATIONS     BOSTON

9 rows selected
연결 알고리즘 은 SQL SERVER 실체 처리 에서 의 전략 으로 주로 다음 과 같은 세 가 지 를 포함한다.
1. 연결 을 순환 합 니 다. 한 연결 의 입력 이 상당히 적 고 다른 연결 의 입력 이 상당히 클 때 연결 열 에 색인 이 있 습 니 다. 이때 두 표 에 접근 할 때 순환 연결 을 합 니 다.
가장 빠 릅 니 다. 간단 한 상황 에서 전체 표 나 색인 을 스 캔 하고 작은 표 의 연결 필드 를 입력 한 색인 에 먼저 접근 한 다음 값 A 를 얻 은 다음 큰 표 의 색인 에 접근 합 니 다.
A 와 일치 하 는 데 이 터 를 찾 아 이 기록 을 되 돌려 작은 시 계 를 입력 한 기록 을 순환 작업 하고 작은 시 계 를 10 개의 기록 으로 입력 하면 총 10 회 순환 해 야 한다.
연결 열 에 색인 이 생 성 되 지 않 으 면 데이터베이스 최적화 기 는 일시 적 인 색인 을 만 들 고 연결 이 완료 되면 색인 을 지 웁 니 다.
SELECT A.*,B.* FROM A INNER JOIN B ON A.ID = B.PK;
READ (TABLE, i, FIELD) 는 표 TABLE 제 i 조 기록 필드 FIELD 의 값 을 추출 하기 위해 상기 조회 ID 와 PK 가 모두 INT 유형 이 라 고 가정 하고 SCAN (TABLE, FIELD, VALUE) 은 TABLE 표를 스 캔 하 는 것 이다.
필드 FIELD 의 색인 을 스 캔 하여 VALUE 값 이 있 는 지 확인 합 니 다.
int i = 1;
int temp = 0;
for(i; i < 11;)
{
temp = READ(A,i,ID);
SCAN(B,PK, temp);
}
2. 연결 을 통합 합 니 다. 연결 을 합 치 는 입력 이 매우 크 고 연결 열 에 따라 정렬 하면 이 두 표 에 접근 하려 면 연결 을 합 치 는 것 이 가장 빠 른 선택 입 니 다. 연결 할 때 연결 필드 와 같은 것 입 니 다.
색인 을 만 들 지 않 으 면 연결 필드 를 근절 하고 두 표 의 정렬 을 해 야 합 니 다. 색인 이 있 으 면 색인 을 직접 검색 합 니 다. 한 마디 로 두 표 의 정렬 기록 을 얻 은 다음 두 표 의 쌍 을 비교 합 니 다.
두 필드 의 값 이 같은 지 기록 해 야 합 니 다. 예 를 들 어:
SELECT A.*,B.* FROM A INNER JOIN B ON A.ID = B.PK;
그 중에서 A 는 x 조 기록 이 있 고 B 표 는 y 조 기록 이 있 습 니 다. READ (TABLE, i, FIELD) 는 표 TABLE 제 i 조 기록 필드 FIELD 의 값 을 얻 기 위해 서 입 니 다. 상기 조 회 는 다음 과 같이 이해 할 수 있 습 니 다.
먼저 표 A, B 를 필드 ID 에 따라 정렬 한 다음 에 정렬 된 두 표 의 첫 번 째 기록 RA1 과 RB1 을 추출 한 다음 에 RA1 중의 ID 하 RB1 중의 PK 의 크기 관 계 를 판단 하면 위조 코드 를 집행 한다.
다음 과 같다.
int i = 1,int j = 1;
FOR(i; i < x +1, j< y + 1; )
{
IF(READ(A,i,ID) = READ(A,i,ID) ){i ++ ; j++;}
IF(READ(A,i,ID) < READ(A,i,ID) ) {i ++;}
IF(READ(A,i,ID) > READ(A,i,ID) ){j++;}
}
3. 해시 연결, 해시 연결 은 일반적으로 대형, 무질서, 색인 없 는 입력 을 효과적으로 처리 할 수 있 습 니 다. 일반적인 상황 에서 검색 유 틸 리 티 는 연결 과 끼 워 넣 기 순환 연결 방식 을 우선 고려 합 니 다.
... 그러나 표 에 합 리 적 인 색인 이 없 거나 앞의 두 가지 가 효과적으로 처리 되 지 않 을 경우 해시 연결 방식 을 사용 합 니 다. 해시 연결 을 할 때 먼저 메모리 에 연결 필드 에 따라
의 해시 값 은 두 개의 입력 원 의 HASH 표를 만 들 고 그 중 하 나 를 그룹 HASH 로 나 누 어 SELECT TABLE A. *, TABLE B. * FROM TABLE INNER JOIN TABLE B ON 을 조회 합 니 다. 
TABLE A. B = TABLE B. Y 의 실행 도 는 먼저 필드 B 에 따라 메모리 에 TABLE A 의 HASH 표 MEMORY A 를 만 들 고 필드 Y 에 따라 TABLE B 를 메모리 에 HASH 표 MEMORY B 를 만 듭 니 다.
그리고 메모리 에 있 는 HASH 표 에 따라 비교 작업 을 합 니 다. 작업 순서 와 연결 이 유사 합 니 다. 두 표 는 이 순환 을 통 해 한 표 가 끝 났 음 을 알 수 있 습 니 다.

좋은 웹페이지 즐겨찾기