지금까지, 우리의 쿼리는 한 번에 하나의 토토 사이트에만 액세스했습니다. 쿼리는 한 번에 여러 토토 사이트에 액세스하거나 토토 사이트의 여러 행이 동시에 처리되는 방식으로 동일한 토토 사이트에 액세스 할 수 있습니다. 한 번에 동일하거나 다른 토토 사이트의 여러 행에 액세스하는 쿼리를 A라고합니다.Join쿼리. 예를 들어, 모든 날씨 기록을 관련 도시의 위치와 함께 나열하고 싶다고 가정 해보십시오. 그렇게하려면를 비교해야합니다.City각 행의 열날씨토토 사이트이름의 모든 행의 열도시토토 사이트,이 값이 일치하는 행 쌍을 선택합니다.
참고 :이것은 개념적 모델 일뿐입니다. 결합은 일반적으로 가능한 각 행 쌍을 실제로 비교하는 것보다보다 효율적인 방식으로 수행되지만 사용자에게는 보이지 않습니다.
이것은 다음 쿼리에 의해 달성됩니다 :
선택 * 날씨, 도시 여기서 도시 = 이름;
도시 | temp_lo | temp_hi | prcp | 날짜 | 이름 | 위치 --------------+--------+---------+-------+---------------------------------------------------------------------- 샌프란시스코 | 46 | 50 | 0.25 | 1994-11-27 | 샌프란시스코 | (-194,53) 샌프란시스코 | 43 | 57 | 0 | 1994-11-29 | 샌프란시스코 | (-194,53) (2 줄)
결과 세트에 대해 두 가지를 관찰하십시오.
Hayward시에 대한 결과 행은 없습니다. 이것은에 일치하는 항목이 없기 때문입니다.도시Hayward의 토토 사이트이므로 결합은의 타의 추종을 불허하는 행을 무시합니다날씨토토 사이트. 우리는 이것이 어떻게 해결 될 수 있는지 곧 볼 것입니다.
도시 이름을 포함하는 두 개의 열이 있습니다. 이것은의 열 목록이기 때문에 정확합니다.날씨and도시토토 사이트이 연결됩니다. 실제로 이것은 바람직하지 않기 때문에 사용하기보다는 출력 열을 명시 적으로 나열하고 싶을 것입니다.*:
City, Temp_lo, Temp_hi, PRCP, 날짜, 위치를 선택하십시오 날씨, 도시 여기서 도시 = 이름;
운동 :이 쿼리의 의미론을 결정하려고 시도합니다여기서절이 생략 됨.
열에는 모두 다른 이름이 있기 때문에 파서는 자신이 속한 토토 사이트을 자동으로 발견했습니다. 두 토토 사이트에 중복 열 이름이있는 경우자격당신이 의미하는 것을 보여줄 열 이름은 :
날씨를 선택하십시오. Weather.prcp, weather.date, 도시 날씨, 도시 여기서 도시 .name = weather.city;
가입 쿼리의 모든 열 이름을 자격을 갖추는 것은 좋은 스타일로 간주되므로 중복 열 이름이 나중에 토토 사이트 중 하나에 추가되면 쿼리가 실패하지 않도록합니다..
지금까지 보이는 종류의 쿼리 가입 도이 대안 형식으로 작성 될 수 있습니다.
선택 * 날씨 내부에서 도시로 가입합니다 (weather.city = cities.name);
이 구문은 위의 것만 큼 일반적으로 사용되지는 않지만 다음 주제를 이해하는 데 도움이되도록 여기에 표시합니다.
Now we will figure out how we can get the Hayward records back in. What we want the query to do is to scan the날씨토토 사이트과 각 행마다 일치하는 것을 찾습니다도시행 (들). 일치하는 행이 발견되지 않으면 일부를 원합니다"빈 값"도시토토 사이트의 열. 이런 종류의 쿼리는입니다.외부 조인. (지금까지 본 조인은 내부 조인입니다.) 명령은 다음과 같습니다.
선택 * 날씨에서 왼쪽 외부의 도시에 가입 (weather.city = cities.name); 도시 | temp_lo | temp_hi | prcp | 날짜 | 이름 | 위치 --------------+--------+---------+-------+---------------------------------------------------------------------- 헤이워드 | 37 | 54 | | 1994-11-29 | | 샌프란시스코 | 46 | 50 | 0.25 | 1994-11-27 | 샌프란시스코 | (-194,53) 샌프란시스코 | 43 | 57 | 0 | 1994-11-29 | 샌프란시스코 | (-194,53) (3 줄)
이 쿼리는 A라고합니다.왼쪽 외부 조인조인 연산자의 왼쪽에 언급 된 토토 사이트은 적어도 한 번은 출력에 각 행을 갖고 오른쪽의 토토 사이트에는 왼쪽 토토 사이트의 일부 행과 일치하는 행 출력 만 갖습니다. 오른쪽 토토 사이트 일치가없는 왼쪽 토토 사이트 행을 출력 할 때 비어있는 (NULL) 값이 오른쪽 토토 사이트 열에 대체됩니다.
운동 :오른쪽 외부 조인 및 전체 외부 조인도 있습니다. 그 일이 무엇을하는지 알아보십시오.
우리는 또한 토토 사이트에 합류 할 수 있습니다. 이것을 A라고합니다.셀프 조인. 예를 들어, 다른 날씨 기록의 온도 범위에있는 모든 날씨 기록을 찾고 싶다고 가정 해 봅시다. 그래서 우리는를 비교해야합니다.temp_loandtemp_hi각각의 열날씨로드temp_loandtemp_hi다른 모든의 열날씨행. 다음 쿼리 로이 작업을 수행 할 수 있습니다.
w1.city, w1.temp_lo는 낮은 상태, w1.temp_hi As High, W1.city, w1.temp_lo를 선택하십시오. w2.city, w2.temp_lo는 낮고, w2.temp_hi는 높다 날씨 W1, 날씨 W2에서 여기서 w1.temp_lo <w2.temp_lo 및 w1.temp_hi w2.temp_hi; 도시 | 낮음 | 높은 | 도시 | 낮음 | 높은 ---------------+-----+-------+----------------------------------- 샌프란시스코 | 43 | 57 | 샌프란시스코 | 46 | 50 헤이워드 | 37 | 54 | 샌프란시스코 | 46 | 50 (2 줄)
여기서 우리는 날씨 토토 사이트을로 바 꾸었습니다.W1andW2조인의 왼쪽과 오른쪽을 구별 할 수 있습니다. 다른 쿼리에서 이러한 종류의 별명을 사용하여 일부 타이핑을 저장할 수도 있습니다 (예 :
선택 * 날씨 W, 도시 c 여기서 w.city = c.name;
당신은이 스타일의 약어를 자주 만날 것입니다.