Select های تو در تو : می توان در درون يک دستور Select ، دستور Select ديگری را تعريف کرد . در اين حالت ابتدا دستور Select درونی اجرا شده و نتايج مورد نظر خود را که سطرهايی از جدول مربوط به آن هستند را استخراج کرده و آنرا به Select بيرونی انتقال می دهد . سپس Select بيرونی نيز اجرا شده و نتايج استخراجی خود را با استفاده از فيلد مشترک بين 2 جدول با سطرهای Select درونی پيوند زده و سطرهای مطابق با شروط تعيين شدهخ را نمايش می دهد . از حالت Select های تو در تو برای پيوند جدول ها استفاده می شود و برای زمانی مناسب است که بخواهيم ستون های خروجی در دستور Select فقط از يک جدول که در بيرونی ترين Select تعريف شده اند ، نمايش داده شوند . نکته : به تعداد دستورات Select تو در تو ، سطح آن می گويند . [HR][/HR] Select های 2 سطحی : در اين حالت يک دستور Select در درون دستور Select ديگری تعريف می شود و برای پيوند 2 جدول با استفاده از فيلد مشترک استفاده می شود . نتايج خروجی فقط می تواند شامل سطرهای از جدول Select بيرونی باشد . شکل کلی پيوند 2 جدول بااستفاده از Select 2 سطحی به صورت زير است : Select نام ستون های مورد نظر برای نمايش از جدول بيرونی From نام جدول 1 Where نام فيلد مشترک 2 جدول IN ( Select نام فيلد مشترک 2 جدول From نام جدول 2 Where شرط ها ... ) ; مثال های قسمت های قبل پيوند جدول ها را با استفاده از Select های تو در تو بازنويسی می کنيم . مثال : نام و نام خانوادگی دانشجويانی را ارائه دهيد که در ترم 1 سال تحصيلی 85 - 86 ، درس با کد 1012 را انتخاب کرده اند : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Name , Family From Students Where Student ID IN ( Select Student ID From Selection Where Course ID = 1012 AND Term = 1 AND Year = ' 85 - 86 ' ) ; [/TD] [TD="class: header"] کد[/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [TR] [TD="class: header"] Name[/TD] [TD="class: header"] Family[/TD] [/TR] [TR] [TD="class: body"] Ehsan[/TD] [TD="class: body"] Amiri[/TD] [/TR] [TR] [TD="class: body"] Ahmad[/TD] [TD="class: body"] Rezaee[/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی [/TD] [/TR] [/TABLE] نکته : تفاوت اين حالت با مثال های قبلی در اين است که ستون های نمايش داده شده فقط از يک جدول ( جدول Select بيرونی ) نمايش داده می شوند . مثال : نام دروسی را ارائه دهيد که دانشجو با شماره دانشجويي 10254861 انتخاب کرده است : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Coures ID , CoTitle From Courses Where Course ID IN ( Select Course ID From Selection Where Student ID = 10254861 ) ; [/TD] [TD="class: header"] کد[/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [TR] [TD="class: header"] Course ID [/TD] [TD="class: header"] Course Title [/TD] [/TR] [TR] [TD="class: body"] 1011 [/TD] [TD="class: body"] پايگاه داده [/TD] [/TR] [TR] [TD="class: body"] 1013 [/TD] [TD="class: body"] زبان تخصصی [/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی[/TD] [/TR] [/TABLE] [HR][/HR] Select های 3 سطحی : در اين حالت 3 دستور Select به صورت تو در تو تعريف شده اند و برای پيوند 3 جدول به صورت 2 به 2 و با استفاده از فيلد های مشترک استفاده می شود . نتايج خروجی فقط می تواند شامل ستون هايي از بيرونی ترين Select تعريف شده باشد . در اين حالت از جدول دوم برای پيوند جدول های 1 و 3 استفاده می شود . شکل کلی پيوند 3 جدول با استفاده از Select های 3 سطحی به صورت زير است : Select نام ستون های مورد نظر جهت نمايش از جدول 1 From نام جدول 1 where نام فيلد مشترک جدول 1 و 2 IN ( Select نام فيلد مشترک جدول 1 و2 From نام جدول 2 Where نام فيلد مشترک جدول 2 و 3 IN ( Select نام فيلد مشترک جدول 2 و 3 From نام جدول 3 Where بقيه شرط ها ... )) ; مثال : نام و نام خانوادگی دانشجويانی را ارائه دهيد که حداقل يک درس از نوع نظری را انتخاب کرده باشد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Name , Family From Students where Student ID IN ( Select Student ID From Selection Where Course ID IN ( Select Course ID From Courses Where CoType = ' نظری ' )) ; [/TD] [TD="class: header"] کد[/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [TR] [TD="class: header"] Name [/TD] [TD="class: header"] Family [/TD] [/TR] [TR] [TD="class: body"] Zahra [/TD] [TD="class: body"] Hosini [/TD] [/TR] [TR] [TD="class: body"] Sahar [/TD] [TD="class: body"] Ahamadi [/TD] [/TR] [TR] [TD="class: body"] Hesam [/TD] [TD="class: body"] Razavi [/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی[/TD] [/TR] [/TABLE]