SqlServer 표 연결 튜 토리 얼(문제 분석)

1.2 본 글 의 내용 개요

1.3 본 글 의 내용 요약
SQL 구문 에서 표 연결 에 대해 표 의 수량 에 따라 구분 하면 하나의 표 연결,두 표 연결 과 두 표 이상 의 연결 로 나 눌 수 있 습 니 다.이 글 에서 주로 두 표 의 연결 을 설명 하고 다른 여러 표 의 연결 원 리 는 같 습 니 다.
표 연결 에 대해 여러 가지 종류 가 있 는데 본 고 는 주로 교차 연결,내부 연결,외부 연결(왼쪽 외부 연결,오른쪽 외부 연결,전체 연결),자체 연결 을 설명 한다.
1.4 본 장 테스트 샘플 표 와 Sql
업무 장면:두 장의 표 가 있 는데 고객 표 Customers 와 고객 주문서 Orders 로 나 뉘 는데 SQL 문 구 는 다음 과 같다.
Customes 만 들 고 초기 화

--CREATE TABLE Customers
CREATE TABLE Customers
(
  CustID VARCHAR(50) NOT NULL, --  ID
  CustName VARCHAR(50),--    
  CustCompany VARCHAR(50) --    
)

--Initial Customers

INSERT INTO Customers VALUES('SXN-DD-01','  ','A')
INSERT INTO Customers VALUES('SXN-DD-02','  ','B')
INSERT INTO Customers VALUES('SXN-DD-03','   ','C')
INSERT INTO Customers VALUES('SXN-DD-04','   ','D')
INSERT INTO Customers VALUES('SXN-FF-01','  ','E')
INSERT INTO Customers VALUES('SXN-HH-01','   ','F')
검색 결과:

Order 표를 만 들 고 초기 화 합 니 다.

CREATE TABLE Orders
(
 CustID VARCHAR(50) NOT NULL, --  ID
 OrdetID VARCHAR(50) --  ID
)

--Initial Orders

INSERT INTO Orders VALUES('SXN-DD-01','SCCCCFFFFFSSOX002')
INSERT INTO Orders VALUES('SXN-DD-02','SCCCCFFFFFSSOX0X2')
INSERT INTO Orders VALUES('SXN-DD-03','')
INSERT INTO Orders VALUES('SXN-DD-04','')
INSERT INTO Orders VALUES('SXN-DD-05','SCCCCFFFFFSSOX0H2')
INSERT INTO Orders VALUES('SXN-DD-06','')
검색 결과:

2 문제 도입
Q1:조 회 를 작성 하여 1 부터 1000 까지 의 정수 서열 을 생 성 합 니 다.
3 교차 연결
3.1 SQL 예시 및 예시 결과

 SELECT C.CustID,C.CustName,C.CustCompany,O.CustID,O.OrdetID
FROM Customers AS C
CROSS JOIN Orders AS O
결과:

3.2 예시 결과 분석
교차 연결 은 키워드 인 CROSS JOIN 을 사용 하여 조회 한 결과 피리 카드 축적 이 었 다.상기 결과 에서 알 수 있 듯 이 조회 한 결 과 는 모두 36 줄 의 데 이 터 였 다.왜냐하면 Customers 표 와 Orders 표 는 각각 6 개의 기록 이 있 고 6X6=36 이 있 기 때문이다.
3.3 소결
a.논리 적 으로 교차 연결 은 가장 간단 한 연결 이다.
b.교차 연결 은 하나의 논리 적 처리 절차 인 피리 카 적 만 실현 한다.
c.작업:입력 한 두 개의 시 계 를 조작 하여 연결 시 켜 두 개의 피리 카드 축적 을 생 성 합 니 다.한 입력 표 의 줄 마다 다른 표 의 줄 과 일치 합 니 다.만약 에 한 표 에 m 줄 이 있 고 다른 표 에 n 줄 이 있 으 면 m x n 줄 의 연결 과 집합 을 얻 을 수 있 습 니 다.
d.구조:
  SELECT  tb1.tb1ConumName,tb2.tb2ConumName
  FROM table1 AS tb1
  CROSS JOIN table2 AS tb2
e.교차 연결 에 사용 할 키워드:CROSS JOIN;
f.교차 연결 로 생 성 된 연결 집합 은 가상 표 이 고 가상 표 의 각 열 은 연결 에 참여 하 는 두 개의 표 에서 직접 기원 된다.
4 내부 연결
4.1 SQL 예시 및 예시 결과

SELECT C.CustID,C.CustName,C.CustCompany,O.CustID,O.OrdetID
 FROM Customers AS C
 INNER JOIN Orders AS O
 ON C.CustID=O.CustID
결과:

4.2 예시 결과 분석
내부 연결 은 교차 연결 을 바탕 으로 필터 조건 ON 을 추가 합 니 다.예 를 들 어 customers.CustID=Orders.CustID 를 필터 조건 으로 한 결 과 는 분명 합 니 다.
4.3 소결
내부 연결 규칙 은 피리 칼 적+사용자 술어 필터 입 니 다.우선 교차 연결 처럼 두 입력 표 에 피리 칼 적 연산 을 한 다음 사용자 가 지정 한 술어 에 따라 결 과 를 필터 합 니 다.
5 외부 연결
5.1 SQL 예제 및 예제 결과(왼쪽 외부 연결 만 분석 하고 오른쪽 연결 과 전체 연결 원리 도 같 기 때 문)

SELECT C.CustID,C.CustName,C.CustCompany,O.CustID,O.OrdetID
 FROM Customers AS C
 LEFT OUTER JOIN Orders AS O
 ON C.CustID=O.CustID
결과:

5.2 예시 결과 분석
위 에서 Cutomers 표를 왼쪽 보존 표 로 하고 오른쪽 표 Orders 열 CustID 에 연결 하면 SXN-FF-01 과 SXN-HH-01 이 부족 합 니 다.왼쪽 보존 표를 기준 으로 NULL 자리 차지 문자 로 채 웁 니 다.
5.3 소결
a.외부 연결:피리 컬 축적+ON 여과+외부 줄;
b.외부 연결 에서 시 계 를'보류 하 는'표 로 표시 하려 면 표 이름 사이 에 키워드 인 LEFT OUTER JOIN,Right OUTER JOIN,FULL OUTER JOIN 을 사용 할 수 있 습 니 다.그 중에서 OUTER 키 워드 는 선택 할 수 있 습 니 다.LEFT 키 워드 는 왼쪽 표 의 줄 이 보존 되 어 있 음 을 나타 내 고,Right 키 워드 는 오른쪽 표 의 줄 이 보존 되 어 있 음 을 나타 내 며,FULL 키 워드 는 좌우 양쪽 표 의 줄 이 모두 보존 되 어 있 음 을 나타 낸다.
c.외부 연결 의 세 번 째 논리 조회 처리 절 차 는 보존 표 에서 ON 조건 에 따라 다른 표 에서 일치 하 는 줄 을 찾 을 수 없 음 을 식별 하고 이 줄 들 을 연결 의 두 단계 로 생 성 된 결과 에 추가 하 는 것 이다.연 결 된 비 보존 표 의 열 에 대해 서 는 추가 되 지 않 은 열 들 은 NULL 을 대체 문자 로 합 니 다.
d.외부 연결 보존 표 의 측면 에서 볼 때 외부 연결 결과 의 데이터 줄 은 두 가지 내부 줄 과 외부 줄 을 포함한다 고 볼 수 있다.내부 줄 이란 ON 자구 의 조건 에 따라 연 결 된 다른 쪽 에서 일치 하 는 줄 을 찾 을 수 있 는 것 을 말한다.외부 줄 은 일치 하 는 줄 을 찾 지 못 하 는 것 을 말한다.내부 연결 은 내부 줄 로 만 돌아 가 고 외부 연결 은 내부 줄 과 외부 줄 로 동시에 돌아 갑 니 다.
e.외부 연결 을 사용 할 때 검색 한 ON 자구 에 있 습 니까?아니면 WHERE 자구 에 연결 조건 을 지정 합 니까?외부 연결 보존 표 의 줄 에서 이 문 제 를 고려 하면 ON 자구 의 여과 조건 은 최종 적 인 것 이 아니다.다시 말 하면 ON 자구 의 조건 은 보존 표 의 일부 줄 이 결과 에 나타 날 지 여 부 를 최종 적 으로 결정 할 수 없고 다른 표 의 일부 줄 과 일치 할 수 있 는 지 만 판단 할 수 있다.따라서 최종 적 이지 않 은 조건 을 표현 해 야 할 때(즉,이 조건 은 어떤 줄 이 비 보존 표 와 일치 할 수 있 는 지 만 결정 합 니 다)ON 자구 에서 연결 조건 을 지정 합 니 다.외부 줄 을 생 성 한 후에 필 터 를 사용 하고 여과 조건 이 최종 적 이 기 를 원 하 는 경우 WHERE 자구 에서 조건 을 지정 해 야 합 니 다.
연결
6.1 SQL 예시 및 예시 결과

SELECT C1.CustID AS C1CustID,C1.CustName AS C1CustName,C1.CustCompany AS C1CustCompany,C2.CustID,C2.CustName,C2.CustCompany
 FROM Customers AS C1
 JOIN Customers AS C2
 ON C1.CustID=C2.CustID
결과:

6.2 예시 결과 분석
예 를 들 어 연결 을 포함 한 연결 에서 의 활용 은 다른 연결 에서 의 활용 은 예 를 들 지 않 고 간단 하 다.
6.3 소결
a.하나의 표 로 연결 하여 다른 별명 을 얻 고 별명 으로 연결 합 니 다.
b.자동 연결 은 다른 연결 에 사용 할 수 있 습 니 다.
b.자체 연결 은 교차 연결,내부 연결,외부 연결 등 연결 의 특례 로 볼 수 있다.
7 문제
Q1:KEY

CREATE TABLE Digits
( 
 digit int not null primary key
)
--Initial testing data for Digits
INSERT INTO Digits VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)

--Query

SELECT D3.digit*100+D2.digit*10+D1.digit+1 AS n
FROM Digits AS D1
CROSS JOIN Digits AS D2
CROSS JOIN Digits AS D3
ORDER BY n
8 참고 문헌
【01】Microsoft SqlServer 2008 기술 내막:T-SQL 언어 기초
[02]Microsoft SqlServer 2008 기술 내막:T-SQL 조회
총결산
위 에서 말씀 드 린 것 은 편집장 님 께 서 소개 해 주신 SqlServer 표 연결 강좌 입 니 다.여러분 께 도움 이 되 셨 으 면 합 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!

좋은 웹페이지 즐겨찾기