Intersect oracle: INTERSECT ОПЕРАТОР — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

Содержание

LinkedIn

選擇語言Bahasa Indonesia (Bahasa Indonesia)Bahasa Malaysia (Malay)Čeština (Czech)Dansk (Danish)Deutsch (German)English (English)Español (Spanish)繁體中文 (Chinese (Traditional))Français (French)한국어 (Korean)Italiano (Italian)简体中文 (Chinese (Simplified))Nederlands (Dutch)日本語 (Japanese)Norsk (Norwegian)Polski (Polish)Português (Portuguese)Română (Romanian)Русский (Russian)Svenska (Swedish)Tagalog (Tagalog)ภาษาไทย (Thai)Türkçe (Turkish)العربية (Arabic)

عفواً، لم نتمكن من العثور على الصفحة التي تبحث عنها. برجاء المحاولة مرة أخرى للصفحة السابقة أو الانتقال لـمركز المساعدة للمزيد من المعلومات

الإنتقال لموجزك الرئيسي

Omlouváme se, nemůžeme najít stránku, kterou hledáte. Zkuste se vrátit zpátky na předchozí stránku, nebo se podívejte do našeho Centra nápovědy pro více informací

Přejít do informačního kanálu

Vi kan desværre ikke finde den side, du leder efter.

Gå tilbage til den forrige side, eller besøg Hjælp for at få flere oplysninger

Gå til dit feed

Die gewünschte Seite konnte leider nicht gefunden werden. Versuchen Sie, zur vorherigen Seite zurückzukehren, oder besuchen Sie unseren Hilfebereich, um mehr zu erfahren.

Zu Ihrem Feed

Uh oh, we can’t seem to find the page you’re looking for. Try going back to the previous page or see our Help Center for more information

Go to your feed

Vaya, parece que no podemos encontrar la página que buscas. Intenta volver a la página anterior o visita nuestro Centro de ayuda para más información.

Ir a tu feed

Nous ne trouvons pas la page que vous recherchez. Essayez de retourner à la page précédente ou consultez notre assistance clientèle pour plus d’informations

Ouvrez votre fil

Maaf, sepertinya kami tidak dapat menemukan halaman yang Anda cari.

Coba kembali ke halaman sebelumnya atau lihat Pusat Bantuan kami untuk informasi lebih lanjut

Buka feed Anda

Non abbiamo trovato la pagina che stai cercando. Prova a tornare alla pagina precedente o visita il nostro Centro assistenza per saperne di più.

Vai al tuo feed

申し訳ありません。お探しのページが見つかりません。前のページに戻るか、ヘルプセンターで詳細をご確認ください

フィードに移動

원하시는 페이지를 찾을 수 없습니다. 이전 페이지로 돌아가거나 고객센터에서 자세히 알아보세요.

홈으로 가기

Harap maaf, kami tidak dapat menemui laman yang ingin anda cari. Cuba kembali ke laman sebelumnya atau lihat Pusat Bantuan kami untuk maklumat lanjut

Pergi ke suapan

De pagina waar u naar op zoek bent, kan niet worden gevonden. Probeer terug te gaan naar de vorige pagina of bezoek het Help Center voor meer informatie

Ga naar uw feed

Vi finner ikke siden du leter etter.

Gå tilbake til forrige side eller besøk vår brukerstøtte for mer informasjon

Gå til din feed

Nie możemy znaleźć strony, której szukasz. Spróbuj wrócić do poprzedniej strony lub nasze Centrum pomocy, aby uzyskać więcej informacji

Przejdź do swojego kanału

A página que você está procurando não foi encontrada. Volte para a página anterior ou visite nossa Central de Ajuda para mais informações

Voltar para seu feed

Ne pare rău, nu găsim pagina pe care o căutaţi. Reveniţi la pagina anterioară sau consultaţi Centrul nostru de asistenţă pentru mai multe informaţii

Accesaţi fluxul dvs.

Не удаётся найти искомую вами страницу. Вернитесь на предыдущую страницу или посетите страницу нашего справочного центра для получения дополнительной информации.

Перейти к ленте

Sidan du letar efter hittades inte.

Gå tillbaka till föregående sida eller besök vårt Hjälpcenter för mer information

Gå till ditt nyhetsflöde

ขออภัย ดูเหมือนเราไม่พบหน้าที่คุณกำลังมองหาอยู่ ลองกลับไปที่หน้าเพจก่อน หรือดู ศูนย์ความช่วยเหลือ ของเราสำหรับข้อมูลเพิ่มเติม

ไปที่ฟีดของคุณ

Naku, mukhang hindi namin mahanap ang pahina na hinahanap mo. Subukang bumalik sa nakaraang pahina o tingnan ang aming Help Center para sa higit pang impormasyon

Pumunta sa iyong feed

Aradığınız sayfa bulunamadı. Önceki sayfaya geri dönün veya daha fazla bilgi için Yardım Merkezimizi görüntüleyin

Haber akışınıza gidin

抱歉,无法找到页面。试试返回到前一页,或前往帮助中心了解更多信息

前往动态汇总

我們好像找不到該頁面。請回到上一頁或前往說明中心來進一步瞭解

前往首頁動態

НОУ ИНТУИТ | Лекция | Выполнение сложных SQL-запросов

< Лекция 3 || Лекция 4 || Лекция 5 >

Аннотация: В лекции рассматриваются вопросы построения запросов, в которых применяется объединение.

Ключевые слова: SQL, UNION, INTERSECT, EXCEPT

Объединение запросов

Язык SQL предоставляет два способа объединения таблиц:

  • указывая соединяемые таблицы (в том числе подзапросы) во фразе FROM оператора SELECT. Сначала выполняется соединение таблиц, а уже потом к полученному множеству применяются указанные фразой WHERE условия, определяемое фразой GROUP BY агрегирование, упорядочивание данных и т.п.;
  • определяя объединение результирующих наборов, полученных при обработке оператора SELECT. В этом случае два оператора SELECT соединяются фразой UNION , INTERSECT , EXCEPT или CORRESPONDING.
UNION-объединение

Фраза UNION объединяет результаты двух запросов по следующим правилам:

Стандарт не накладывает никаких ограничений на упорядочивание строк в результирующем наборе. Так, некоторые СУБД сначала выводят результат первого запроса, а затем — результат второго запроса. СУБД Oracle автоматически сортирует записи по первому указанному столбцу даже в том случае, если для него не создан индекс.

Для того чтобы явно указать требуемый порядок сортировки, следует использовать фразу ORDER BY. При этом можно использовать как имя столбца, так и его номер (рис. 4.3).

Рис.
4.3.
Выполнение UNION-объединения с упорядочиванием результирующего набора

Фраза UNION ALL выполняет объединение двух подзапросов аналогично фразе UNION со следующими исключениями:

  • совпадающие строки не удаляются из формируемого результирующего набора;
  • объединяемые запросы выводятся в результирующем наборе последовательно без упорядочивания.

При объединении более двух запросов для изменения порядка выполнения операции объединения можно использовать скобки (рис. 4.4).

Рис.
4.4.
Выполнение UNION-объединения для трех запросов

INTERSECT-объединение

Фраза INTERSECT позволяет выбрать только те строки, которые присутствуют в каждом объединяемом результирующем наборе. На рис. 4.5 приведен пример объединения запросов как пересекающихся множеств.

Рис.
4.5.
Выполнение INTERSECT-объединения

EXCEPT-объединение

Фраза EXCEPT позволяет выбрать только те строки, которые присутствуют в первом объединяемом результирующем наборе, но отсутствуют во втором результирующем наборе.

intuit.ru/2010/edi»>Фразы INTERSECT и EXCEPT должны поддерживаться только при полном уровне соответствия стандарту SQL-92. Так, некоторые СУБД вместо фразы EXCEPT поддерживают опцию MINUS (рис. 4.6).

Рис.
4.6.
Выполнение MINUS(EXCEPT)-объединения

Как и для других типов объединения запросов, при выполнении EXCEPT -объединения совпадающие строки не входят в формируемый результирующий набор, что хорошо видно на приведенном рисунке.

Если применяется фраза INTERSECT ALL или EXCEPT ALL, то при пересечении множеств или вычитании множеств повторяемая строка удаляется столько раз из формируемого результирующего набора, сколько она повторяется в объединяемых результирующих наборах.

Фраза CORRESPONDING BY позволяет использовать в объединяемых запросах различное число столбцов: в результирующий набор будут включены только столбцы, указанные в списке. Этот список также определяет порядок включения столбцов в результирующий набор.

Дальше >>

< Лекция 3 || Лекция 4 || Лекция 5 >

Советы по пересечению SQL

Вопрос: Что
делает оператор пересечения SQL в SQL? Как
оператор пересечения отличается от оператора объединения?
Можете ли вы показать пример использования пересечения SQL?

Ответ:   SQL-оператор пересечения
используется, чтобы показать общее пересечение строк из
несколько SQL-запросов. Оператор пересечения Oracle
используется для возврата результатов двух или более операторов select.
Оператор пересечения возвращает только строки, выбранные всеми
запросы или наборы данных. Если запись существует в одном запросе и
не в другом, он будет опущен из пересечения
набор результатов запроса.

Пример использования пересечения

Вот пример SQL с использованием оператора пересечения:

select
идентификатор_поставщика

из
поставщики

ПЕРЕСЕЧЕНИЕ

выберите
идентификатор_поставщика

из
заказы;

В этом примере пересечения мы видим, что только строки,
появляются в ОБОИХ запросах, будут отображаться в наборе результатов.
В этом примере выше, только если supplier_id появляется в обоих
в таблице поставщиков и заказов появится supplier_id
в наборе результатов.


Обучение Oracle от Дона Берлесона


Лучшее на сайте
«Оракул
Учебные курсы» находятся на расстоянии одного телефонного звонка! Вы можете пройти индивидуальное обучение Oracle от Дональда Берлесона прямо в своем магазине!

 


 

Бурлесон — американская команда


Примечание:
Этот оракул
документация была создана в качестве справочника по поддержке и обучению Oracle для использования нашими

Специалисты-консультанты по настройке производительности DBA.
Не стесняйтесь задавать вопросы на нашем

Форум Оракула.

Проверка
опыт!

Любой
следует рассмотреть возможность использования услуг эксперта службы поддержки Oracle.
самостоятельно исследовать свои полномочия и опыт, а не полагаться на
реклама и самопровозглашенная экспертиза. Все законные эксперты Oracle
публиковать
их оракул
квалификации.


Опечатки?

Технологии Oracle меняются, и мы
стремиться обновлять нашу информацию о поддержке BC Oracle. Если вы нашли ошибку
или у вас есть предложение по улучшению нашего контента, мы будем признательны за ваше
обратная связь. Только
электронная почта:

и укажите URL-адрес страницы.


Burleson Consulting

Оракул
Поддержка базы данных

Оракул
Настройка производительности


Удаленные службы баз данных


 

Авторское право © 1996 —  2020

Все права защищены
Бурлесон

Оракул

®
является зарегистрированным товарным знаком корпорации Oracle.

 

Оптимизация производительности для сложных запросов St_geometry в Oracle

Краткое содержание

Предоставленные инструкции описывают, как взять сложную инструкцию SQL, содержащую несколько условий И, и реструктурировать инструкцию SQL, используя несколько подзапросов и дополнительных операторов SQL для повышения производительности. SQL-конструкции.

Процедура

Пример и приведенные ниже шаги демонстрируют неэффективный (медленный) оператор SQL и эффективный оператор SQL в ответ на: «Определить все участки площадью более 100 000 квадратных футов и менее 500 000 квадратных футов, которые находятся в пределах 1/2 мили ( 2640 футов) от крупной магистрали и в зоне промышленной зоны».

В ответ на приведенное выше заявление доступны следующие данные: 558 605 участков (полигонов) для мегаполиса, 2 606 основных_дорог (линий) и 18 653 зонирования (полигонов).

  1. Логическая конструкция SQL для ответа на вопрос просто опирается на набор фильтров предикатов, использующих логическое И с двумя дополнительными операторами пространственного отношения пересечения.

    Для построения запроса необходимо выбрать количество участков (COUNT), которые соответствуют критериям, и указать три таблицы: участки (псевдоним a), основные_дороги (псевдоним b) и зонирование (псевдоним c), а также включить предложение WHERE, задающее каждый предикатный фильтр с использованием логического условия И.

    Первый фильтр-предикат — это участки shape.area площадью более 100 000 и менее 500 000 футов. Во втором и третьем фильтрах предикатов атрибут zonegen_cl таблицы зонирования равен IND (промышленный), а атрибут type таблицы major_roads равен 1110 (шоссе). Оставшиеся два фильтра — это пространственные отношения, участки, которые пересекают зонированные промышленные районы, и участки, которые пересекают каждую буферизованную главную_дорогу, которая является шоссе (буферизованным на 2640 футов).

    При выполнении запроса результат возвращает 604 посылки. Но время выполнения запроса требует более 18 минут (что можно считать очень медленным).

    Ниже приведен синтаксис оператора SQL, время, затраченное на выполнение оператора, и план выполнения оптимизатора. План выполнения показывает, как база данных Oracle шаг за шагом обращалась к данным для получения результата.

      Код:  
    SQL> SELECT COUNT(a.objectid)
    2 FROM участков a, major_roads b, зонирование c
    3 WHERE sde.st_area(a.shape) > 100000 ) < 500000
    5 И c.zonegen_cl = 'IND'
    6 И b.type = 1110
    7 И sde.st_intersects(a.shape,c.shape) = 1
    8 И sde.st_intersects(a.shape,sde.st_buffer(b.shape,2640)) = 1;

    COUNT(OBJECTID)
    ---------------
    604

    Прошедшее: 00:18:31.57

    ---------------- -------------------------------------------------- -----------------------------
    | Идентификатор | Операция | Имя | Ряды | Байты | Стоимость (% ЦП)| Время |
    -------------------------------------------------- -------------------------------------------------------------
    | 0 | ВЫБЕРИТЕ ЗАЯВЛЕНИЕ | | 1 | 1324 | 3812 (2)| 00:00:46 |
    | 1 | СОРТИРОВАТЬ АГРЕГАТ | | 1 | 1324 | | |
    | 2 | ВЛОЖЕННЫЕ ЦИКЛЫ | | 203 | 262К| 3812 (2)| 00:00:46 |
    | 3 | ВЛОЖЕННЫЕ ЦИКЛЫ | | 10 | 7280 | 757 (1)| 00:00:10 |
    |* 4 | ДОСТУП К СТОЛУ ПОЛНЫЙ | MAJOR_ROADS | 163 | 53790 | 22 (0)| 00:00:01 |
    |* 5 | ДОСТУП К ТАБЛИЦАМ ПО INDEX ROWID | ПОСЫЛКИ | 1 | 398 | 757 (1)| 00:00:10 |
    |* 6 | ИНДЕКС ДОМЕНА (Сел. : .000179)| A15_IX1 | | | 4 (0)| 00:00:01 |
    |* 7 | ДОСТУП К СТОЛУ ПОЛНЫЙ | ЗОНИРОВАНИЕ | 21 | 12516 | 306 (2)| 00:00:04 |
    -------------------------------------------------- ------------------------------------------------------------

    Предикатная информация (идентифицируется по идентификатору операции):
    --------------------------------------------------------- ---------

    4 - фильтр("B"."TYPE"=1110)
    5 - фильтр"SDE"."ST_AREA"("A"."SHAPE")>100000 AND "SDE"."ST_AREA"("A" "SHAPE")<500000)
    6 - доступ("SDE"."ST_INTERSECTS"("A"."SHAPE","SDE"."ST_BUFFER"("B"."SHAPE",2640))=1 )
    7 - filter("C"."ZONEGEN_CL"=U'IND' AND "SDE"."ST_INTERSECTS"("A"."SHAPE","C"."SHAPE")=1)

    план выполнения показывает, как оптимизатор выбрал доступ к данным. Как показано, база данных выполнила полное сканирование таблицы по таблице major_roads в поисках всех строк, в которых тип атрибута равен значению 1110. Для каждой строки major_roads база данных передала атрибут формы строки (атрибут st_geometry) оператору st_buffer. Оператор st_buffer буферизовал входную геометрию на указанное расстояние для создания новой формы st_geometry, которая затем передавалась внешнему оператору st_intersects. Оператор st_intersects использовал входную буферизованную форму дороги для выполнения пересечения с таблицей участков. Затем для каждого пересекающегося участка форма участка сравнивалась в качестве фильтра с каждой строкой зонирования, для которой атрибут zonegen_cl равнялся IND.

    Большая часть из 18 минут затраченного времени может быть отнесена к затратам на сравнение каждого участка, пересекающего буферизованные дороги main_roads, с каждым полигоном зонирования.

  2. Чтобы повысить производительность запроса при задании сложных вопросов, иногда требуется переписать исходный оператор, используя дополнительные конструкции Oracle, такие как пересечение, и новые операторы в ArcGIS 9.3, такие как st_aggr_union.

    В приведенном ниже примере показано, как переписать оператор SQL из шага 1, чтобы повысить производительность и использовать дополнительные конструкции SQL.

    Поскольку оператор, указанный в начале раздела «Процедура», содержит два пространственных фильтра, проще выполнять каждый пространственный фильтр как отдельные операторы SQL и использовать оператор пересечения Oracle для возврата одного набора результатов.

    Строки со 2 по 5 выполняют первый пространственный фильтр, который возвращает все участки, пересекающие полигоны зонирования, у которых атрибут zonegen_cl равен IND.

    Второй пространственный фильтр для возврата всех участков, которые находятся в пределах полумили от основных дорог, выполняется в строках с 7 по 12. Для дальнейшей оптимизации этого шага оператор использует новый агрегат st_aggr_union, выпущенный вместе с ArcGIS 9..3.

    Строки с 9 по 11, запрос объединяет все основные_дороги, где тип равен 1110. Агрегат st_aggr_union объединяет все соответствующие основные_дороги в один объект st_geometry. Затем эта геометрия передается в качестве входных данных функции st_buffer в строке 12.

    Использование агрегата значительно повышает производительность, поскольку только одна геометрия буферизуется и пересекается со стихами таблицы участков, буферизируя каждую главную_дорогу, а затем пересекаясь с таблицей участков ( что потенциально может привести к возврату дубликатов посылок).

    После получения каждого набора результатов пространственного фильтра оператор пересечения в строке 6 возвращает только те участки, которые присутствуют как в первом, так и во втором пространственном фильтре, путем пересечения атрибутов ObjectID и shape.area.

    Атрибут shape.area требуется в списке выбора в строке 2 и строке 7, поскольку этот атрибут используется в качестве конечного предикатного фильтра для внешнего запроса в строке 13, где площадь находится в диапазоне от 100000 до 500000.

      Код :  
    SQL> SELECT COUNT(objectid)
    2 ИЗ (ВЫБЕРИТЕ a.objectid objectid, a.shape.area area
    3 ИЗ участков a, зонирование b
    4 ГДЕ b.zonegen_cl = 'IND'
    5 И sde.st_intersects(a.shape,b.shape) = 1
    6 INTERSECT
    7 ВЫБЕРИТЕ a.objectid objectid, a.shape.area area
    8 FROM участков a,
    9 (SELECT sde.st_aggr_union(shape) shape
    10 FROM major_roads n
    11 WHERE type = 1110) b
    1 ГДЕ sde.st_intersects(a.shape,sde.