Alias ها و دستور JOIN در زبان SQL

25 اسفند 1397
درسنامه درس 14 از سری آموزش زبان SQL
SQL-Language-join-alias

با عرض سلام و خسته نباشید خدمت شما دوستان عزیز! امروز می خواهیم در رابطه با مبحث Alias ها (به معنی نام مستعار) صحبت کنیم و فواید آن را مورد بحث قرار می دهیم و همچنین با دستور جالب JOIN و انواع آن آشنا خواهیم شد.

Alias ها در SQL

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

ساختار کلی Alias ها به این شکل است:

برای ستون ها:

SELECT column_name AS alias_name
FROM table_name;

برای جدول ها:

SELECT column_name(s)
FROM table_name AS alias_name;

بیایید به سراغ مثال ها برویم تا بهتر با طرز کارش آشنا شوید. ابتدا جدول هایی را بررسی می کنیم که می خواهیم مثال هایمان را روی آن ها اجرا کنیم.

قسمتی از جدول Customers

Country PostalCode City Address ContactName CustomerName CustomerID
Mexico 05021 México D.F. Avda. de la Constitución 2222 Ana Trujillo Ana Trujillo Emparedados y helados 2
Mexico 05023 México D.F. Mataderos 2312 Antonio Moreno Antonio Moreno Taquería 3
UK WA1 1DP London 120 Hanover Sq. Thomas Hardy Around the Horn 4

قسمتی از جدول Orders

ShipperID OrderDate EmployeeID CustomerID OrderID
3 1996-11-14 8 58 10354
1 1996-11-15 6 4 10355
2 1996-11-18 6 86 10356

مثال های استفاده از Alias

مثال اول - کد زیر دو Alias می سازد؛ یکی برای ستون CustomerID و دیگری برای CustomerName:

SELECT CustomerID AS ID, CustomerName AS Customer
FROM Customers;

برای اجرای این دستور در پایگاه داده ی Northwind روی این لینک کلیک کنید.

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

مثال دوم - کد زیر دو Alias می سازد؛ یکی برای ستون CustomerName و دیگری برای ContactName:

SELECT CustomerName AS Customer, ContactName AS [Contact Person]
FROM Customers;

برای اجرای این دستور در پایگاه داده ی Northwind روی این لینک کلیک کنید.

آیا این مثال دقیقا مانند مثال قبلی نبود؟ اگر دقت کنید علامت های براکت را در کد می بینید. آیا می توانید حدس بزنید کارشان چیست؟ اگر Alias ما دارای اسپیس باشد باید یا بین براکت ها یا بین double quotation قرار بگیرد.

مثال سوم - کد زیر یک Alias به نام Address می سازد که چهار ستونِ Address, PostalCode, City و Country را با هم در نظر می گیرد:

SELECT CustomerName, Address + ', ' + PostalCode + ' ' + City + ', ' + Country AS Address
FROM Customers;

برای اجرای این دستور در پایگاه داده ی Northwind روی این لینک کلیک کنید.

نکته: اگر بخواهید کد بالا را در MySQL استفاده کنید باید آن را به شکل زیر بنویسید:

SELECT CustomerName, CONCAT(Address,', ',PostalCode,', ',City,', ',Country) AS Address
FROM Customers;

تا این قسمت تنها روی ستون ها کار کردیم اما نوبتی هم باشد نوبت جدول ها است!

مثال چهارم - دستور زیر تمام سفارشاتی را انتخاب می کند که CustomerID=4 باشد:

SELECT o.OrderID, o.OrderDate, c.CustomerName
FROM Customers AS c, Orders AS o
WHERE c.CustomerName="Around the Horn" AND c.CustomerID=o.CustomerID;

برای اجرای این دستور در پایگاه داده ی Northwind روی این لینک کلیک کنید.

ما در کد بالا از جدول های Customers و Orders استفاده می کنیم و به آن ها Alias های c و o می دهیم. همانطور که می بینید فایده ی استفاده از Alias ها این است که کدها خواناتر شده و از طرفی کوتاه تر هم می شوند. واضح است که Alias ها اختیاری اند و بستگی به سلیقه ی شما دارند. برای مقایسه، کد اصلی را بدون Alias می آوردم:

SELECT Orders.OrderID, Orders.OrderDate, Customers.CustomerName
FROM Customers, Orders
WHERE Customers.CustomerName="Around the Horn" AND Customers.CustomerID=Orders.CustomerID;

مشخص است که کدها کمی طولانی تر شده اند. مسئله این است که اگر کدها طولانی تر شوند، احتمال خطای تایپی نیز بیشتر می شود!

به طور خلاصه می توان گفت مزیت استفاده از Alias ها در موارد زیر است:

  • زمانی که در کوئری شما بیشتر از یک جدول داشته باشیم.
  • زمانی که در کوئری شما از توابع استفاده شده باشد.
  • نام ستون ها بسیار طولانی و یا ناخوانا (مانند SlJ87A) هستند.
  • دو یا تعداد بیشتری از ستون ها با هم ادغام شده باشند.

دستور JOIN

ما زمانی از دستور JOIN استفاده می کنیم که بخواهیم ردیف های دو یا چند جدول را بر اساس ستونی که بین شان است با هم ادغام کنیم. احتمالا برایتان گیج کننده بود! بگذارید ابتدا به جدول های زیر نگاهی بیندازیم:

قسمتی از جدول Orders

OrderDate CustomerID OrderID
1996-09-18 2 10308
1996-09-19 37 10309
1996-09-20 77 10310

قسمتی از جدول Customers

Country ContactName CustomerName CustomerID
Germany Maria Anders Alfreds Futterkiste 1
Mexico Ana Trujillo Ana Trujillo Emparedados y helados 2
Mexico Antonio Moreno Antonio Moreno Taquería 3

اگر به دو جدول بالا دقت کنید متوجه خواهید شد که ستون CustomerID در جدول Orders به ستونِ CustomerID در جدول Customers اشاره دارد! در واقع رابطه ی بین این دو جدول همان CustomerID است. حالا می توانیم با دستور JOIN ردیف هایی را از هر دو جدول انتخاب کنیم که مقادیر یکسانی دارند:

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;

برای اجرای این دستور در پایگاه داده ی Northwind روی این لینک کلیک کنید.

خروجی این کد تعداد ردیف های بسیار زیادی است که به این شکل هستند:

قسمتی از خروجی کد
قسمتی از خروجی کد

اما سوالی پیش می آید... دستور INNER JOIN دیگر چیست؟ باید بدانید که دستور JOIN چند حالت مختلف دارد که از این قرار اند:

دستورات مختلفِ JOIN
دستورات مختلفِ JOIN
  • INNER) JOIN): ردیف هایی را بر میگرداند که دارای مقادیر تطبیق یافته با کوئری در هر دو جدول هستند.
  • LEFT (OUTER) JOIN: تمام ردیف ها را از جدول سمت چپ و مقادیر تطبیق یافته را از جدول سمت راست برمیگرداند.
  • RIGHT (OUTER) JOIN: تمام ردیف ها را از جدول سمت راست و مقادیر تطبیق یافته را از جدول سمت چپ برمیگرداند.
  • FULL (OUTER) JOIN: اگر در سمت چپ یا راست ردیف ها و مقادیر تطبیق یافته ای باشد، همه را بر میگرداند.

می توانید به عکس بالا توجه کنید و مفاهیم این کدها را به شکل تصویری ببینید.

خلاصه ی مقاله

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

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری آموزش زبان SQL توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما (2 دیدگاه)

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

مارال رضایی
30 تیر 1402
متاسفانه این جلسه آموزشی گنگ و نامفهوم بود.

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

حسین
31 فروردین 1400
سلام و خسته نباشید متاسفانه این جلسه آموزشی کمی گنگ بود و دستور JOIN به طور واضح بررسی نشده بود

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