SQL 왼쪽 외부 연결,오른쪽 외부 연결,전체 연결,내부 연결

23238 단어 sql
연결 조건 은 FROM 또는 WHERE 자구 에서 지정 할 수 있 으 며,FROM 자구 에서 연결 조건 을 지정 하 는 것 을 권장 합 니 다.WHERE 와 HAVING 자구 에 도 검색 조건 을 포함 하여 연결 조건 에서 선택 한 줄 을 추가 로 선별 할 수 있 습 니 다.
연결 은 다음 과 같은 몇 가지 로 나 눌 수 있 습 니 다.
내부 연결.전형 적 인 연결 연산 은=또는<>와 같은 비교 연산 자 를 사용한다.포괄 하 다
동일 한 연결 과 자연 연결.
내부 연결 은 비교 연산 자 를 사용 하여 표 마다 공 유 된 열의 값 에 따라 두 표 의 줄 과 일치 합 니 다.예 를 들 어 students 와 courses 표 중 학생 표지 번호 가 같은 모든 줄 을 검색 합 니 다.
외부 연결.외부 연결
왼쪽 외부 연결,오른쪽 외부 연결 또는 전체 외부 연결

FROM 자구 에서 외부 연결 을 지정 할 때 다음 몇 개의 키워드 중 한 그룹 으로 지정 할 수 있 습 니 다.
LEFT JOIN 또는 LEFT OUTER JOIN.
왼쪽 에서 밖으로 연 결 된 결과 집합 은 LEFTOUTER 자구 에서 지정 한 왼쪽 표 의 모든 줄 을 포함 합 니 다.연결 열 에 일치 하 는 줄 만 있 는 것 이 아 닙 니 다.왼쪽 표 의 한 줄 이 오른쪽 표 에 일치 하 는 줄 이 없다 면 연 결 된 결과 집합 줄 에서 오른쪽 표 의 모든 선택 목록 열 은 빈 값 입 니 다.
라이트 존 이나 라이트 아웃 터 존.
오른쪽 에서 바깥으로 연결 하 는 것 은 왼쪽 에서 바깥으로 연결 하 는 역방향 연결 이다.
오른쪽 표 의 모든 줄 을 되 돌려 줍 니 다.오른쪽 표 의 한 줄 이 왼쪽 표 에 일치 하 는 줄 이 없 으 면 왼쪽 표 에 빈 값 을 되 돌려 줍 니 다.
FULL JOIN 또는 FULL OUTER JOIN.
전체 외부 연결 은 왼쪽 표 와 오른쪽 표 의 모든 줄 을 되 돌려 줍 니 다.한 줄 이 다른 표 에 일치 하 는 줄 이 없 을 때 다른 표 의 선택 목록 열 은 빈 값 을 포함 합 니 다.표 사이 에 일치 하 는 줄 이 있 으 면 전체 결과 집합 줄 은 기본 표 의 데이터 값 을 포함 합 니 다.
교차 연결.
교차 연결 은 왼쪽 표 의 모든 줄 을 되 돌려 줍 니 다.왼쪽 표 의 모든 줄 과 오른쪽 표 의 모든 줄 을 조합 합 니 다.교차 연결 을 피리 칼 적 이 라 고도 한다.
예 를 들 어 아래 의 내부 연결 검색 은 특정한 출판사 와 같은 주 와 도시 에 사 는 작가 이다.
USE pubs
SELECT a.au_fname, a.au_lname, p.pub_name
FROM authors AS a INNER JOIN publishers AS p
ON a.city = p.city
AND a.state = p.state
ORDER BY a.au_lname ASC, a.au_fname ASC
FROM 자구 의 표 나 보 기 는 내부 연결 또는 전체 외부 연결 을 통 해 임의의 순서 로 지정 할 수 있 습 니 다.그러나 왼쪽 이나 오른쪽 으로 지 정 된 표 나 보 기 를 밖으로 연결 할 때 표 나 보기 의 순서 가 중요 합 니 다.왼쪽 이나 오른쪽 을 밖으로 연결 하 는 목록 에 대한 더 많은 정 보 는 외부 연결 을 참조 하 십시오.
예:
a 표 id name b 표 id job parentid
1 장.3,1,23,1.
2 이사 2 34 2
왕 무
a.id 와 parentid 존재관계
내부 연결
select a.*,b.* from a inner join b on a.id=b.parent_id
결국
1 장.3,1,23,1.
2 이사 2 34 2
왼쪽 연결
select a.*,b.* from a left join b on a.id=b.parent_id
결국
1 장.3,1,23,1.
2 이사 2 34 2
3 왕 무 null
오른쪽 연결
select a.*,b.* from a right join b on a.id=b.parent_id
결국
1 장.3,1,23,1.
2 이사 2 34 2
null 3 34 4
완전 연결
select a.*,b.* from a full join b on a.id=b.parent_id
결국
1 장.3,1,23,1.
2 이사 2 34 2
null 3 34 4
3 왕 무 null
SQL code
DECLARE
@TA TABLE (IDA INT,VA VARCHAR(10))
DECLARE
@TB TABLE (IDB INT,VB VARCHAR(10))
INSERT INTO @TA
SELECT
1,'AA' UNION SELECT
2,'BC' UNION SELECT
3,'CCC'
INSERT INTO @TB
SELECT
1,'2'  UNION SELECT
3,'58' UNION SELECT
4,'67'
--       
SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A,@TB B
WHERE A.IDA=B.IDB
--   
SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A INNER JOIN @TB B
ON A.IDA=B.IDB
SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A JOIN @TB B
ON A.IDA=B.IDB
--    
SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A LEFT JOIN @TB B
ON A.IDA=B.IDB
SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A LEFT OUTER JOIN @TB B
ON A.IDA=B.IDB
--    
SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A RIGHT JOIN @TB B
ON A.IDA=B.IDB
SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A RIGHT OUTER JOIN @TB B
ON A.IDA=B.IDB
--     
SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A FULL JOIN @TB B
ON A.IDA=B.IDB
SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A FULL OUTER JOIN @TB B
ON A.IDA=B.IDB
--    
SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A CROSS JOIN @TB B
--   
SELECT A.IDA,A.VA,B.IDA,B.VA FROM @TA A,@TA B WHERE A.IDA=B.IDA+1--  table1,table2:
create table table1(id int,name varchar(10))
create table table2(id int,score int)
insert into table1 select 1,'lee'
insert into table1 select 2,'zhang'
insert into table1 select 4,'wang'
insert into table2 select 1,90
insert into table2 select 2,100
insert into table2 select 3,70
  
-------------------------------------------------
table1|table2|
-------------------------------------------------
idname|idscore|
1lee|190|
2zhang|2100|
4wang|370|
-------------------------------------------------
1.  :       、            
2.   :left join   left outer join
(1)            LEFT OUTER             ,             。                ,                         (null)。
(2)sql  
select * from table1 left join table2 on table1.id=table2.id
-------------  -------------
idnameidscore
------------------------------
1lee190
2zhang2100
4wangNULLNULL
------------------------------
  :  table1     ,        table2     ,     null  
3.   :right join   right outer join
(1)                。         。                ,         。
(2)sql  
select * from table1 right join table2 on table1.id=table2.id
-------------  -------------
idnameidscore
------------------------------
1lee190
2zhang2100
NULLNULL370
------------------------------
  :  table2     ,        table1     ,     null  
4.      :full join   full outer join
(1)                  。               ,               。         ,               。
(2)sql  
select * from table1 full join table2 on table1.id=table2.id
-------------  -------------
idnameidscore
------------------------------
1lee190
2zhang2100
4wangNULLNULL
NULLNULL370
------------------------------
  :        (   、   )
 、   
1.  :                     
2.   :join   inner join
3.sql  
select * from table1 join table2 on table1.id=table2.id
-------------  -------------
idnameidscore
------------------------------
1lee190
2zhang2100
------------------------------
  :        table1 table2  
4.  (         )
A:select a.*,b.* from table1 a,table2 b where a.id=b.id
B:select * from table1 cross join table2 where table1.id=table2.id  ( :cross join       where,   on)
 、    (  )
1.  :   WHERE                       。                            。(table1 table2      3*3=9   )
2.    :cross join (    where...)
3.sql  
select * from table1 cross join table2
-------------  -------------
idnameidscore
------------------------------
1lee190
2zhang190
4wang190
1lee2100
2zhang2100
4wang2100
1lee370
2zhang370
4wang370
------------------------------
  :  3*3=9   ,     
4.  (         )
A:select * from table1,table2

  :http://www.cnblogs.com/youzhangjin/archive/2009/05/22/1486982.html

좋은 웹페이지 즐겨찾기