Intersect oracle: INTERSECT ОПЕРАТОР — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite
Содержание
選擇語言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
в наборе результатов.
| ||||||
|
Оптимизация производительности для сложных запросов St_geometry в Oracle
Краткое содержание
Предоставленные инструкции описывают, как взять сложную инструкцию SQL, содержащую несколько условий И, и реструктурировать инструкцию SQL, используя несколько подзапросов и дополнительных операторов SQL для повышения производительности. SQL-конструкции.
Процедура
Пример и приведенные ниже шаги демонстрируют неэффективный (медленный) оператор SQL и эффективный оператор SQL в ответ на: «Определить все участки площадью более 100 000 квадратных футов и менее 500 000 квадратных футов, которые находятся в пределах 1/2 мили ( 2640 футов) от крупной магистрали и в зоне промышленной зоны».
В ответ на приведенное выше заявление доступны следующие данные: 558 605 участков (полигонов) для мегаполиса, 2 606 основных_дорог (линий) и 18 653 зонирования (полигонов).
- Логическая конструкция 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, с каждым полигоном зонирования.
- Чтобы повысить производительность запроса при задании сложных вопросов, иногда требуется переписать исходный оператор, используя дополнительные конструкции 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.