13.2.10.11 서브 쿼리의 결합으로 재 작성
경우에 따라서는 일련의 값의 멤버십을 테스트하기 위해 서브 쿼리를 사용하는 다른 방법이있을 수 있습니다. 또한 쿼리 서브 쿼리없이 덮어 쓸 수뿐만 아니라 하위 쿼리를 사용하는 대신 이러한 기술의 일부를 사용하는 것이 효율적이 될 수도 있습니다. 이들 중 하나가 IN()
구조 구문입니다.
예를 들어, 다음 쿼리
SELECT * FROM t1 WHERE id IN (SELECT id FROM t2);
는 다음과 같이 작성할 수 있습니다.
SELECT DISTINCT t1 * FROM t1, t2 WHERE t1.id = t2.id;
다음 쿼리
SELECT * FROM t1 WHERE id NOT IN (SELECT id FROM t2); SELECT * FROM t1 WHERE NOT EXISTS (SELECT id FROM t2 WHERE t1.id = t2.id);
는 다음과 같이 작성할 수 있습니다.
SELECT table1 * FROM table1 LEFT JOIN table2 ON table1.id = table2.id WHERE table2.id IS NULL;
LEFT [OUTER] JOIN
서버가 그것을 더 잘 최적화 할 수있다 (MySQL Server 만의 고유 한 사실이 없습니다)는 동등한 서브 쿼리보다 속도를 향상시킬 수 있습니다. SQL-92 이전에는 외부 결합이 존재하지 않았기 때문에 서브 쿼리가 특정 작업을 수행하기위한 유일한 방법이었습니다. 오늘은 MySQL Server 및 기타 많은 최신 데이터베이스 시스템이 다양한 유형의 외부 조인을 제공합니다.
MySQL Server는 하나의 테이블에서 정보와 경우에 따라서는 한 번에 다수의 테이블에서 정보를 기반으로 행을 효율적으로 제거하는 데 사용할 수있는 여러 테이블의 DELETE
문을 지원합니다. 또한 여러 테이블의 UPDATE
문을 지원하고 있습니다. 섹션 13.2.2 "DELETE 구문" 및 섹션 13.2.11 "UPDATE 구문" 을 참조하십시오.