۴ روش‌ واقعا مهم برای ترکیب داده‌ها در SQL

شکل ۱. پیوندها
شکل ۱. پیوندها
منتشر‌شده در: towardsdatascienceبه تاریخ ۹ ژوئن ۲۰۲۱
لینک منبع 4 Really Important Ways to Combine Data in SQL

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

همانطور که عنوان مقاله می‌گوید حداقل ۶ راه برای پیوستن به داده در SQL وجود دارد. قبلا من در مورد مهارت‌های اساسی SQL برای یادگیری نوشتم. شما می‌توانید مقاله را در اینجا بخوانید.

دانش SQL بنیادین.Foundational SQL Know-How. برای خطرناک بودن کافی است. | نوشته اسکات فینه | CodeX | Medium

همچنین می‌توانید تمام کدهای مورد استفاده در GitHub من را پیدا کنید.

بیایید نگاهی به جداولی که استفاده خواهیم کرد بیندازیم و یک یادآوری سریع دریافت کنیم. کد زیر جداول موقتی را ایجاد خواهد کرد که برای بحث در مورد اتصالات از آن‌ها استفاده خواهیم کرد.

DROP TABLE IF EXISTS customers CASCADE;

DROP TABLE IF EXISTS orders CASCADE;CREATE TEMP TABLE customers (

 cust_id INT PRIMARY KEY NOT NULL,

 first_name VARCHAR(200) NOT NULL,

 lifetime_value FLOAT NULL

);CREATE TEMP TABLE orders (

  order_id INT PRIMARY KEY NOT NULL,

  cust_id INT NOT NULL,

  date  DATE NULL,

  product VARCHAR(200) NOT NULL,

  CONSTRAINT fk_customer

   FOREIGN KEY(cust_id)

    REFERENCES customers(cust_ID)

    ON DELETE CASCADE

);INSERT INTO customers VALUES (1, 'Jim', 4003)

       , (2, 'Albert', 49024)

       , (3, 'Juanita', 3200)

       , (4, 'Bill', 5000)

       , (5, 'Leslie', 23500)

       , (6, 'Fredrick', NULL)

       , (7, 'Ricky', NULL)

       , (8, 'Dean', NULL);INSERT INTO orders VALUES (1, 1, '01/01/2020', 'Pen')

      , (2, 2, '04/20/2021', 'Scissors')

      , (3, 1, '02/28/2021', 'Paper')

      , (4, 3, '03/25/2021', 'Paper')

      , (5, 4, '06/01/2021', 'Computer')

      , (6, 5, '12/24/2020', 'Stapler')

      , (7, 3, '01/19/2021', 'Desk')

      , (8, 4, '01/28/2021', 'Pens')

      , (9, 2, '05/08/2021', 'Paper Clip')

      , (10, 1, '06/02/2021', 'Scissors');

هنگامی که جدول‌ها ایجاد شدند، بیایید نگاهی به ظاهر آن‌ها بیندازیم.

SELECT *

FROM customers;
شکل ۲. جدول مشتریان
شکل ۲. جدول مشتریان
SELECT *

FROM orders;
شکل ۳. جدول سفارشات
شکل ۳. جدول سفارشات

بسیار خوب، حالا که می‌دانیم جدول‌ها شامل چه چیزهایی هستند، بیایید به سراغ اتصالات برویم.

پیوندها

پیوندهای زیادی در SQL وجود دارد، اما به نظر من مفیدترین آن‌ها به شرح زیر است:

  • پیوستن درونی (Inner Join)
  • پیوستن چپ (Left Join)

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

پیوست درونی (INNER JOIN)

در نظریه مجموعه و اتصال داخلی، A⋂B نوشته می‌شود، که به آن A تقاطع B گفته می‌شود. این محل به سادگی جایی است که A و B با هم همپوشانی دارند.

شکل ۴. پیوستن درونی
شکل ۴. پیوستن درونی

این احتمالا رایج‌ترین نوع اتصال در SQL است. تنها سطرهایی را برمی گرداند که ستون مشخص در هر دو جدول مطابقت دارد، بنابراین تقاطع این دو قرار دارد.

برای اجرای یک INner JOIN در SQL باید دو چیز را مشخص کنید.

  • در این مورد چه نوع پیوندی وجود دارد، INNER JOIN.
  • چه ستون‌هایی را باید به آن اضافه کرد؟ cust_id این کار با استفاده از کلمه کلیدی ON انجام می‌شود.
SELECT *

FROM customers c

 JOIN orders o ON c.cust_id = o.cust_id;SELECT *

FROM customers c

 INNER JOIN orders o ON c.cust_id = o.cust_id;

توجه داشته باشید که دو روش مختلف برای تولید یک نتیجه یک‌سان وجود دارد. این به این دلیل است که یک INner JOIN نوع اتصال پیش‌فرض است، مگر اینکه مشخص شده‌باشد. شما می‌توانید به هر صورت آن را بنویسید، اما من روش دوم را ترجیح می‌دهم چون بیشتر قابل خواندن است و به افرادی که کد شما را در آینده می‌خوانند کمک خواهد کرد.

خروجی هر دو پرس و جوی بالا تنها ردیف‌هایی را تولید خواهد کرد که در هر یک از جداول، cust _ id یکسانی وجود دارد.

شکل ۵. خروجی پیوستن درونی
شکل ۵. خروجی پیوستن درونی

پیوند چپ(LEFT JOIN)

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

شکل ۶. پیوستن چپ
شکل ۶. پیوستن چپ

این دومین نوع اتصال رایج در SQL است و تمام ردیف‌های جدول A و تنها ردیف‌های جدول B را برمی گرداند که با ستون مشخص‌شده از A مطابقت دارد.

برای انجام LEFT JOIN در SQL باید دو چیز را مشخص کنید.

  • در این مورد چه نوع پیوستن، LEFT JOIN
  • چه ستون‌هایی را باید به آن اضافه کرد؟cust_id این کار با استفاده از کلمه کلیدی ON انجام می‌شود.
SELECT *

FROM customers c

 LEFT JOIN orders o ON c.cust_id = o.cust_id;

 

SELECT *

FROM customers c

 LEFT OUTER JOIN orders o ON c.cust_id = o.cust_id;

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

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

شکل ۷. خروجی پیوستن چپ
شکل ۷. خروجی پیوستن چپ

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

اتحادها

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

به یاد داشته باشید، اتصالات برای اضافه کردن ستون‌های بیشتر به خروجی پرس و جو استفاده می‌شوند در حالی که اتحادیه‌ها برای اضافه کردن ردیف‌های بیشتر به خروجی پرس و جو استفاده می‌شوند. با گفتن این جمله، راه‌هایی برای انجام این کار وجود دارد، اتحاد و اتحاد همه.

اتحاد

اولین روش اتحادیه صرفا اتحاد است. این روش خاص با تفاوت‌های ظریف زوج، ردیف‌هایی را به خروجی اضافه می‌کند. اول، ساختار هر دو پرس و جو باید دقیقا یک‌سان باشد، و دوم، این روش به طور خودکار تکراری‌ها را حذف خواهد کرد.

پس بگذارید این را از بین ببرید.

SELECT *

FROM customersUNIONSELECT *

FROM customers;

شما می‌توانید تک انتخاب را اجرا کنید و ببینید که نتایج چه هستند، اما آن‌ها مانند اتحادیه خواهند بود. این به این دلیل است که اتحادیه دو تکراری را حذف می‌کند، بنابراین آن‌ها اساسا یک چیز هستند.

شکل ۸. خروجی واحد
شکل ۸. خروجی واحد

اتحادیه کامل

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

SELECT *

FROM customersUNION ALLSELECT *

FROM customers;

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

شکل۹. مقادیر
شکل۹. مقادیر

یک یادداشت کوچک در مورد اتحاد و اتحاد همه که در حین یادگیری کار به من داده شد این است:

بهتر است دلیل خوبی داشته باشید که چرا از یک اتحاد استفاده می‌کنید، در غیر این صورت از اتحاد همه استفاده کنید.

امیدوارم که این به شما کمک کند درک کنید که چطور داده‌های خود را بهتر ترکیب کنید. متشکرم که مطالعه کردید.

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