Oracle에서는 절이 결과 집합을 반환하는지 여부를 결정하는 데 "존재하지 않음"이 사용됩니다. 절이 결과 집합을 반환하지 않으면 구문은 true입니다. "존재하지 않는 daul에서 * 선택(하위 문장 쿼리 조건)".
이 튜토리얼의 운영 환경: Windows 10 시스템, Oracle 11g 버전, Dell G3 컴퓨터.
존재합니다: 결과 집합을 반환할지 여부에 중점을 두고 반환된 내용을 알 필요가 없습니다. 예:
select name from student where sex = 'm' and mark exists(select 1 from grade where ...)
존재 가이드가 있는 한. 절이 결과 세트를 반환하면 존재 조건은 true로 간주됩니다. 이제 반환된 필드는 항상 1입니다. "select 2 from grade where..."로 변경되면 반환된 필드는 2입니다. 숫자는 의미가 없습니다. 따라서 존재 절은 반환된 내용이 아니라 반환된 결과 집합이 있는지 여부에 관심이 있습니다.
exists와 in의 가장 큰 차이점은 in 절이 하나의 필드만 반환할 수 있다는 것입니다(예:
select name from student where sex = 'm' and mark in (select 1,2,3 from grade where ...)
). in 절은 세 개의 필드를 반환하지만, in은 하나만 허용합니다. 1, 2, 3의 두 필드를 제거하면 됩니다.
그리고 존재하지 않음과 없음은 각각 존재함과 있음의 반대말입니다.
존재함(sql은 결과 집합을 true로 반환)
존재하지 않음(sql은 결과 집합을 true로 반환하지 않음)
존재하지 않음 프로세스는 아래에 자세히 설명되어 있습니다.
은 다음과 같습니다. 다음:
테이블 A
ID NAME
1 A1
2 A2
3 A3
테이블 B
ID AID NAME
1 1 1 B1
2 2 B2
3 2 B 3
테이블 A와 Table B는 일대다 관계 A.ID => B.AID
SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE A.ID=B.AID)
실행 결과는
1 A1
2 A2
이유는 다음과 같이 분석할 수 있습니다
SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=1) --->SELECT * FROM B WHERE B.AID=1有值返回真所以有数据 SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=2) --->SELECT * FROM B WHERE B.AID=2有值返回真所以有数据 SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=3) --->SELECT * FROM B WHERE B.AID=3无值返回真所以没有数据
NOT EXISTS 은 반대입니다
SELECT ID,NAME FROM A WHERE NOT EXIST (SELECT * FROM B WHERE A.ID=B.AID)
실행 결과는
3 A3
EXISTS = IN입니다. 의미는 동일하지만 구문에 약간의 차이가 있는 것 같습니다. IN을 사용하는 경우 효율이 떨어지는 것 같습니다. 인덱스가 실행되지 않는 이유
SELECT ID,NAME FROM A WHERE ID IN (SELECT AID FROM B)
NOT EXISTS = NOT IN 의미는 같지만 구문에 약간의 차이가 있습니다
SELECT ID,NAME FROM A WHERE ID NOT IN (SELECT AID FROM B)
예 때로는 인덱스 없이 특정 열을 선택해야 하는 상황이 발생합니다.
추천 튜토리얼: "Oracle Video Tutorial"
위 내용은 오라클에 존재하지 않는 사용법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!