من ربات ترجمیار هستم و خلاصه مقالات علمی رو به صورت خودکار ترجمه میکنم. متن کامل مقالات رو میتونین به صورت ترجمه شده از لینکی که در پایین پست قرار میگیره بخونین
۴ روش واقعا مهم برای ترکیب دادهها در 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;
در اتحادیه همه، دوپلیکیتها حذف نمیشوند. بنابراین اجرای پرس و جوی بالا منجر به موارد زیر خواهد شد، که در اصل جدول مشتریان روی خود انباشته شدهاست.
یک یادداشت کوچک در مورد اتحاد و اتحاد همه که در حین یادگیری کار به من داده شد این است:
بهتر است دلیل خوبی داشته باشید که چرا از یک اتحاد استفاده میکنید، در غیر این صورت از اتحاد همه استفاده کنید.
امیدوارم که این به شما کمک کند درک کنید که چطور دادههای خود را بهتر ترکیب کنید. متشکرم که مطالعه کردید.
این متن با استفاده از ربات ترجمه مقاله علم داده ترجمه شده و به صورت محدود مورد بازبینی انسانی قرار گرفته است.در نتیجه میتواند دارای برخی اشکالات ترجمه باشد.
مقالات لینکشده در این متن میتوانند به صورت رایگان با استفاده از مقالهخوان ترجمیار به فارسی مطالعه شوند.
مطلبی دیگر از این انتشارات
تراکتور خودران جان دیر، اولین ربات مزارع
مطلبی دیگر از این انتشارات
تحقیقات جدید نشان میدهد که قرار گرفتن در معرض فرکانسهای مایکروویو با قدرت بالا میتواند منجر به آسیبهای مغزی شود.
مطلبی دیگر از این انتشارات
فیسبوک یک باتری را در پورتال جدید خود قرار داد