my sql 은 어떻게 두 집합 의 교 집합/차 집합/집합 을 가 져 옵 니까?

my sql 에서 흔히 볼 수 있 는 장면 으로 두 데이터 세트 의 교 집합 과 차 집합 을 가 져 옵 니 다.
순서
1.두 집합의 구조 가 일치 하고 대응 하 는 필드 수,필드 유형
2.두 집합 을 UNION ALL 키워드 로 합 친 결과 중복 되 는 모든 집합 이 있 습 니 다.
3.위의 모든 집합 을 GROUP BY id
4.마지막 으로 HAVING COUNT(id)=1 은 1 이라는 뜻 으로 한 번 밖 에 나 오지 않 았 기 때문에 이것 은 차 집합 이 고 2 와 같 으 면 교 집합 이다.
코드 데모
차 집
아래 sql 에 뚜렷 한 문제 가 있 습 니 다.하지만 이것 은 하나의 표시 일 뿐 입 니 다.
한 표 에서 조회 할 때 교 집합 과 차 집합 을 사용 할 필요 가 없고 조건 을 합 쳐 직접 조회 할 수 있 습 니 다.뜻 을 알 수 있 으 면 됩 니 다.
다음 sql 은 모든 비 기술 부 직원 의 id,code,name 을 찾 습 니 다.

SELECT a.* FROM(
    SELECT id,code,name FROM test_emp
    UNION ALL
    SELECT id,code,name FROM test_emp WHERE dept='JSB'
)a GROUP BY a.id HAVING COUNT(a.id)=1
교차 하 다
아래 sql 은 모든 기술 부 연령 이 25 이상 인 직원 을 찾 는 것 을 의미 합 니 다.

SELECT a.* FROM(
    SELECT id,code,name FROM test_emp WHERE age>25
    UNION ALL
    SELECT id,code,name FROM test_emp WHERE dept='JSB'
)a GROUP BY a.id HAVING COUNT(a.id)=2
모으다
다음 sql 은 모든 기술 부 직원 과 나이 가 30 이상 인 직원 을 찾 는 것 을 의미 합 니 다.
유 니 온 은 중 복 된 내용 을 자동 으로 제거 하여 중복 되 지 않 는 결과 집합 을 얻 을 수 있 습 니 다.

SELECT a.* FROM(
    SELECT id,code,name FROM test_emp WHERE age>25
    UNION
    SELECT id,code,name FROM test_emp WHERE dept='JSB'
)a
my sql 에서 교차,집합,차 집합,왼쪽 연결,오른쪽 연결
my sql 을 공부 한 지 한 달 이 되 었 습 니 다.이 달 에 모두 수요 에 따라 데이터 시트 에 대해 기본 적 인 조작 을 했 습 니 다.이 과정 에서 왼쪽 연결,오른쪽 연결,교 집합,차 집합 등 을 자주 사용 하여 현재 그 기본 적 인 조작 을 요약 하고 정리 합 니 다.
데이터 원본:
표 1:
id name sex age
1 mike 1 남 34
1 mike 2 남 23
1 mike 3 녀 24
2 mike 1 남 46
2 mike 2 남 35
2 mike 3 남 42
2 mike 4 남 62
3 mike 1 녀 45
4 mike 5 남 72
5 mike 4 녀 23
표 2:
id school
북경대학
청화대학
3 하 버드 대학교
7 MIT
왼쪽 연결:
어떤 등가 조건 에 따라 시 계 를 연결 하 다.이 실험 은 id 가 같은 상황 에서 왼쪽 연결 을 진행 합 니 다.
code:

select a.*,b.school 
FROM 
(SELECT * FROM mike1.test001) a
LEFT JOIN
(SELECT id,school FROM mike1.test003 ) b
ON a.id=b.id
결 과 는 다음 과 같다.표 1 을 바탕 으로 표 2 를 연결 하여 같은 id 번호 와 일치 합 니 다.

오른쪽 연결:
표 2 를 기반 으로 id 와 같은 필드 를 통 해 오른쪽 으로 연결 합 니 다.
code:

select a.*,b.school 
FROM 
(SELECT * FROM mike1.test001) a
right JOIN
(SELECT id,school FROM mike1.test003 ) b
ON a.id=b.id
결과:

너 희 는 결과 에 문제 가 있다 고 생각 하 니 아니면 문제 가 없다 고 생각 하 니?
교차:
id 번호 가 같 으 면 표 1 과 표 2 를 내부 연결 하고 같은 부분 을 취하 고 다른 부분 은 생략 합 니 다.
code:

select a.*,b.school 
FROM 
(SELECT * FROM mike1.test001) a
inner JOIN
(SELECT id,school FROM mike1.test003 ) b
ON a.id=b.id
결과:

차 집합:
차 집 은 우리 수학 중학교 의 교,합,합 등 집합 작업 과 비슷 하 다.
code 1:표 2 와 표 1 이 같은 부분 을 취 하 는 것 은 우리 위 에서 교 집합 을 취 하 는 두 번 째 방법 입 니 다.

select a.id,a.name,a.sex,a.age,b.school 
FROM 
(SELECT * FROM mike1.test001) a
LEFT OUTER join
(SELECT id,school FROM mike1.test003 ) b
ON a.id=b.id
WHERE b.id IS NOT null
결과:

code 2:표 1 의 id 가 표 2 에 있 는 id 의 차 이 를 추출 하고 마지막 으로 데 이 터 를 보 여 줍 니 다.

select a.id,a.name,a.sex,a.age,b.school 
FROM 
(SELECT * FROM mike1.test001) a
LEFT OUTER join
(SELECT id,school FROM mike1.test003 ) b
ON a.id=b.id
WHERE b.id IS  null
결과:

이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기