지금까지 우리 쿼리는 한 번에 하나의 무지개 토토에만 액세스했습니다. 쿼리는 한 번에 여러 무지개 토토에 액세스하거나 무지개 토토의 여러 행이 동시에 처리되는 방식으로 동일한 무지개 토토에 액세스할 수 있습니다. 한 번에 여러 무지개 토토(또는 동일한 무지개 토토의 여러 인스턴스)에 액세스하는 쿼리가 호출됩니다.가입쿼리. 쌍을 이룰 행을 지정하는 표현식을 사용하여 한 테이블의 행을 두 번째 테이블의 행과 결합합니다. 예를 들어 모든 날씨 기록과 관련 도시의 위치를 반환하려면 데이터베이스는 다음을 비교해야 합니다.도시각 행의 열날씨무지개 토토이 있는이름모든 행의 열도시무지개 토토을 선택하고 이 값이 일치하는 행 쌍을 선택하세요.[4]이것은 다음 쿼리로 수행됩니다:
SELECT * FROM 날씨 JOIN 도시 ON 도시 = 이름;
도시 | 임시_로 | 임시_안녕 | PRCP | 날짜 | 이름 | 위치 ---------------+---------+---------+------+------------+---------------+------------ 샌프란시스코 | 46 | 50 | 0.25 | 1994-11-27 | 샌프란시스코 | (-194,53) 샌프란시스코 | 43 | 57 | 0 | 1994-11-29 | 샌프란시스코 | (-194,53) (2행)
결과 세트에 대해 두 가지를 관찰하십시오:
헤이워드시에 대한 결과 행이 없습니다. 이는에 일치하는 항목이 없기 때문입니다.도시무지개 토토이므로 조인은 일치하지 않는 행을 무시합니다.날씨무지개 토토. 이 문제를 어떻게 해결할 수 있는지 곧 살펴보겠습니다.
도시 이름을 포함하는 두 개의 열이 있습니다. 이는 올바른 것입니다. 왜냐하면의 열 목록이날씨그리고도시테이블이 연결되어 있습니다. 그러나 실제로 이는 바람직하지 않으므로 다음을 사용하는 대신 출력 열을 명시적으로 나열하는 것이 좋습니다.*:
도시 선택, temp_lo, temp_hi, prcp, 날짜, 위치
FROM 날씨 JOIN 도시 ON 도시 = 이름;
열의 이름이 모두 다르기 때문에 파서는 해당 열이 속한 테이블을 자동으로 찾았습니다. 두 테이블에 중복된 열 이름이 있는 경우 다음을 수행해야 합니다.자격을 갖추다다음과 같이 의미하는 열 이름을 표시하는 열 이름:
SELECT Weather.city, Weather.temp_lo, Weather.temp_hi,
날씨.prcp, 날씨.날짜, 도시.위치
FROM 날씨 JOIN 도시 ON Weather.city = 도시.이름;
조인 쿼리에서 모든 열 이름을 한정하는 것은 좋은 스타일로 널리 간주됩니다. 그러면 중복된 열 이름이 나중에 테이블 중 하나에 추가되는 경우 쿼리가 실패하지 않습니다.
지금까지 본 종류의 조인 쿼리는 다음 형식으로도 작성할 수 있습니다:
선택 *
날씨, 도시에서
어디에서 도시 = 이름;
이 구문은 다음보다 이전 날짜입니다.가입/켜짐구문은 SQL-92에 도입되었습니다. 테이블은 단순히발신절, 비교 표현식이에 추가됩니다.어디절. 이 이전 암시적 구문과 최신 명시적 구문의 결과가입/켜짐구문은 동일합니다. 그러나 쿼리를 읽는 사람은 명시적인 구문을 통해 의미를 더 쉽게 이해할 수 있습니다. 이전에는 조건이 혼합되어 있었지만 조인 조건은 자체 키워드로 도입되었습니다.어디절을 다른 조건과 함께 사용합니다.
이제 우리는 헤이워드 기록을 다시 가져올 수 있는 방법을 알아낼 것입니다. 우리가 쿼리에서 원하는 것은 다음을 스캔하는 것입니다.날씨무지개 토토과 각 행에 대해 일치하는 항목을 찾습니다.도시행. 일치하는 행이 없으면 일부를 원합니다.“빈 값”대신도시무지개 토토의 열. 이러한 종류의 쿼리를외부 조인. (지금까지 본 조인은 다음과 같습니다.내부 조인.) 명령은 다음과 같습니다.
선택 *
FROM 날씨 왼쪽 외부 JOIN 도시 ON Weather.city = 도시.이름;
도시 | 임시_로 | 임시_안녕 | 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그리고temp_hi각각의 열날씨행에서temp_lo그리고temp_hi기타 모든 열날씨행. 다음 쿼리를 사용하여 이를 수행할 수 있습니다.
w1.city, w1.temp_lo AS 낮음, w1.temp_hi AS 높음,
w2.city, w2.temp_lo AS 낮음, w2.temp_hi AS 높음
FROM 날씨 w1 JOIN 날씨 w2
ON w1.temp_lo < w2.temp_lo AND w1.temp_hi w2.temp_hi;
도시 | 낮음 | 높다 | 도시 | 낮음 | 높은 ---------------+------+------+---------------+------+------ 샌프란시스코 | 43 | 57 | 샌프란시스코 | 46 | 50 헤이워드 | 37 | 54 | 샌프란시스코 | 46 | 50 (2행)
여기서 기상표의 라벨을 다음과 같이 변경했습니다.w1그리고w2조인의 왼쪽과 오른쪽을 구별할 수 있습니다. 또한 다른 쿼리에서 이러한 종류의 별칭을 사용하여 일부 입력을 절약할 수도 있습니다. 예:
선택 *
FROM 날씨 w JOIN 도시 c ON w.city = c.name;
당신은 이러한 축약 스타일을 꽤 자주 접하게 될 것입니다.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.