SQL Server(Transact-SQL)에서 INTERSECT 연산자는 데이터 세트 또는 SELECT 문 모두에서 레코드를 반환하는 데 사용됩니다. 한 쿼리에서만 레코드를 사용할 수 있고 다른 쿼리에서는 사용할 수 없는 경우 INTERSECT의 결과 집합에서 제거됩니다.
INTERSECT 쿼리
INTERSECT 쿼리에서 반환된 결과 설명
설명: INTERSECT 쿼리는 파란색 채우기 영역에 있는 레코드를 반환합니다. 이 레코드는 database1과 database2 모두에 있습니다.
INTERSECT의 각 SELECT는 데이터 유형이 동일한 결과 세트에서 동일한 수의 열을 가져야 합니다.
INTERSECT 연산자 구문
SELECT bieu_thuc1, bieu_thuc2, … bieu_thucn
FROM bang
[WHERE dieu_kien]
INTERSECT
SELECT bieu_thuc1, bieu_thuc2, … bieu_thucn
FROM bang
[WHERE dieu_kie
n];
변수 이름 또는 변수 값
bieu_thuc
SELECT 문 간에 비교할 열 또는 값입니다. 각 SELECT 문에서 동일한 정보 필드에 있을 필요는 없지만 해당 열의 데이터는 동일해야 합니다.
상태
테이블은 거기에서 레코드를 가져오려고 합니다. FROM 절에 최소한 1개의 테이블이 있어야 합니다.
dieu_kien 위치
옵션. 선택한 레코드에 대해 조건이 충족되어야 합니다.
참고:
- 두 개의 SELECT 문에는 동일한 수의 표현식이 있어야 합니다.
- 각 SELECT 문의 해당 열은 데이터 유형이 동일해야 합니다.
- INTERSECT 연산자는 SELECT 문 사이의 일반 레코드만 반환합니다.
예:표현식 1개 사용
SELECT sanpham_id
FROM sanpham
INTERSECT
SELECT sanpham_id
FROM hangtonk
ho;
이 예에서 sanpham_id가 sanpham 및 hangtonkho 테이블 모두에 나타나면 INTERSECT의 결과 집합에 있습니다.
이제 이 쿼리에 WHERE 조건을 추가합니다.
SELECT sanpham_id
FROM sanpham
WHERE sanpham_id >= 50
INTERSECT
SELECT sanpham_id
FROM hangtonkho
WHERE soluong >
0;
첫 번째 데이터세트는 대시보드 및 sanpham_id
의 레코드를 필터링하고 반환합니다. 50보다 크거나 같습니다. 두 번째 데이터 세트는 hangtonkho
에서 필터링됩니다. 숫자가 0보다 큰 경우 테이블입니다.
예:여러 표현식 사용
SELECT danhba_id, ho, ten
FROM danhba
WHERE ho = 'Anderson'
INTERSECT
SELECT nhanvien_id, ho, ten
FROM nh
anvien;
이 예에서 쿼리는 두 SELECT 문의 교차 결과를 반환합니다. danhba
목록에 레코드가 있는 경우 그 danhba_id
, ho
, ten
danhba
danhba_id
, INTERSECT 쿼리의 이름은 해당 레코드를 반환합니다.
예:ORDER BY 사용
INTERSECT 쿼리와 함께 ORDER BY 절을 사용하여 결과를 정렬합니다.
SELECT nhacung_id, nhacung_ten
FROM nhacung
WHERE nhacung_id > 500
INTERSECT
SELECT congty_id, congty_ten
FROM congty
WHERE congty_ten in ('Apple', 'Microsoft', 'SQL Server')
ORDER BY 2;
두 SELECT 문의 열 이름이 다르기 때문에 ORDER BY 절의 열을 결과 집합에서의 위치로 참조하는 것이 더 쉽습니다. 위의 예에서는 nhacung_ten
결과를 필터링합니다. / congty_ten
ORDER BY 2 구문을 통해 오름차순으로.
nhacung_ten
/ congty_ten
결과 집합에서 두 번째입니다.