آموزش هوش تجاری از ۰ تا ۱۰۰

  • ۰
  • ۰

ساختارهای درختی والد-فرزند در SQL چیست؟ در این مقاله، ما به این سوال پاسخ می‌دهیم، در مورد سلسله‌مراتب پرس و جو صحبت می‌کنیم و پنج مورد رایج‌ترین پرس‌وجوهای SQL را که برای این ساختارهای داده نیاز دارید، نشان می‌دهیم.

بله، می توانید از SQL در ساختار درختی والدین-فرزند استفاده کنید. من در این مقاله به شما نشان خواهم داد که چگونه. در طول راه، پنج مثال پرس و جو را برای شما شرح خواهم داد، که با ساده ترین آنها شروع می شود و با پیچیده ترین آنها خاتمه می یابد. اینها از عبارات جدول مشترک بازگشتی (CTEs) استفاده خواهند کرد.

اگر با CTE ها آشنایی ندارید، دوره پرس و جوهای بازگشتی تعاملی ما را توصیه می کنم. این شامل بیش از 100 تمرین است که به شما می آموزد چگونه از CTE ها در SQL استفاده کنید، از اصول اولیه شروع کنید و تا موضوعات پیشرفته مانند CTE های بازگشتی پیش بروید.

قبل از اینکه کد را بررسی کنیم، بیایید به یک نمای کلی از ساختار درخت والد-فرزند و نحوه ذخیره آن در یک پایگاه داده رابطه ای نگاه کنیم.

درخت والد-فرزند چیست؟
اگر داده های سلسله مراتبی را درک می کنید، احتمالاً می دانید که مترادف ساختار والد-فرزند است. هر دو نام بسیار منطقی است. ساختار درختی والد-فرزند مجموعه ای از داده ها است که به صورت سلسله مراتبی ساختار یافته اند. به عبارت دیگر، روابط سلسله مراتبی بین اقلام داده وجود دارد. این به این معنی است که یک آیتم داده می تواند والد آیتم داده دیگری باشد که سپس فرزند نامیده می شود. اقلام همچنین سطوح درختی یا گره نامیده می شوند و می توانند سه شکل اصلی به خود بگیرند:

به یادگیری پرس و جوهای بازگشتی SQL علاقه مند هستید؟ دوره تعاملی ما را بررسی کنید.

گره ریشه - اولین گره، جایی که درخت والد-فرزند شروع می شود.
گره والد - هر گره ای است که دارای یک یا چند نود (یا فرزند) باشد.
گره فرزند - هر گره ای که دارای گره قبلی یا والد باشد.
درخت والد-فرزند چیست
نمونه‌های واقعی ساختارهای والد-فرزند شامل ساختارهای سازمانی شرکت‌ها (یک شرکت متشکل از بخش‌ها، بخش‌ها از تیم‌ها و تیم‌ها متشکل از کارمندان)، درختان خانواده (والدین، فرزندان، نوه‌ها، نوه‌ها و غیره هستند). .)، و طبقه بندی های طبیعی (جانداران متعلق به یک حوزه، پادشاهی، شاخه، طبقه، نظم، خانواده، جنس، و گونه هستند). حتی پوشه های کامپیوتر (دیسک C، فایل های برنامه، مایکروسافت SQL Server...)، منوها (نوشیدنی ها، نوشیدنی های غیر الکلی، چای...)، ژانرهای هنری و موسیقی (به عنوان مثال، بلوز وجود داشت که ریتم و بلوز را توسعه داد، که منجر به روح، فانک و غیره) و پروژه ها (یک پروژه دارای پروژه های فرعی است که دارای وظایف، وظایف فرعی و غیره است) را می توان ساختار داده سلسله مراتبی در نظر گرفت.

ساختار درختی والد-فرزند در پایگاه های داده رابطه ای
برای اینکه SQL هر کاری را با آن انجام دهد، ساختار درختی والد-فرزند باید در یک پایگاه داده رابطه ای ذخیره شود.

این ساختارها معمولاً در یک جدول با دو ستون ID ذخیره می شوند که یکی از آنها به شناسه شی والد ارجاع می دهد. این به ما امکان می دهد سلسله مراتب بین داده ها را تعیین کنیم. به عبارت دیگر، ما می دانیم که کدام گره یک گره والد برای کدام گره فرزند است و بالعکس.

این ممکن است کمی انتزاعی به نظر برسد، بنابراین من با یک مثال ساده به شما نشان خواهم داد که چگونه کار می کند. و من به معنای واقعی کلمه با آن صحبت می کنم! ساختار درختی والد-فرزند من داده‌های مربوط به والدین و فرزندانشان را نشان می‌دهد. نگاهی بیاندازید:

شناسه first_name last_name parent_id
1 جیم کلیفی NULL
2 مارک کلیفی 1
3 ورونیکا کلیفی 2
در اینجا، شناسه ستون، شناسه کودک را نشان می دهد. برای اینکه بدانید والدین آن فرزند چه کسی هستند، باید به ستون parent_id نگاه کنید، همان شماره شناسه را در ستون id پیدا کنید و در آن ردیف به دنبال نام والدین بگردید.

به عبارت دیگر، جیم کلیفی هیچ پدر و مادری در این جدول ندارد. مقدار در ستون parent_id او NULL است. این بدان معناست که او گره ریشه این ساختار درختی است.

مارک کلیفی پسر جیم کلیفی است. از کجا بدانم؟ زیرا Mark's parent_id = 1، که شناسه Jim Cliffy است. مارک کلیفی یک گره فرزند است، اما او همچنین یک گره والد است. چرا؟ زیرا ورونیکا کلیفی دختر مارک کلیفی است. من این را می دانم زیرا والد او parent_id = 2 دارد و جدول به من می گوید که مارک کلیفی است. ورونیکا کلیفی به شدت یک گره کودک است. او یک گره والد دارد، اما هیچ گره فرزندی از او منشعب نمی شود.

پرس و جوهای معمولی بر روی ساختار درختی والدین-فرزند اجرا می شوند

من از جدول یکسانی برای هر یک از این پرس و جوها استفاده خواهم کرد. دارای همان ستون هایی است که در بالا نشان داده شده است، فقط با ردیف های بیشتر و مقادیر متفاوت در آنها.

معرفی نمونه داده ها
جدول parent_child نام دارد و دارای ستون های زیر است:

شناسه – شناسه کودک و کلید اصلی جدول (PK).
first_name - نام کوچک کودک.
last_name - نام خانوادگی کودک.
parent_id - شناسه والدین کودک.
این هم کل جدول:

شناسه first_name last_name parent_id
1 روزا ولینگتون NULL
2 جان ولینگتون 1
3 جونی ولینگتون 1
4 مارج ولینگتون 1
5 مری دایکسترا 2
6 فرانک ولینگتون 2
7 جیسون ولینگتون 3
8 بابی ولینگتون 4
9 سامی ولینگتون 4
10 سارا ولینگتون 4
11 سام فرانسیس دایکسترا 5
12 استیون ولینگتون 6
13 ترنت ولینگتون 6
14 ژوئن ولینگتون 9
15 ژوزفین ولینگتون 9
16 سوزی ولینگتون 9
می‌توانید از این جدول برای بررسی اینکه آیا پرس‌و‌جوهایی که می‌خواهم نشان دهم خروجی درستی دارند یا خیر استفاده کنید.

مثال 1: همه فرزندان یک والدین را فهرست کنید
این ساده ترین پرس و جو است، بنابراین من از آن استفاده خواهم کرد تا شما را با ساختار درختی راحت تر کنم. در اینجا، من می خواهم همه فرزندان یک والدین مشخص را پیدا کنم. در این مورد، من علاقه مندم که همه فرزندان شخصی به نام مارج ولینگتون را پیدا کنم که شناسه او 4 است.

سوال کوچک اینجاست:

نام_نام را انتخاب کنید،
     نام خانوادگی
از والدین_فرزند
WHERE parent_id = 4;
من به سادگی نام و نام خانوادگی را از جدول انتخاب کرده ام و از عبارت WHERE برای نشان دادن تنها ردیف هایی که در ستون parent_id یک عدد 4 وجود دارد استفاده کرده ام.

نتیجه سه ردیف را نشان می دهد:

first_name نام خانوادگی
بابی ولینگتون
سامی ولینگتون
سارا ولینگتون
به من می گوید که بابی، سامی و سارا ولینگتون همه فرزندان مارج ولینگتون هستند. به جدول اصلی نگاه کنید، متوجه خواهید شد که درست است.

این فقط یک گرم کردن بود! بریم سراغ بعدی

مثال 2: یک گره والد را برای یک گره فرزند فهرست کنید
حال، خروجی در مثال قبلی کمی، خوب، ابتدایی بود. من فقط نام بچه ها را ذکر کردم. نشان دادن نام والدین نیز می تواند بسیار مفید باشد. و این دقیقاً کاری است که من قرار است انجام دهم. نام و نام خانوادگی فرزند و والدین را نشان خواهم داد.

به جای اینکه به دنبال فرزندان والدین باشم، اکنون به دنبال والدین فرزند خواهم بود. من می خواهم بدانم پدر و مادر سام فرانسیس دایکسترا کیست. علاوه بر اسامی، من می خواهم شناسه ها را هم ببینم.

پرس و جو برای این است:

SELECT child.id AS child_id،
     child.first_name AS child_first_name،
     child.last_name AS child_last_name،
     parent.first_name AS parent_first_name،
     parent.last_name AS parent_last_name،
     parent.id AS parent_id
از فرزند والدین_فرزند
به پدر و مادر_فرزند بپیوندید
  ON child.parent_id = parent.id
WHERE child.id = 11;
مفهوم اصلی که من در اینجا معرفی می کنم، خود پیوستن است. من نام مستعار را به جدول parent_child دادم و با استفاده از نام مستعار والد آن را به خودش ملحق کردم. با انجام این کار، من در حال کار با دو جدول مختلف هستم. یکی حاوی داده های مربوط به کودکان است. به همین دلیل نام آن را فرزند گذاشته ام. دیگری اطلاعاتی درباره والدین دارد، بنابراین من آن را والدین نامیده ام.

ستون های انتخاب شده منعکس کننده آن هستند. نام و شناسه کودکان از جدول "اول" انتخاب می شود. نام و شناسه والدین از جدول "دوم" انتخاب می شود. "جدول" در جایی که parent_id برابر با id است به هم می پیوندند.

جدول اصلی به من می‌گوید که شناسه Sam Francis Dijkstra 11 است. من از عبارت WHERE برای فیلتر کردن داده‌ها استفاده کرده‌ام و فقط والد Sam Francis را نشان می‌دهم. همچنین می‌توانید از عبارت WHERE در ستون‌های child.first_name و child.last_name استفاده کنید. من انتخاب کرده‌ام که داده‌ها را با استفاده از ID فیلتر کنم، زیرا پرس و جو از این طریق کمی کوتاه‌تر است.

این خروجی است:

child_id child_first_name child_last_name parent_first_name parent_last_name parent_id
11 سام فرانسیس دایکسترا مری دایکسترا 5
این نشان می دهد که مادر سام فرانسیس مری دایکسترا است که درست است.

همه چیز تا الان روشن شده؟ خوب در حال حرکت!

مثال 3: یک شماره نسل (یا سطح درخت) برای هر گره دریافت کنید

در این مثال، من می خواهم هر فرد را از جدول لیست کنم و نشان دهم که به کدام نسل تعلق دارند. هدف از این کار چیست؟ وقتی آن داده ها را به دست می آورم، به راحتی می توانم ببینم چه کسی به کدام نسل تعلق دارد: والدین، فرزندان، نوه ها و غیره.

من با استفاده از CTE به آن خواهم رسید - نه CTE روزمره شما، بلکه یک CTE بازگشتی. اگر نیاز به تجدید دانش CTE دارید، در اینجا مقاله ای وجود دارد که توضیح می دهد CTE چیست.

سوال من اینجاست:

با نسل بازگشتی AS (
    انتخاب شناسه،
        نام کوچک،
        نام خانوادگی،
        شناسه اصلی،
        0 نسل_شماره AS
    از والدین_فرزند
    WHERE parent_id IS NULL است
 
اتحاد همه
 
    SELECT child.id،
        child.first_name,
        child.last_name,
        child.parent_id،
        Generation_number+1 AS Generation_number
    از فرزند والدین_فرزند
    به نسل g بپیوندید
      ON g.id = child.parent_id
)
 
نام_نام را انتخاب کنید،
     نام خانوادگی،
     نسل_شماره
از نسل؛
مانند هر CTE بازگشتی، کلمه من با دو کلمه کلیدی شروع می شود: WITH Recursive. من نسل CTE را نامگذاری کرده ام. در اولین عبارت SELECT، من شناسه ها و نام ها را انتخاب می کنم. علاوه بر این، یک ستون جدید به نام Generation_number با 0 برای تمام ردیف هایی که در آن parent_id = NULL وجود دارد. چرا NULL؟ چون می‌دانم شخصی که سلف همه افراد دیگر است، پدر و مادری در جدول ندارد. بنابراین، مقدار باید NULL باشد.

من از UNION ALL برای ادغام نتیجه این عبارت SELECT با مورد دوم استفاده می کنم که مسئول بازگشت خواهد بود. برای اینکه UNION ALL کار کند، تعداد ستون ها و انواع داده ها باید در هر دو دستور SELECT یکسان باشد.

عضو بازگشتی دوباره شناسه ها و نام ها را انتخاب می کند. همچنین ستون Generation_number با مقدار Generation_number+1 وجود دارد. با هر بازگشت، 1 به مقدار قبلی این ستون اضافه می شود. همانطور که پرس و جو با 0 شروع می شود، اولین بازگشت به 1 در ستون Generation_number، دوم به 2 و غیره منجر می شود.

برای اینکه همه اینها کار کند، جدول parent_child را با خود CTE که در آن id = parent_id است، پیوستم. همان اصل در مورد جداول خود پیوسته اعمال می شود: جدول به عنوان داده در مورد کودکان عمل می کند، CTE به عنوان داده برای والدین عمل می کند.

پس از نوشتن CTE، باید از داده های آن استفاده کنم. من این کار را با نوشتن یک دستور SELECT ساده انجام داده‌ام که نام‌ها و شماره‌های نسل را از CTE برمی‌گرداند. خوب است، اینطور نیست؟

در اینجا نتیجه به نظر می رسد:

first_name_name_name_generation_number
رزا ولینگتون 0
جان ولینگتون 1
جونی ولینگتون 1
مارج ولینگتون 1
مری دایکسترا 2
فرانک ولینگتون ۲
جیسون ولینگتون ۲
بابی ولینگتون 2
سامی ولینگتون 2
سارا ولینگتون ۲
سام فرانسیس دایکسترا 3
استیون ولینگتون 3
ترنت ولینگتون 3
جون ولینگتون 3
جوزفین ولینگتون 3
سوزی ولینگتون 3
با این نتیجه، من می بینم که روزا ولینگتون گره ریشه است زیرا تعداد نسل او 0 است. همه افرادی که ارزش 1 دارند فرزندان او، ارزش 2 نوه ها و ارزش 3 نوه هستند. اگر این را در جدول منبع بررسی کنید، متوجه خواهید شد که همه چیزهایی که گفتم درست است.

نحوه ایجاد جداول موقت یک پرس و جو (معروف به عبارات جدول مشترک) را با دوره پرس و جوهای بازگشتی ما بیاموزید.

مثال 4: لیست همه فرزندان
این مثال پسوند نمونه قبلی است. من می خواهم به شما نشان دهم که چگونه همه فرزندان والدین را فهرست کنید و نام والدین و فرزندان را نشان دهید.

این پرس و جو است:

با نسل بازگشتی AS (
    انتخاب شناسه،
         نام کوچک،
         نام خانوادگی،
         شناسه اصلی،
         0 نسل_شماره AS
    از والدین_فرزند
    WHERE parent_id IS NULL است
 
اتحاد همه
 
    SELECT child.id،
         child.first_name,
         child.last_name,
         child.parent_id،
         Generation_number+1 AS Generation_number
    از فرزند والدین_فرزند
    به نسل g بپیوندید
      ON g.id = child.parent_id
 
)
 
g.first_name AS child_first_name را انتخاب کنید،
        g.last_name AS child_last_name،
        g.generation_number،
        parent.first_name AS parent_first_name،
        parent.last_name AS parent_last_name
از نسل g
به پدر و مادر_فرزند بپیوندید
ON g.parent_id = parent.id
سفارش بر اساس نسل_شماره;
اگر این پرس و جو را با درخواست قبلی مقایسه کنید، خواهید دید که بخش CTE یکسان است. نیازی نیست که دوباره آن را مرور کنم.

آنچه متفاوت است عبارت SELECT است که به CTE ارجاع می دهد. اما مفاهیم جدید SQL نیز در اینجا وجود ندارد. پرس و جو نام فرزند و والدین و شماره نسل آنها را انتخاب می کند. من این کار را با پیوستن مجدد به CTE با جدول parent_child انجام دادم. CTE حاوی داده هایی برای کودکان است، در حالی که جدول حاوی داده هایی در مورد والدین است. آخرین خط کد نتیجه را با شماره تولید مرتب می کند.

پرس و جو دقیقا همان چیزی را که می خواستم برمی گرداند:

نام فرزند
مارج ولینگتون 1 روزا ولینگتون
جونی ولینگتون 1 رزا ولینگتون
جان ولینگتون 1 رزا ولینگتون
فرانک ولینگتون 2 جان ولینگتون
Mary Dijkstra 2 Jon Wellington
جیسون ولینگتون 2 جونی ولینگتون
سارا ولینگتون 2 مارج ولینگتون
سامی ولینگتون 2 مارج ولینگتون
بابی ولینگتون 2 مارج ولینگتون
سام فرانسیس دایکسترا 3 مری دایکسترا
ترنت ولینگتون 3 فرانک ولینگتون
استیون ولینگتون 3 فرانک ولینگتون
سوزی ولینگتون 3 سامی ولینگتون
جوزفین ولینگتون 3 سامی ولینگتون
ژوئن ولینگتون 3 سامی ولینگتون
یا این کار را می کند؟ مطمئناً، نام هر کودک و والدینش را نشان می دهد. اما رزا ولینگتون، گره اصلی و مادرزاد این خانواده، گم شده است. و من هیچ فیلتری برای حذف او اعمال نکردم.

چی شد؟ من در واقع یک فیلتر را با استفاده از JOIN در آخرین عبارت SELECT اعمال کردم. به یاد داشته باشید، JOIN فقط ردیف‌های منطبق را از جداول متصل برمی‌گرداند. رزا ولینگتون گم شده است زیرا هیچ اطلاعاتی در مورد والدینش ندارد. در مورد او، هیچ داده ای وجود ندارد که شناسه بتواند با parent_id مطابقت داشته باشد. اگر می‌خواهید او را هم بگنجانید، از LEFT JOIN در آخرین SELECT استفاده کنید:


FROM نسل g LEFT JOIN parent_child والد ON g.parent_id = parent.id

و نتیجه کامل اینجاست:

نام فرزند
رزا ولینگتون 0 NULL NULL
جونی ولینگتون 1 رزا ولینگتون
جان ولینگتون 1 رزا ولینگتون
مارج ولینگتون 1 روزا ولینگتون
Mary Dijkstra 2 Jon Wellington
جیسون ولینگتون 2 جونی ولینگتون
سارا ولینگتون 2 مارج ولینگتون
سامی ولینگتون 2 مارج ولینگتون
بابی ولینگتون 2 مارج ولینگتون
فرانک ولینگتون 2 جان ولینگتون
ترنت ولینگتون 3 فرانک ولینگتون
استیون ولینگتون 3 فرانک ولینگتون
سوزی ولینگتون 3 سامی ولینگتون
جوزفین ولینگتون 3 سامی ولینگتون
ژوئن ولینگتون 3 سامی ولینگتون
سام فرانسیس دایکسترا 3 مری دایکسترا
اگر می خواهید درباره این پرس و جو پیچیده بیشتر بدانید، در اینجا مقاله ای به این مثال اختصاص داده شده است.

مثال 5: یک نمای درختی از داده های سلسله مراتبی ایجاد کنید
مثال آخر پیچیده ترین است، اما در عین حال سرگرم کننده ترین است. یا خروجی آن حداقل است. مایه شرمساری است که ساختارهای درختی را پرس و جو کنیم بدون اینکه بتوانیم داده ها را به شکل درختی نشان دهیم.

وظیفه در اینجا نشان دادن هر فرد از جدول است. همچنین، به هر نسل باید به گونه ای نشان داده شود که از نظر گرافیکی مشخص باشد که فرزند کیست و به کدام نسل تعلق دارد. این نمای درختی است. فکر می کنم بهتر است منتظر بمانید تا من به خروجی پرس و جو برسم تا منظور من از آن چیست.

بریم سر کار! دوباره، CTE بازگشتی روز را نجات می دهد:

با بازگشت درخت_نما به عنوان (
    انتخاب شناسه،
         شناسه اصلی،
         نام کوچک،
         نام خانوادگی،
         0 سطح AS،
         CAST(id AS varchar(50)) AS order_sequence
    از والدین_فرزند
    WHERE parent_id IS NULL است
     
اتحاد همه
 
    SELECT parent.id،
         parent.parent_id،
         parent.first_name,
         parent.last_name,
         سطح + 1 سطح AS،
         CAST(order_sequence || '_' || CAST(parent.id AS VARCHAR (50)) AS VARCHAR(50)) AS order_sequence
    از پدر و مادر_فرزند
    به تلویزیون tree_view بپیوندید
      ON parent.parent_id = tv.id
)
 
انتخاب کنید
   RIGHT('------------'،سطح*3) || نام_نام || '' || نام خانوادگی
     AS parent_child_tree
FROM tree_view
ORDER BY order_sequence;
شما از قبل می دانید که پرس و جوهای بازگشتی چگونه کار می کنند. این بار CTE نام درختی دارد. اولین دستور SELECT برخی از داده ها را از جدولی که parent_id NULL است انتخاب می کند. سطح ستون با مقدار 0 وجود دارد. و من از تابع CAST() برای تغییر نوع داده id به VARCHAR استفاده کرده ام. خواهید دید که چرا به آن نیاز دارم.

ما دوباره از UNION ALL برای ادغام نتایج دو پرس و جو استفاده می کنیم. دستور دوم SELECT دوباره برخی از داده ها را انتخاب می کند، با جدول parent_child که به خود CTE ملحق شده است. نکته مهم این است که با هر بازگشت، 1 به سطح قبلی اضافه می شود. همچنین، خط زیر و مقدار از شناسه ستون با هر بازگشت اضافه می شود. من به این ترفند کوچک نیاز دارم زیرا بعداً از این ستون برای مرتب کردن خروجی استفاده خواهم کرد. به این ترتیب، نمای درختی را به درستی نشان خواهم داد. برای اطمینان از اینکه متوجه شدید، در اینجا یک ردیف از جدول آمده است:

شناسه first_name last_name parent_id order_sequence
1 روزا ولینگتون NULL 1
2 جان ولینگتون 1 1_2
6 فرانک ولینگتون 2 1_2_6
مقدار ستون برای فرانک ولینگتون 1_2_6 خواهد بود. چرا؟ از آنجا که رزا، به عنوان سطح اول، ارزش 1 را دریافت می کند. جان ولینگتون پسر او است. شناسه او به order_sequence می رود که اکنون 1_2 می شود. سپس شناسه فرانک اضافه می شود و 1_2_6 می شود. با انجام این کار در سراسر ساختار سلسله مراتبی، ستونی را دریافت می کنم که می توانم از آن برای نشان دادن خروجی به روش دلخواه استفاده کنم.

بازگشت به پرس و جو. برای به دست آوردن نتیجه، به یک SELECT نیاز دارید که از داده های CTE استفاده کند. من از تابع RIGHT() در اینجا استفاده می کنم. تعداد مشخصی از کاراکترها را از سمت راست استخراج می کند. در مورد من، سطح * 3 عدد خط تیره برای هر سطح را حذف می کند. من همچنین این خط تیره ها را با نام و نام خانوادگی پیوند زده ام. نتیجه بر اساس order_sequence مرتب شده است.

آیا برای دیدن نمای درخت آماده هستید؟ ایناهاش:

والدین_درخت_فرزند
رزا ولینگتون
---جان ولینگتون
------مری دایکسترا
---------سام فرانسیس دایکسترا
------ فرانک ولینگتون
---------استیون ولینگتون
---------ترنت ولینگتون
--- جونی ولینگتون
------جیسون ولینگتون
---مارج ولینگتون
------سارا ولینگتون
------بابی ولینگتون
------سامی ولینگتون
--------- جون ولینگتون
--------- جوزفین ولینگتون
--------- سوزی ولینگتون
این نمایش گرافیکی ساده کاملاً به وضوح سطوح نسلی و اینکه چه کسی در این شجره خانوادگی است را نشان می دهد. با تعداد خط تیره ها، به راحتی می توانید ببینید که جان، جونی و مارج ولینگتون فرزندان رزا هستند. مری دایکسترا، فرانک، جیسون، سارا، بابی و سامی ولینگتون نوه های رزا هستند. همچنین به راحتی می توان فهمید که والدین آنها چه کسانی هستند. شما همچنین می توانید ببینید که نوه ها چه کسانی هستند، اما من آن را به شما واگذار می کنم.

قبل از اتمام این کار، من همچنین می خواهم این مقاله را در مورد نحوه عملکرد ساختارهای درختی پرس و جو در اوراکل توصیه کنم.

پرس و جو از درختان والد-فرزند فقط جالب تر می شود

ساختار درختی والد-فرزند بسیار هیجان انگیز است. آنها مجموعه ای کاملاً متفاوت از داده هایی هستند که معمولاً در پایگاه داده های رابطه ای جستجو می کنید. من به شما نشان دادم که این ساختارهای سلسله مراتبی چیست و چگونه در یک جدول نمایش داده می شوند.

مهمتر از همه، من به شما پنج پرس و جو را نشان داده ام که می توانید از آنها برای حل برخی از رایج ترین مشکلات مربوط به داده های سلسله مراتبی استفاده کنید. همانطور که دیدید، CTE ها و CTE های بازگشتی برای پرس و جو از درختان والد-فرزند حیاتی هستند.

LearnSQL.com پلتفرمی است که به شما امکان می دهد تمام موضوعات SQL را مرور کنید و مسیر درست را برای خود انتخاب کنید، با این تضمین که می توانید در هر زمان بدون هیچ عواقبی نظر خود را تغییر دهید.

من مطمئن هستم که شما قبلاً با داده های سلسله مراتبی در کار خود روبرو شده اید. احتمالاً متوجه شده اید که برای مقابله با چنین داده هایی باید خود را با دانش جستجوی بازگشتی دقیق مجهز کنید. ما یک دوره پرس و جوهای بازگشتی داریم که به طور سیستماتیک شما را از طریق CTE ها به طور کلی، پرس و جوهای بازگشتی و نحوه عملکرد داده ها و نمودارهای سلسله مراتبی پرس و جو در SQL هدایت می کند.

در یادگیری موفق باشید! و با خیال راحت از تمام سوالاتی که به شما نشان داده ام استفاده کنید و آنها را با نیازهای تجاری خود تطبیق دهید.

  • ۰۱/۰۷/۲۰
  • sahar saha sql

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی