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 표 에 따라 비교 작업 을 합 니 다. 작업 순서 와 연결 이 유사 합 니 다. 두 표 는 이 순환 을 통 해 한 표 가 끝 났 음 을 알 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[Oacle] cent os 6.4 에 Oacle 11gr 2 노트 설치설치 환경: Linux jwg02.jws 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux tigervnc...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.