کلید اصلی و خارجی، INNER JOIN
بفهمی چرا داده در چند جدول نگهداری میشود و با INNER JOIN جدولها را به هم وصل کنی.
14 دقیقه مطالعه · 5 سؤال تمرینی · SQL از صفر: پرسوجو برای تحلیل داده
چرا چند جدول؟ کلید اصلی و کلید خارجی
اگر نام و شهر مشتری را در هر سفارش تکرار میکردیم، تغییر یک شهر یعنی ویرایش دهها ردیف و خطر ناهماهنگی. راهحل: هر واقعیت فقط یک جا ذخیره شود و جدولها با شناسه به هم وصل شوند.
- کلید اصلی (
PRIMARY KEY): ستونی (مثلcustomers.id) که هر ردیف را یکتا مشخص میکند: تکراری و NULL ندارد. - کلید خارجی (
FOREIGN KEY): ستونی (مثلorders.customer_id) که به کلید اصلی جدول دیگر اشاره میکند. پایگاه داده جلوی ثبت سفارش برای مشتریِ ناموجود را میگیرد.
پس سفارش ۱۰۱ فقط میگوید customer_id = 1؛ اینکه ۱ همان Sara است در جدول customers میماند. برای دیدن همه با هم باید جدولها را JOIN کنیم.
INNER JOIN
SELECT c.name, o.id AS order_id, o.status
FROM customers AS c
JOIN orders AS o ON o.customer_id = c.id;
JOIN ... ON شرطردیفهای دو جدول را وقتی کنار هم میگذارد که شرط درست باشد. (JOINتنها یعنیINNER JOIN.)cوoنام مستعار جدول هستند تا کوتاه بنویسیم و ستونهای همنام (مثلidکه در هر دو جدول هست) مبهم نشوند:c.idوo.id.- INNER یعنی فقط ردیفهایی که در هر دو طرف جفت دارند میمانند. مشتری بدون سفارش یا سفارش بدون مشتری حذف میشود.
- همینطور میتوان چند جدول را پشت هم JOIN کرد.
اگر ON را فراموش کنید یا غلط بنویسید، هر ردیف با هر ردیف ترکیب میشود (ضرب دکارتی): ۶ مشتری × ۸ سفارش = ۴۸ ردیف بیمعنی.