지금까지, 우리의 쿼리는 한 번에 하나의 토토 꽁 머니에만 액세스했습니다. 쿼리는 한 번에 여러 토토 꽁 머니에 액세스하거나 토토 꽁 머니의 여러 행이 동시에 처리되는 방식으로 동일한 토토 꽁 머니에 액세스 할 수 있습니다. 한 번에 여러 토토 꽁 머니 (또는 동일한 토토 꽁 머니의 여러 인스턴스)에 액세스하는 쿼리는라고합니다.Join쿼리. 그들은 한 토토 꽁 머니의 행을 두 번째 토토 꽁 머니의 행과 결합하여 어떤 행을 페어링 할 것인지를 지정합니다. 예를 들어, 관련 도시의 위치와 함께 모든 날씨 기록을 반환하려면 데이터베이스는를 비교해야합니다.City
각 행의 열날씨
토토 꽁 머니이름
의 모든 행의 열도시
토토 꽁 머니,이 값이 일치하는 행 쌍을 선택합니다.[4]이것은 다음 쿼리에 의해 달성됩니다 :
선택 * 날씨에서 도시에 가입 도시 = 이름;
도시 | 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, 날짜, 위치를 선택하십시오 날씨로부터 도시의 도시 = 이름;
열은 모두 다른 이름을 가지므로, 구식은 자신이 속한 토토 꽁 머니을 자동으로 발견했습니다. 두 토토 꽁 머니에 중복 열 이름이있는 경우Qualify당신이 의미하는 것을 보여줄 열 이름은 :
날씨를 선택하십시오. Weather.prcp, weather.date, 도시 Weather에서 Weather.city = Cities.name;의 날씨에 가입합니다.
가입 쿼리의 모든 열 이름을 자격을 갖추는 것은 좋은 스타일로 간주되므로 중복 열 이름이 나중에 토토 꽁 머니 중 하나에 추가되면 쿼리가 실패하지 않도록합니다..
지금까지 보이는 종류의 쿼리에 가입하십시오.
선택 * 날씨, 도시 여기서 도시 = 이름;
이 구문은 사전 날짜입니다.Join
/on
SQL-92에 도입 된 구문. 토토 꽁 머니은 단순히에 나열되어 있습니다.From
조항 및 비교 표현이에 추가됩니다.여기서
절. 이 오래된 암시 적 구문과 새로운 명백한 결과의 결과Join
/on
구문은 동일합니다. 그러나 쿼리 리더의 경우 명시 적 구문은 의미를 쉽게 이해할 수있게합니다. 조인 조건은 자체 키 단어로 소개되는 반면 이전에는 조건이에 혼합되었습니다.여기서
다른 조건과 함께 조항.
이제 Hayward 레코드를 다시 얻을 수있는 방법을 알아낼 것입니다. 쿼리가 원하는 것은를 스캔하는 것입니다.날씨
토토 꽁 머니과 각 행마다 일치하는 것을 찾습니다도시
행 (S). 일치하는 행이 발견되지 않으면 일부를 원합니다“빈 값”도시
토토 꽁 머니의 열. 이런 종류의 쿼리는입니다.외부 조인. (지금까지 본 조인은내부 조인.) 명령은 다음과 같습니다.
선택 * 날씨 왼쪽 외부 궤도에 가입 도시 weather.city = 도시. 이름;
도시 | 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_lo
andtemp_hi
각각의 열날씨
로드temp_lo
andtemp_hi
기타 모든 열날씨
행. 다음 쿼리 로이 작업을 수행 할 수 있습니다.
w1.city, w1.temp_lo로 낮은 w1. w2.city, w2.temp_lo는 낮고, w2.temp_hi는 높다 날씨 W1에서 날씨 W2에 가입하십시오 on w1.temp_lo <w2.temp_lo 및 w1.temp_hi w2.temp_hi;
도시 | 낮음 | 높은 | 도시 | 낮음 | 높은 ---------------+-----+-------+----------------------------------- 샌프란시스코 | 43 | 57 | 샌프란시스코 | 46 | 50 헤이워드 | 37 | 54 | 샌프란시스코 | 46 | 50 (2 줄)
여기서 우리는 날씨 토토 꽁 머니을로 바 꾸었습니다W1
andW2
가입의 왼쪽과 오른쪽을 구별 할 수 있습니다. 다른 쿼리에서 이러한 종류의 별명을 사용하여 일부 타이핑을 저장할 수도 있습니다 (예 :
선택 * 날씨 W에서 W.City = C.Name;의 도시 C에 가입
당신은이 스타일의 약어를 자주 만날 것입니다.
문서에 맞지 않는 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면