spacer
 
به سایت شرکت هوشمند گستر جم اصفهان - بخش آموزش خوش آمدید 1
  1
1
1
header

ادغام داده ها از جداول مختلف : INNER JOIN

 

طراحان پایگاه داده، معمولا اطلاعات را به جداول مختلفی تقسیم میکنند تا مطمئن باشند که در پایگاه داده اطلاعات بیهوده و زائد ذخیره نمیشود. برای مثال، پایگاه داده Book شامل دو جدول Authors و Titles است. ما با استفاده از جدول AuthorISBN، لینکی بین نویسنده های مختلف و عناوین کتبی که نوشته اند برقرار میکنیم. در صورتیکه این اطلاعات را به جداول مختلف تقسیم نمیکردیم مجبور بودیم تا اطلاعات نویسنده را برای هر عنوان کتاب در جدول Titles در نظر بگیریم و از اینرو یکسری اطلاعات اضافی و تکراری در جدول ذخیره میشد چراکه برای عناوین کتبی که نویسنده آنها یکسان است، اطلاعات نویسنده بطور تکراری ذخیره میگردید.

همچنین برای مقاصد آنالیز و تجزیه و تحلیل، ضروری است تا اطلاعات مختلف از جداول مختلف با یکدیگر ادغام شوند و یک مجموعه اطلاعاتی جدید را ایجاد نمایند. با استفاده از عملی تحت عنوان "ادغام جداول" ، این عمل قابل اجرا است و بوسیله INNER JOIN در دستور SELECT آنرا در SQL عملی میکنیم. یک INNER JOIN رکوردهای مختلفی را از جداول متفاوت با یکدیگر ادغام میکند و این عمل را از طریق تست کردن مقادیر فیلدهایی انجام میدهد که در جداول مورد نظر عمومیت دارند. ساده ترین فرم INNER JOIN بشکل زیر است :

SELECT fieldName1, fieldName2, …

FROM table1

INNER JOIN table2

ON table1.fieldName = table2.fieldName

 

که در آن قسمت بعد از عبارت ON، فیلدهایی را نشان میدهد از دو جدول با یکدیگر مقایسه میشوند تا معین شود چه رکوردهایی با یکدیگر ادغام میشوند. برای مثال، query زیر لیستی از تمام نویسنده ها به همراه ISBN مربوط به کتابهای نوشته شده توسط آنها را ایجاد میکند :

 

SELECT firstName, lastName, isbn

FROM Authors

INNER JOIN AuthorISBN

ON Authors.authorID = AuthorISBN.authorID

ORDER BY lastName, firstName

 

این query فیلدهای firstName و lastName از جدول Authors را با فیلد isbn از جدول AuthorISBN ادغام میکند و نتیجه را بر اساس فیلدهای lastName و firstName بصورت صعودی مرتب مینماید. در این query به فرمت عبارت نوشته شده بعد از عبارت ON که بصورت tableName.fieldName است توجه نمایید. در این قسمت مشخص میشود که عمل ادغام بین دو جدول از طریق کدام فیلد انجام خواهد گرفت. استفاده از فرمت نوشتاری "tableName." در مواردی ضروری است که نام فیلد در هر دو جدول یکسان باشد.

 

ادغام اطلاعات از جداول Authors، AuthorISBN، Titles و Publisher

 

در اینجا می خواهیم برای پایگاه داده Book یک query تعریف کنیم که توسط آن عنوان کتاب، شماره ISBN، نام نویسنده، نام خانوادگی نویسنده، سال انشار کتاب و نام ناشر هر کتاب نمایش داده شود. برای کتابهایی که بیش از یک نویسنده دارند، این query میبایست رکوردهای مجزایی را برای هر نویسنده نمایش دهد. توجه نمایید که در این query نیاز است تا بین هر چهار جدول ادغام صورت گیرد. این query در زیر نمایش داده شده است :

 

SELECT Titles.Title, Titles.ISBN, Authors.FirstName, Authors.LastName, Publishers.PublisherName

FROM

(

 Publishers

 INNER JOIN Titles

 ON Publishers.PublisherID = Titles.PublisherID

)

INNER JOIN

(

 Authors

 INNER JOIN AuthorISBN

 ON Authors.AuthorID = AuthorISBN.AuthorID

)

 

ON Titles.ISBN = AuthorISBN.ISBN

ORDER BY Titles.Title;

 

 

نتیجه این query در شکل زیر نمایش داده شده است :

 نتیجه query

 

 

حال به بررسی این query میپردازیم. در خطوط 1و2 این query، فیلدهای مورد نظر که بعنوان نتیجه در خروجی نمایش داده میشوند، قرار گرفته اند. توجه نمایید که ترتیب قرار گرفتن فیلدها در این لیست، از این جهت اهیمت می یابد که فیلدها در خروجی به همین ترتیب نمایش داده خواهند شد. این query، فیلدهای title و isbn از جدول Titles، فیلدهای lastName و firstName از جدول Authors، فیلد copyright از جدول Titles و فیلد publisherName از جدول Publishers را انتخاب مینماید. برای اینکه متن این query خوانا تر باشد، قبل از نام هر فیلد نام جدول آنرا نیز آورده ایم. (به این روش Fully Qualified Name گفته میشود.) در خطهای بعدی، عمل ادغام بین جداول مختلف صورت گرفته است. در این query از سه عمل INNER JOIN استفاده شده است. باید به نکته توجه شود، اگرچه INNER JOIN بر روی دو جدول انجام میشود، اما نتیجه آن می تواند بعنوان ورودی برای INNER JOIN دیگری مورد استفاده قرار گیرد چراکه نتیجه یک INNER JOIN خود یک جدول است. همچنین برای اولویت بخشیدن به اجرای دستورات از پرانتز استفاده نموده ایم. در ابتدا با دستور زیر آغاز میکنیم :

(Publishers INNER JOIN Titles

  ON Publishers.publisherID = Titles.publisherID)

 

که جدول Publishers و Titles را با استفاده از شرایطی که در آن فیلدها publisherID دو جدول با یکدیگر منطبق هستند، ادغام میکند. جدول موقتی که از انجام این INNER JOIN تشکیل میشود حاوی اطلاعات کتاب و ناشر مربوط به آن است.

دیگر INNET JOIN این query عبارت است از :

 

( Authors

 INNER JOIN AuthorISBN

 ON Authors.AuthorID = AuthorISBN.AuthorID )

 

  که جدول Authors و AuthorISBN را در شرایطی که فیلد AuthorID با یکدیگر منطبق باشند، ادغام مینماید.

سومین INNER JOIN در این query عبارت است از :

 

(

 Publishers

 INNER JOIN Titles

 ON Publishers.PublisherID = Titles.PublisherID

)

INNER JOIN

(

 Authors

 INNER JOIN AuthorISBN

 ON Authors.AuthorID = AuthorISBN.AuthorID

)

 

ON Titles.ISBN = AuthorISBN.ISBN

 

 

که باعث ادغام دو جدول موقتی ایجاد شده از دو INNER JOIN قبلی، تحت شرایطی میشود که در آن فیلد Titles.isbn برای هر رکورد در اولین جدول موقت با فیلد AuthorISBN.isbn برای هر رکورد از جدول موقت دوم، منطبق باشند. نتیجه نهایی این INNER JOIN نیز، جدول موقتی است که نتیجه مورد نظر را در بر دارد.

در انتهای query نیز، نتایج بر اساس فیلد Titles.title مرتب میشوند.



تمام حقوق این سایت متعلق به شرکت هوشمند گستر جم اصفهان تعلق دارد - 1386
تمام صفحات
Register Forgot Pass?