CROSS APPLY - это не просто JOIN. JOIN находит совпадающие (или не совпадающие) строки между двумя наборами данных. CROSS APPLY - это метод выполнения запроса к каждой строке объекта, к которому вы его применяете. Это может действовать как механизм фильтрации, что-то вроде того, как работает JOIN, но он применяет что-то к каждой строке, поэтому об этом нужно думать.
EXISTS в подзапросе - это совершенно другой механизм фильтрации. Это метод быстрой идентификации, потому что он немедленно прекращает поиск, когда что-то находит. Обычно вы хотите использовать EXISTS, когда вы, вероятно, попадете в критерии фильтра, тем самым сделав поиск как можно короче. Но EXISTS находит не все совпадения. Он просто находит первое совпадение, а затем прекращает поиск.
Таким образом, хотя вы можете получить одинаковые результаты с помощью этих трех разных методов, используйте их, как определено, и вы обычно будете правы. Если вы буквально соединяете два набора данных, используйте JOIN. Если вы хотите запустить процесс, часто фильтр, для каждой строки в наборе данных, используйте CROSS APPLY. Если вам нужен быстрый фильтр для вероятного положительного совпадения, используйте EXISTS.
person
Grant Fritchey
schedule
12.03.2012