> 데이터 베이스 > MySQL 튜토리얼 > EXCEPT 절을 사용하지 않고 MySQL에서 EXCEPT 기능을 달성하는 방법은 무엇입니까?

EXCEPT 절을 사용하지 않고 MySQL에서 EXCEPT 기능을 달성하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-31 13:26:14
원래의
186명이 탐색했습니다.

How to Achieve EXCEPT Functionality in MySQL Without Using the EXCEPT Clause?

MySQL 쿼리의 EXCEPT 구문 오류

쿼리 "SELECT s.sno FROM Students s EXCEPT SELECT t.sno FROM take t WHERE t .cno = 'CS112';" 구문 오류로 인해 실패합니다. 이는 MySQL이 EXCEPT 구문을 지원하지 않기 때문입니다.

CS112 강좌를 수강한 학생을 제외하는 원하는 결과를 얻으려면 대체 접근 방식을 사용해야 합니다.

NOT IN 조항

한 가지 옵션은 NOT IN을 사용하는 것입니다. 절:

SELECT s.sno 
FROM students s    
WHERE s.sno NOT IN 
(
    SELECT t.sno 
    FROM take t 
    WHERE t.cno = 'CS112'
);
로그인 후 복사

이 쿼리는 CS112 과정의 테이크 테이블에서 sno를 검색하는 하위 쿼리에 없는 모든 학생 sno를 선택합니다.

LEFT JOIN

또 다른 방법은 LEFT를 사용하는 것입니다. JOIN:

SELECT s.sno 
FROM students s    
    LEFT JOIN take t ON s.sno = t.sno
WHERE IFNULL(t.cno, '') != 'CS112'
로그인 후 복사

이 쿼리는 Left 조인을 사용하여 학생을 병합하고 테이블을 가져옵니다. IFNULL() 함수는 cno 컬럼의 null 값을 처리하는데 사용되며, 해당 강좌를 수강한 학생을 제외하고 cno 값이 'CS112'와 같지 않은지 확인하는 조건입니다.

사용 예

제공된 예에서 LEFT JOIN 접근 방식은 모의를 사용하여 시연됩니다. 데이터 세트:

create temporary table temp_students (sno int)

insert into temp_students values (1)
insert into temp_students values (2)
insert into temp_students values (3)
insert into temp_students values (4)
insert into temp_students values (5)
insert into temp_students values (6)
insert into temp_students values (7)
insert into temp_students values (8)
insert into temp_students values (9)
insert into temp_students values (10)

create temporary table temp_take (sno int, cno varchar(50))

insert into temp_take values (1, 'CS112')
insert into temp_take values (2, 'CS112')
insert into temp_take values (3, 'CS112')
insert into temp_take values (4, 'CS112')

SELECT s.sno 
FROM temp_students s    
        LEFT JOIN temp_take t ON s.sno = t.sno
WHERE IFNULL(t.cno, '') != 'CS112'
로그인 후 복사

이 쿼리는 CS112 과정을 수강한 학생을 제외하고 sno의 5~10을 반환합니다.

위 내용은 EXCEPT 절을 사용하지 않고 MySQL에서 EXCEPT 기능을 달성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿