SQL 프로젝션 (또는 뷰 정의)에서 "투영"이란 무엇입니까?


15

오라클의 문서에서 쿼리 최적화 , 아래에서 보기 병합 , 나는 다음과 같은 정보를 발견

뷰 병합 최적화는 선택 항목, 투영 및 조인 만 포함 된 뷰에 적용됩니다 . 즉, 병합 가능한 뷰에는 집합 연산자, 집계 함수, DISTINCT, GROUP BY, CONNECT BY 등이 포함되지 않습니다. (강조 광산)

그러나 나는 그러한 계획이 실제로 무엇을 의미하는지 추측 할 수 있습니다.

답변:


17

관계형 대수에서 투영은 연산에 사용하기 위해 열의 하위 집합을 수집하는 것을 의미합니다. 즉, 투영은 선택된 열의 목록입니다.

쿼리 옵티 마이저 단계에서 프로젝션은 기본 테이블 또는 연산자의 컬럼 서브 세트를 포함하는 일부 설명의 버퍼 또는 스풀 영역으로 표시되거나 후속 조작에서 사용되는 컬럼을 기반으로하는 논리적 뷰로 나타납니다.

뷰에서 프로젝션은 뷰의 기본 쿼리에서 선택한 열 목록과 같습니다.


13

프로젝션 은 테이블에서 발견 된 모든 열 집합의 해당 하위 집합을 나타냅니다. 범위는 0 **에서 전체 세트까지 다양합니다.

테이블에는 테이블의 두 차원에 해당하는 두 개의 "세트"가 있습니다. 각 테이블의 세트가 뿐만 아니라 일련의 . 테이블의 각 개별 값 은이 두 세트 의 특정 교차점 에서 찾을 수 있습니다 . 그러나 Excel 에서와 같이 T60 과 같은 주소로 이동하면 값을 찾을 수 없습니다 .

관계형 테이블에는 고유 한 순서가 없습니다 . 기억해야합니다. 대신 단일 값을 검색하려면 열의 하위 집합 (이 경우 하나)과 행의 하위 집합 (이 경우 하나)을 선택합니다. 사용 가능한 모든 열에서 한 열의 하위 집합을 선택하려면 해당 이름과 테이블 이름 만 알고 있으면됩니다. 열 이름은 테이블 내에서 고유합니다.

값이있는 열을 선택한 후에는 특정 행을 선택해야합니다. 그러나 행의 이름은 행의 이름과 다릅니다. 행을 지정하는 방법은입니다. . . 글쎄, 우리는 정확히하지 않습니다. . . 우리는 우리가 찾고있는 가치에 대해 알고있는 것을 지정합니다. 찾고자하는 가치와 관련이있는 것을 알아야한다. 충분한 관련 정보를 지정할 수 있으면 반환 된 행 집합을 원하는 행으로 줄일 수 있습니다.

대학생이 배낭을 잃어버린 것처럼 생각하십시오. 한 남자가 그것을 잃었다 고 가정 해 봅시다. 그는 길을 잃어 버렸다고 전화를했는데 참석 한 여성은 "예, 배낭이 수십 개 있어요. 설명해 주시겠습니까?" 당신은 "음, 파란색입니까?"라고 말합니다. 그녀는 "당신이 저에게 묻거나 말하고 있습니까?"라고 대답 한 다음 "여덟 개의 파란색을 가지고 있습니다. 그보다 더 잘해야하는데, 당신은 그것에 대해 너무 확신하지 못했습니다." 당신은 "음, 오 그래! 보자! 그것은 내 수학 1010 책을 가지고있다"고 말합니다. "좋아, 이제 네 명 이하 야." 그런 다음 15 분 안에 여자 친구 루시를 만나야한다는 것을 기억하고 수학 1010에서 지루하고 글을 쓴 시간에 배낭의 바닥에 작은 글자로 또 다른 기억을 일으켰습니다. 사랑 루시 ".리키 . "

프로젝션는 말에 비유 될 수있는 어떤 배낭을 - 당신이 잃었다. 선택그것의 속성 을 묘사하는 것에 비유 될 수있다 : 그것은 파란색이고, 수학 1010 책이 있고, 바닥에 "나는 Lucy를 사랑한다"가있다.

SQL에서도 동일한 작업을 수행합니다. 먼저, 어떤 종류의 정보를보고 싶습니까? 둘째,보고 싶은 것을 묘사하는 기준. 이것을 술어 또는 진실 진술 이라고 합니다 . 하나 이상의 세트 멤버에 해당됩니다. 그렇지 않으면 값을 반환하지 않습니다.

* 일부 벤더의 SQL 구현은 Oracle의 Nested Tables와 같은 이러한 규칙을 어기는 수단을 제공합니다. 그러나 표준 2 차원 테이블이 여전히 우세한 형식입니다.

** CJ Date는 "열이없는 테이블"이라는 매우 흥미로운 기사를 썼습니다. 나는 그의 많은 "Writings"기사의 대부분을 읽을 때 매우 가치있는 것을 발견했습니다. 나는 그들을 추천합니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.