Ієрархічні та рекурсивні запити в SQL

Ієрархічний запит — тип запиту SQL, що обробляє ієрархічну модель даних. Вони є особливим випадком загальніших рекурсивних нерухомих запитів, які обчислюють транзитивні замикання.

У стандарті SQL:1999 ієрархічні запити реалізовані шляхом рекурсивних загальних табличних виразів (ЗТВ). На відміну від більш ранніх умов connect-by в Oracle, рекурсивні ЗТВ було розроблено з нерухомою семантикою від початку[1]. Рекурсивні ЗТВ зі стандарту були відносно близькі до наявної реалізації в IBM DB2 версії 2[1]. Рекурсивні ЗТВ також підтримуються Microsoft SQL Server (починаючи з SQL Server 2008 R2)[2], Firebird 2.1[3], PostgreSQL 8.4+[4], SQLite 3.8.3+[5], IBM Informix версії 11.50+, CUBRID[en], MariaDB 10.2+ і MySQL 8.0.1+[6]. Tableau має документацію[7], що описує, як ЗТВ можуть використовуватися. TIBCO Spotfire не підтримує ЗТВ, тоді як реалізації Oracle 11g Release 2 бракує нерухомої семантики.

Без загальних табличних виразів або умов connected-by можливо досягти ієрархічних запитів за допомогою користувацьких рекурсивних функцій[8].

Загальний табличний вираз

Загальний табличний вираз, або ЗТВ (в SQL) — тимчасовий іменований результатний набір, що походить із простого запиту та визначений усередині області виконання інструкції SELECT, INSERT, UPDATE чи DELETE.

ЗТВ можна вважати альтернативами похідним таблицям (підзапитам), розрізам і вбудованим користувацьким функціям.

Загальні табличні вирази підтримуються Teradata, DB2, Firebird[9], Microsoft SQL Server, Oracle (з рекурсією, починаючи з 11g release 2), PostgreSQL (починаючи з 8.4), MariaDB (починаючи з 10.2), MySQL (починаючи з 8.0), SQLite (починаючи з 3.8.3), HyperSQL і H2[en] (експериментально)[10]. Oracle називає ЗТВ «підзапитним факторингом» (англ. subquery factoring)[11].

Синтаксис для рекурсивного ЗТВ виглядає наступним чином:

WITH [RECURSIVE] запит_with [, ]
SELECT 

де синтаксисом запит_with є:

назва_запиту [ (назва_колонки [, ]) ] AS (SELECT )

Рекурсивні ЗТВ (або «рекурсивний підзапитний факторинг»[12] у жаргоні Oracle) можуть використовуватися для обходу відношень (як графів або дерев), хоча синтаксис набагато більше залучений через відсутність створених автоматичних псевдо-колонок (як LEVEL нижче); якщо вони є бажаними, то їх слід створити в коді. Навчальні приклади див. у документації MSDN[2] або IBM[13][14].

Ключове слово RECURSIVE зазвичай не є необхідним після WITH у системах, крім PostgreSQL[15].

В SQL:1999 рекурсивний (ЗТВ) запит може з'являтися будь-де, де дозволено запит. Можливо, наприклад, назвати результат за допомогою CREATE [RECURSIVE] VIEW[1]. За допомогою ЗТВ усередині INSERT INTO можна наповнити таблицю даними, згенерованими з рекурсивного запиту; генерація випадкових даних можлива з використанням цієї техніки без використання жодних процедурних інструкцій[16].

Деякі бази даних на кшталт PostgreSQL підтримують скорочений формат CREATE RECURSIVE VIEW, який внутрішньо перекладається в кодування WITH RECURSIVE[17].

Прикладом рекурсивного запиту, що обчислює факторіал чисел від 0 до 9, є наступне:

WITH RECURSIVE temp (n, fact) AS
(SELECT 0, 1 -- Початковий підзапит
  UNION ALL
 SELECT n + 1, (n + 1) * fact -- Рекурсивний підзапит
  FROM temp
 WHERE n < 9)
SELECT * FROM temp;

CONNECT BY

Альтернативним синтаксисом є нестандартна конструкція CONNECT BY; її було впроваджено Oracle у 1980-х[18]. До Oracle 10g конструкція була корисною тільки для обходу ациклічних графів, оскільки вона повертала помилку при виявленні будь-яких циклів; у версії 10g Oracle впровадила можливість NOCYCLE (та ключове слово), уможливлюючи роботу з обходу і за наявності циклів[19].

CONNECT BY підтримується EnterpriseDB[20], Oracle Database[21], CUBRID[en][22], IBM Informix[23] і DB2, хоча тільки, якщо його увімкнено як режим сумісності[24]. Синтаксис виглядає наступним чином:

SELECT список_вибірки
FROM табличний_вираз
[ WHERE  ]
[ START WITH початковий_вираз ]
CONNECT BY [NOCYCLE] { PRIOR дочірній_вираз = батьківський_вираз | батьківський_вираз = PRIOR дочірній_вираз }
[ ORDER SIBLINGS BY колонка1 [ ASC | DESC ] [, колонка2 [ ASC | DESC ] ] 
[ GROUP BY  ]
[ HAVING  ]

Наприклад,

Виведення з вищенаведеного запиту виглядатиме як:

 level |  працівник  | empno | менеджер
-------+-------------+-------+----------
     1 | KING        |  7839 |
     2 |   JONES     |  7566 |    7839
     3 |     SCOTT   |  7788 |    7566
     4 |       ADAMS |  7876 |    7788
     3 |     FORD    |  7902 |    7566
     4 |       SMITH |  7369 |    7902
     2 |   BLAKE     |  7698 |    7839
     3 |     ALLEN   |  7499 |    7698
     3 |     WARD    |  7521 |    7698
     3 |     MARTIN  |  7654 |    7698
     3 |     TURNER  |  7844 |    7698
     3 |     JAMES   |  7900 |    7698
     2 |   CLARK     |  7782 |    7839
     3 |     MILLER  |  7934 |    7782
(14 рядків)

Псевдо-колонки

  • LEVEL
  • CONNECT_BY_ISLEAF
  • CONNECT_BY_ISCYCLE
  • CONNECT_BY_ROOT

Унарні оператори

Наступний приклад повертає прізвище кожного працівника у відділі 10, кожного менеджера над цим працівником в ієрархії, кількість рівнів між менеджером і працівником і шлях між ними:

SELECT ename "Працівник", CONNECT_BY_ROOT ename "Менеджер",
       LEVEL - 1 "Довжина шляху", SYS_CONNECT_BY_PATH(ename, '/') "Шлях"
FROM emp
WHERE LEVEL > 1 and deptno = 10
CONNECT BY PRIOR empno = mgr
ORDER BY "Працівник", "Менеджер", "Довжина шляху", "Шлях";

Функції

  • SYS_CONNECT_BY_PATH

Див. також

Примітки

  1. а б в Melton, Jim; Simon, Alan R. (2002). SQL:1999: Understanding Relational Language Components. Morgan Kaufmann. с. 352. ISBN 978-1-55860-456-8. Архів оригіналу за 29 липня 2020. Процитовано 9 серпня 2019.
  2. а б Microsoft. Recursive Queries Using Common Table Expressions. MSDN. Архів оригіналу за 8 грудня 2009. Процитовано 23 грудня 2009.
  3. Borrie, Helen (15 липня 2008). Firebird 2.1 Release Notes. Архів оригіналу за 22 квітня 2017. Процитовано 24 листопада 2015.
  4. WITH Queries. PostgreSQL. Архів оригіналу за 1 травня 2016. Процитовано 9 серпня 2019.
  5. WITH Clause. SQLite. Архів оригіналу за 5 липня 2019. Процитовано 9 серпня 2019.
  6. MySQL 8.0 Labs: [Recursive] Common Table Expressions in MySQL (CTEs). mysqlserverteam.com. Архів оригіналу за 16 серпня 2019. Процитовано 9 серпня 2019. [Архівовано 2019-08-16 у Wayback Machine.]
  7. Using Common Table Expressions. kb.tableau.com (англійською) . 8 січня 2019 [2016]. Архів оригіналу за 1 серпня 2019. Процитовано 9 серпня 2019.
  8. Paragon corporation: Using PostgreSQL User-Defined Functions to solve the Tree Problem. 15 лютого 2004. Архів оригіналу за 23 вересня 2015. Процитовано 19 вересня 2015.
  9. Порівняння реляційних систем керування базами даних[en]
  10. Advanced. h2database.com (англійською) . Архів оригіналу за 9 липня 2006. Процитовано 9 серпня 2019.
  11. Morton, Karen; Sands, Robyn; Still, Jared; Shamsudeen, Riyaj; Osborne, Kerry (2010). Pro Oracle SQL. Apress. с. 283. ISBN 978-1-4302-3228-5. Архів оригіналу за 29 липня 2020. Процитовано 9 серпня 2019.
  12. Morton, Karen; Sands, Robyn; Still, Jared; Shamsudeen, Riyaj; Osborne, Kerry (2010). Pro Oracle SQL. Apress. с. 304. ISBN 978-1-4302-3228-5. Архів оригіналу за 29 липня 2020. Процитовано 9 серпня 2019.
  13. http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/topic/com.ibm.db2z9.doc.apsg/src/tpc/db2z_xmprecursivecte.htm
  14. http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=%2Fsqlp%2Frbafyrecursivequeries.htm
  15. Obe, Regina; Hsu, Leo (2012). PostgreSQL: Up and Running. O'Reilly Media. с. 94. ISBN 978-1-4493-2633-3. Архів оригіналу за 29 липня 2020. Процитовано 9 серпня 2019.
  16. Chamberlin, Don (1998). A Complete Guide to DB2 Universal Database. Morgan Kaufmann. с. 253—254. ISBN 978-1-55860-482-7. Архів оригіналу за 29 липня 2020. Процитовано 9 серпня 2019.
  17. Архівована копія. Архів оригіналу за 4 жовтня 2018. Процитовано 9 серпня 2019.{{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)
  18. Benedikt, M.; Senellart, P. (2011). Databases. У Blum, Edward K.; Aho, Alfred V. (ред.). Computer Science. The Hardware, Software and Heart of It. с. 189. doi:10.1007/978-1-4614-1168-0_10. ISBN 978-1-4614-1167-3.
  19. Beaulieu, Alan (2004). Mastering Oracle SQL. O'Reilly Media, Inc. с. 227. ISBN 978-0-596-00632-7. Архів оригіналу за 29 липня 2020. Процитовано 9 серпня 2019. {{cite book}}: |ім'я1= з пропущеним |прізвище1= (довідка)
  20. Hierarchical Queries. EnterpriseDB. Архів оригіналу за 21 червня 2008. Процитовано 9 серпня 2019. [Архівовано 2008-06-21 у Wayback Machine.]
  21. Hierarchical Queries. Oracle. Архів оригіналу за 8 листопада 2011. Процитовано 9 серпня 2019.
  22. CUBRID Hierarchical Query. Архів оригіналу за 14 лютого 2013. Процитовано 11 лютого 2013. [Архівовано 2013-02-14 у Wayback Machine.]
  23. Hierarchical Clause. IBM Informix. Архів оригіналу за 4 березня 2016. Процитовано 9 серпня 2019.
  24. Gennick, Jonathan (2010). SQL Pocket Guide (вид. 3-є). O'Reilly Media, Inc. с. 8. ISBN 978-1-4493-9409-7. Архів оригіналу за 29 липня 2020. Процитовано 9 серпня 2019.

Література

Академічні підручники. Зверніть увагу, що вони покривають тільки SQL:1999 (та Datalog), але не розширення Oracle.

Посилання

Read other articles:

Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada Desember 2022. Naomi PolaniNaomi Polani, 2011Lahir4 Agustus 1927 (umur 96)Tel Aviv, Mandat PalestinaKebangsaanIsraelPekerjaanPengarah musikal, pengarah teater, penyanyi, produseri, pemeran dan penariDikenal atasMendirikan grup vokal HaTarnegolim (The Roosters) ...

 

Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada Oktober 2022. Delusi CotardAhli saraf Jules Cotard (1840-1889) menggambarkan The Delirium of Negation sebagai penyakit mental dengan tingkat keparahan yang bervariasi.Informasi umumNama lainSindrom Cotard, Sindrom mayat hidupSpesialisasiPsikiatri Delusi Cotard alias...

 

Keuskupan Agung AnqingArchidioecesis Nganchimensis天主教安庆总教区Bekas Katedral Hati Kudus di AnqingLokasiNegara ChinaStatistikLuas38.000 km2 (15.000 sq mi)Populasi- Total- Katolik(per 1950)7.000.00028,268 (0.4%)InformasiRitusRitus LatinPendirian21 Februari 1929 (Sebagai Vikariat Apostolik Anking)11 April 1946 (Sebagai Keuskupan Agung Anqing)KatedralKatedral Santo Tomas di HefeiKepemimpinan kiniPausFransiskusUskup agungSede VacanteSufraganKeusk...

Inđija (Kiril Serbia: Инђија) ialah sebuah kota dan kotamadya di Distrik Srem, Vojvodina, Serbia. Pada tahun 2002, kota ini berpenduduk 26.247 jiwa dan memiliki daerah seluas 384 km². Penduduk kotamadya mencapai 49.609 jiwa. Budaya Pada tanggal 26 Juni 2007, diselenggarakan konser Red Hot Chili Peppers di Inđija. Konser tersebut berlangsung sekitar 1 jam 20 menit dan merupakan bagian dari Green Fest. Sekitar 90.000-100.000 penonton yang banyak berasal dari daerah sekitarnya datang u...

 

Group of organonitrogen compounds Diazo process redirects here. For the reproduction of prints using the diazo chemical process, see Whiteprint. Benzenediazonium cation. Diazonium compounds or diazonium salts are a group of organic compounds sharing a common functional group [R−N+≡N]X− where R can be any organic group, such as an alkyl or an aryl, and X is an inorganic or organic anion, such as a halide. General properties and reactivity Arenediazonium cations and related species Ac...

 

Часть серии статей о Холокосте Идеология и политика Расовая гигиена · Расовый антисемитизм · Нацистская расовая политика · Нюрнбергские расовые законы Шоа Лагеря смерти Белжец · Дахау · Майданек · Малый Тростенец · Маутхаузен ·&...

Ne doit pas être confondu avec World Wide Web. Nombre d'abonnements à Internet par accès fixe rapporté à la population, exprimé en pourcentage, par pays, en 2021. Visualisation des multiples chemins à travers une portion d'Internet. Internet est un réseau informatique mondial accessible au public. Il s'agit d'un réseau de réseaux, à commutation de paquets, sans centre névralgique, composé de millions de réseaux aussi bien publics que privés, universitaires, commerciaux et gouv...

 

Akhlaq Ur Rehman Kidwai (1 Juli 1920 – 24 Agustus 2016) adalah seorang kimiawan dan politikus asal India. Ia menjabat sebagai gubernur negara-negara bagian Bihar, Bengal Barat, dan Haryana. Ia menjadi anggota Rajya Sabha, dewan tinggi Parlemen India, dari 2000 sampai 2004. Ia dianugerahi Padma Vibhushan, penghargaan sipil tertinggi kedua di India.[1] Referensi ^ A R Kidwai chosen for Padma Vibhushan Diarsipkan 2012-10-08 di Wayback Machine., Oneindia news, Tuesday, Jan...

 

Son of the MaskPoster teaterSutradaraLawrence GutermanProduserErica HugginsScott KroopfDitulis olehLance KhazeiPemeranJamie KennedyAlan CummingTraylor HowardSteven WrightKal PennBob HoskinsPenata musikRandy EdelmanSinematograferGreg GardinerPenyuntingMalcolm CampbellJohn ConiglioDebra Neil FisherPerusahaanproduksiDark Horse EntertainmentRadar PicturesDistributorNew Line CinemaTanggal rilis11 Februari 2005 (2005-02-11)Durasi94 menitNegaraAmerika SerikatBahasaInggrisAnggaran$84 jutaP...

Questa voce sugli argomenti cestisti statunitensi e allenatori di pallacanestro statunitensi è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti dei progetti di riferimento 1, 2. Jody Conradt Nazionalità  Stati Uniti Pallacanestro Ruolo Allenatrice Termine carriera 1963 - giocatrice2007 - allenatrice Hall of fame Naismith Hall of Fame (1998)Women's Basketball Hall of Fame (1999) Carriera Giovanili 1959-1963 [[Bayl...

 

Light rail station in Minneapolis, Minnesota Prospect ParkProspect Park station platform in June 2015General informationLocation319 29th AvenueMinneapolis, MinnesotaCoordinates44°58′18″N 93°12′55″W / 44.97167°N 93.21528°W / 44.97167; -93.21528Owned byMetro TransitPlatforms1 island platformTracks2Connections Metro Transit: 33ConstructionStructure typeAt-gradeBicycle facilitiesRacks, Nice Ride stations, U of M TransitwayAccessibleYesOther informationStation c...

 

artikel ini perlu dirapikan agar memenuhi standar Wikipedia. Tidak ada alasan yang diberikan. Silakan kembangkan artikel ini semampu Anda. Merapikan artikel dapat dilakukan dengan wikifikasi atau membagi artikel ke paragraf-paragraf. Jika sudah dirapikan, silakan hapus templat ini. (Pelajari cara dan kapan saatnya untuk menghapus pesan templat ini) Penggambaran jenis-jenis format audio Format berkas audio (Bahasa Inggris: Audio File Format) adalah suatu bentuk jadi yang digunakan dalam menyim...

第三十二届夏季奥林匹克运动会柔道比賽比賽場館日本武道館日期2021年7月24日至31日項目數15参赛选手393(含未上场5人)位選手,來自128(含未上场4队)個國家和地區← 20162024 → 2020年夏季奥林匹克运动会柔道比赛个人男子女子60公斤级48公斤级66公斤级52公斤级73公斤级57公斤级81公斤级63公斤级90公斤级70公斤级100公斤级78公斤级100公斤以上级78公斤以上级团体混...

 

Egyptian Islamic scholar (1372–1449) For the 16th-century Sunni Muslim Shafi'i scholar, see Ibn Hajar al-Haytami. ImamIbn Hajar al-Asqalaniابن حجر العسقلانيTomb of Ibn Hajar al-Asqalani in CairoTitleShaykh al-IslamHafizPersonalBorn18 February 1372 (1372-02-18)Cairo, Mamluk SultanateDied2 February 1449 (1449-02-03) (aged 76)[4]Cairo, Mamluk SultanateResting placeCity of the Dead, Cairo, EgyptReligionIslamEra Bahri Era Burji Era DenominationSunniJurisprud...

 

Військово-музичне управління Збройних сил України Тип військове формуванняЗасновано 1992Країна  Україна Емблема управління Військово-музичне управління Збройних сил України — структурний підрозділ Генерального штабу Збройних сил України призначений для планува...

الطيبة الزعبية   الإحداثيات 32°36′00″N 35°26′00″E / 32.6°N 35.433333333333°E / 32.6; 35.433333333333   تقسيم إداري  البلد إسرائيل  التقسيم الأعلى مجلس جلبوع الإقليمي  خصائص جغرافية ارتفاع 95 متر  عدد السكان  عدد السكان 1865 (2019)[1]  معلومات أخرى منطقة زمنية ت ع م+02:00...

 

This article relies largely or entirely on a single source. Relevant discussion may be found on the talk page. Please help improve this article by introducing citations to additional sources.Find sources: Adarsh Public School – news · newspapers · books · scholar · JSTOR (June 2017) Private school in New Delhi, IndiaAdarsh Public SchoolLocationNew DelhiIndiaInformationTypePrivateMottoSimple Living and High ThinkingEstablished1955FounderDr. Bhagat Ram ...

 

El Paso redirects here. For other uses, see El Paso (disambiguation). City in Texas, United StatesEl PasoCityDowntown El PasoSouthwest University ParkYsleta MissionUniversity of Texas at El PasoNorth Franklin MountainKern Place FlagSealNicknames: The Sun City,[1] El Chuco[2]Location in El Paso County and the State of TexasEl PasoLocation in TexasShow map of TexasEl PasoLocation in the United StatesShow map of the United StatesCoordinates: 31°45′33″N 106°29′19″W&...

City in Colorado, United States Home rule municipality in Colorado, United StatesAspen, ColoradoHome rule municipality[1]Downtown Aspen (2005) FlagLogoLocation within Pitkin County and ColoradoAspenLocation within the United StatesCoordinates: 39°11′42″N 106°50′13″W / 39.194951°N 106.837002°W / 39.194951; -106.837002[3]CountryUnited StatesStateColoradoCountyPitkin County seat[2]Settled1879Incorporation1881Named forAspen trees around ...

 

Technological innovations that have historically increased productivity The spinning mule greatly increased the productivity of thread manufacturing, compared to the earlier spinning wheel. The productivity-improving technologies are the technological innovations that have historically increased productivity. Productivity is often measured as the ratio of (aggregate) output to (aggregate) input in the production of goods and services.[1] Productivity is increased by lowering the amoun...