زبان SQL به طرز شگفتانگیزی قدرتمند است. تمام ابزارهای توسعه نرمافزاری که به خوبی طراحی شدهاند، میتوانند با این زبان کار میکند. مجموعهای از دستورات در زبان SQL وجود دارند که تمام توسعهدهندگان و مدیران پایگاه داده باید با آنها آشنایی داشته باشند. در این مطلب از مجله فرادرس، سعی کردیم گروهی از پُرکاربردترین کوئری های SQL را معرفی کنیم. این دستورات اهمیت بسیار زیادی برای پیادهسازی پایگاههای داده قوی و بهینهسازی دادهها دارند. داشتن مهارت درک و نوشتن کوئریهای این مطلب تقریبا برای تمام مدیران سیستمهای پایگاه داده SQL ضروری است.
در این مطلب ۷۰ مورد از مهمترین و پرکاربردترین کوئری های SQL را معرفی کردهایم. این کوئریها تقریبا در تمام پایگاههای داده به کار برده میشوند. بنابراین لازم است که توانایی کار با آنها را به عنوان مدیر پایگاه داده داشته باشیم. ابتدا تمام کوئریها را به صورت مرتب دستهبندی کردیم. سپس همه کوئریهای موجود در این دستهها را یک به یک توضیح داده و مثال مرتبط به هر کدام را به صورت کدنویسی شده نمایش دادهایم.
مهم ترین کوئری های SQL
در این بخش از مطلب، مهمترین کوئری های SQL را با توجه به عملکردشان در گروههای مختلفی قرار دادهایم. این دستهبندی شامل ۱۱ گروه زیر است. هر کدام از این گروهها شامل کوئریهای مختلفی هستند که در ادامه مطلب همراه با توضیحات کافی نمایش داده شدهاند.
- «بازیابی دادهها» (Data Retrieval)
- کوئریهای «تجمعی و خلاصهسازی» (Aggregations and Summarizations)
- «نماها» (Views)
- «کلیدها و محدودیتها» (Keys and Constraints)
- «مدیریت پایگاه داده» (Database Management)
- «اندیسگذاری و بهینهسازی عملکرد» (Indexing and Performance Optimization)
- «کوئریهای تحلیلی» (Analytical Queries)
- کوئریهای «تطبیق رشته و الگو» (String and Pattern Matching)
- «کوئریهای شرطی و مدیریت دادههای پوچ» (Null Handling and Conditional Queries)
- «توابع پیشرفته» (Advanced Functions) در SQL
- سایر کوئری های SQL
در ادامه مطلب، تمام دستههای بالا را یک به یک معرفی کرده و برای هر کدام نیز چند کوئری را به عنوان مثال نمایش دادهایم.
کوئری های SQL برای بازیابی داده ها
در این قسمت از مطلب، ۱۰ مورد از مهمترین کوئری های SQL درباره بازیابی دادهها را معرفی کرده و مثالهای مربوط به آنها را نمایش دادهایم.
۱. فراخوانی جدول ها
این کوئری برای فراخوانی فهرستی از تمام جدولهای موجود در پایگاه داده استفاده میشود.
با استفاده از دستور SELECT در SQL کاربران حتی میتوانند، مشخص کنند که از جدولهای موجود در پایگاه داده کدام ستونها در خروجی نمایش داده شوند. دستور SELECT برای انتخاب داده در جدول به کار برده میشود. دادههای انتخاب شده در جدول نتایج – با نام «مجموعه نتایج» (Result Set) – نمایش داده میشوند. دادههای خروجی در این جدول ذخیره میشوند.
در این مثال، فرض میکنیم که نام پایگاه داده My_Schema است.
۲. انتخاب چند ستون از جدول
این کوئری را میتوان یکی از پرکاربردترین کوئری های SQL به شمار آورد. در مثال پایین، دادههای ستون Student_ID را از جدول STUDENT فراخوانی کردهایم. عبارت پایین برای گزینش دادههای مورد نظر از جدول مشخصی در پایگاه داده استفاده میشود.
برای نمایش تمام ویژگیهای جدول مشخص شده باید از کوئری زیر استفاده کنیم.
۳. استخراج داده با رعایت محدودیتهای مشخص شده
با استفاده از کوئری زیر، تمام ویژگیهای مشخص شده را از جدول فراخوانی میکنیم. البته به شرطی که Employee ID =0000 باشد.
۴. استخراج داده های ذخیره شده با استفاده از دستور ORDER BY
این کوئری با توجه به ویژگی که توسط دستور ORDER BY در SQL مشخص شده است، نتایج را مرتب میکند. برای مثال، اگر آن ویژگی از نوع عدد صحیح باشد، ترتیب چیدن نتایج – به صورت صعودی یا نزولی – بر اساس مقدار دادههای موجود در آن ستون خواهد بود. به همین صورت اگر نوع دادههای قرار گرفته در ستون از نوع استرینگ در برنامه نویسی باشند، اینبار تمام ردیفها باید بر اساس حروف الفبا مرتب شوند. دستور ORDER BY برای مرتبسازی دادههای فراخوانی شده از جدول به کار برده میشود. همیشه باید دستور ORDER BY به عنوان آخرین دستور در کوئری نوشته شود.
ترتیب چیدن نتایج را میتوان به صورت دستی هم مشخص کرد. کد asc برای مرتبسازی صعودی و کد desc با هدف مرتبسازی نزولی نتایج استفاده میشوند.
چیدمان صعودی همیشه به عنوان گزینه پیشفرض دستور ORDER BY تنظیم شده است. به عبارت دیگر اگر کاربران از کدهای asc یا desc بعد از نام ستون استفاده نکنند، نتایج تولید شده به صورت خودکار در حالت صعودی مرتب خواهند شد.
۵. استخراج داده های مرتب شده با استفاده از دستور Group By
دستور Group By در SQL، تمام دادههای حاصل از اجرای کوئری را با توجه به ویژگی مشخص شده، دستهبندی میکند.
مثال اول دستور Group By
کوئری پایین ستونهای Name و Age را از جدول Patients انتخاب میکند. سپس با توجه به مقادیر ستون Age این دادهها را فیلتر میکند. با این کار فقط رکوردهایی باقی میمانند که مقدار Age در آنها بیش از 40 است. به طور خلاصه یعنی دادههای بیماران بالای ۴۰ سال را از جدول استخراج میکنیم. بعد از اینکه دادههای استخراج شده با توجه به مقادیر ستون Age دستهبندی شدند، در نهایت مجموعه نتایج را بر اساس حروف الفبای نام بیماران در ستون Name به شکل مرتب شده نمایش میدهیم.
قاعده کلی این است که دستور GROUP BY همیشه بعد از دستور Where در SQL و قبل از دستور ORDER BY در عبارت SELECT قرار بگیرد.
مثال دوم دستور Group By
در کوئری زیر، رکوردهایی را از جدول سفارشات «Orders» واکشی کردهایم که قیمتی کمتر از 70 واحد دارند. این کوئری، رکوردهای دارای قیمت یکسان را دستهبندی میکند. دادههای خروجی را بر اساس قیمت مرتبسازی کرده و در نهایت هم ستونی به نام COUNT(price) را به مجموعه داده خروجی اضافه میکند. این ستون نشان میدهد که چه تعداد رکورد با قیمت یکسان در پایگاه داده پیدا شدهاند.
توجه: همیشه باید از مجموعههای یکسانی از ستونها در دستورهای SELECT و GROUP BY استفاده کنید. در غیر این صورت با پیغام خطا روبهرو میشوید.
۶. جست وجو در داخل جدول های SQL با استفاده از وایلدکارتها
از کاراکترهای «وایلدکارت» (Wildcard) – مانند کاراکتر % - برای جستوجو به دنبال الگوهای خاص در مقادیری با نوع رشته استفاده میشود. در جدولهای بزرگی که از هزاران رکورد تشکیل شدهاند با کمک این کاراکترها بسیار راحتتر میتوان رشتههای خاص را پیدا کرد. فرض کنیم هدف، پیدا کردن مشتریانی است که نام آنها با «Herb» شروع میشود. برای مثال میتوان به نامهای «Herbert» و «Herbertson» اشاره کرد. با بهکارگیری نماد وایلدکارت % میتوان به چنین نتایجی را بدست آورد.
کوئری که در پایین نوشتهایم، در جدول مشتریان «Customer» جستوجو کرده و تمام ردیفهایی را که ابتدای نام مشتری در ستون «Customer_name» با عبارت «Herb» شروع شده پیدا میکند.
۷. استخراج اطلاعات از بین محدودهای از دادهها
فرض کنیم که امروز چهارشنبه است. در محل کار، متوجه شدهایم منشی جدید شرکت – که وظیفه وارد کردن اطلاعات را دارد – تمام دادههای مربوط به روزهای دوشنبه و سهشنبه را به صورت اشتباه به سیستم وارد کرده است. اکنون باید به این منشی کارآموز روش پیدا کردن دادههای اشتباه و روش اصلاح اشتباهات انجام شده را آموزش بدهیم. برای انجام این کار یکی از بهترین روشها استفاده از دستور Between در SQL است. با این دستور میتوان تمام دادههای وارد شده بین روزهای دوشنبه و سهشنبه را در جدول پیدا کرد.
۸. پیدا کردن اشتراکات بین دو جدول مجزا
هدف اصلی استفاده از پایگاههای داده رابطهای، پیدا کردن رکوردهای مطابق با هم در جداول مختلف است. برای رسیدن به این هدف، دستور JOIN در SQL به کاربران این پایگاه داده کمک میکند. استفاده از این دستور فرایند حل کردن چنین مسائلی را سادهتر کرده است. در کوئری زیر، فهرستی از رکوردهای مشترک بین جدولهای مشتریها «Customers» و سفارشات «Orders» را از پایگاه داده پیدا کرده و به بیرون برمیگردانیم.
در کوئری بالا، باید به نکتهای درباره استفاده از دستور INNER JOIN در SQL اشاره کنیم. این دستور برای استخراج ردیفها از جدول Customers به کار برده شده است. اما با این شرط که شماره ID مربوط به آن مشتری به یکی از ردیفهای موجود در جدول Orders هم اشاره کند. پس فقط ردیفهایی برگشت داده میشود که شماره ID آنها در هر دو جدول مشترک باشد. انواع مختلفی از دستور JOIN وجود دارد. برای مثال میتوان به «FULL» و «SELF» و «LEFT» اشاره کرد. در ادامه مطلب به بررسی کوئری های SQL پیشرفتهتری نیز پرداختهایم.
۹. ترکیب دو دستور SELECT مختلف با استفاده از دستور UNION
با استفاده از کلمه کلیدی UNION در SQL میتوانیم مجموعه نتایج بدست آمده از کوئری های SQL مختلف را با همدیگر ترکیب کنیم. فرض کنیم که باید با فهرست آخرین سفارشات مشتریها، جدول جدیدی ایجاد کنیم. برای انجام این کار، لازم است که ستونهای Customer_name و phone را از جدولهای Orders و Customers با هم ترکیب کنیم. با وجود این دادههای ترکیب شده میتوانیم به الگوی خرید مشتریها پی پرده و حتی در آینده پیشنهادات جدیدی به مشتریهای دیگر ارائه کنیم. کوئری زیر روش سادهای برای اجرای این دستور است.
کلمه کلیدی UNION به ترکیب کردن دستورهای JOIN و سایر معیارها کمک میکند. با استفاده از این ترکیبات میتوان جدولهای جدید و بسیار قدرتمندی ایجاد کرد.
۱۰. تخصیص نام مستعار به برچسبهای ستونها
از تخصیص نام مستعار به ستونها، برای افزایش خوانایی ستونها در مجموعه نتایج نمایش داده شده استفاده میکنند. بههرحال، استفاده از نامهای کوتاه شده برای ستونها – بخصوص نامهای اختصاری – بعضی وقتها میتواند وضوح مطلب را کاهش دهد. بخصوص وقتی که به صورت روزانه از پایگاه داده استفاده میکنیم. برای مثال، در جدول مربوط به سفارشات «Orders» ستون مربوط به کالاها شامل توضیحی از محصولات خریداری شده است. نامگذاری این ستون به چیز مشخصتری مانند «Product_Description» باعث شفافتر شدن دادهها در مجموعه نتایج فراخوانی شده میشود.
در کوئری زیر، روش تخصیص نامهای مستعار و موقتی به ستونها را نمایش دادهایم.
چگونه با کمک فرادرس SQL Server یاد بگیریم؟
SQL Server یکی از قابل اطمینانترین و مقیاسپذیرترین نرمفزارهای مدیریت پایگاه داده است. این نرمافزار به توسعهدهندگان در امر ساخت، نگهداری و مدیریت بانکهای اطلاعاتی کمک میکند. SQL Server توسط شرکت مایکروسافت توسعه داده شده است. برای یادگرفتن روش استفاده از SQL Server روشهای مختلفی وجود دارد. اما یکی از بهترین روشهای آموزش کار با این پایگاه داده تماشای فیلمهای آموزشی مربوط به آن در فرادرس است. این دورهها به شکلی طراحی و تولید شدهاند که تمام مراحل SQL Server را از سطوح مبتدی تا پیشرفته آموزش بدهند.
وبسایت فرادرس، یکی از بهترین منابع تولید محتوی آموزشی است. فیلمهای بسیار مناسب و متنوعی برای آموزش پایگاه داده SQL Server در فرادرس تولید شدهاند. یعنی اینکه برای هر کس با توجه به سطح علمی آن فرد گزینه مناسبی پیدا میشود. به طور کل میتوان به کیفیت بالای مطالب مورد تدریس و فیلمهای تهیه شده، هزینه مقرونبهصرفه و امکان بازبینی چندین باره آموزشها به عنوان مزایای فیلمهای آموزشی اشاره کرد. در پایین چند مورد از این فیلمهای آموزشی را فهرست کردهایم. با کلیک بر روی تصویر بالا به صفحه اصلی این مجموعه آموزشی هدایت شده و از فیلمهای بیشتر دیدن کنید.
کوئری های تجمعی و خلاصه سازی
در این بخش از مطلب، ۶ مورد از مهمترین کوئریهای SQL را درباره دستورهای تجمعی و خلاصهسازی ردیفها معرفی کرده و مثالهای مربوط به آنها را نمایش دادهایم.
۱۱. کار بر روی داده ها با استفاده از دستور COUNT
این کوئری از طریق شماردن ID-های مشتریان، تعداد کل مشتریها را حساب کرده و اعلام میکند. علاوه بر آن، با توجه به کشور «Country» مربوط به هر مشتری، نتایج بدست آمده را دستهبندی هم میکند. وقتی که از دستور COUNT در SQL همراه با دستور DISTINCT در SQL استفاده میکنیم، در قسمتی از کوئری هم برای بخشبندی دادهها میتوانیم دستورات مناسب را بنویسیم. این عبارت بخشی از عبارتهای تحلیلی در SQL است. اما عبارتهایی مانند دستورات مرتبسازی و «دستورات مربوط به پنجرهبندی» (Windowing Clause) در این بخش جای نمیگیرند.
سینتکس مربوط به نوشتن این دستور به شکل زیر است.
کوئری مورد استفاده برای شمارش مشتریها بر اساس کشور آنها را در پایین نوشتهایم.
۱۲. کار بر روی دادهها با استفاده از دستور SUM
ستونها را میتوان به عنوان آرگومان به دستور SUM ارسال کرد. وظیفه این دستور آن است که مقدار کل دادههای موجود در ستون دریافت شده را محاسبه کند. دستور SUM یکی از دستورات تجمعی است. این دستور برای محاسبه مجموع تمام مقادیر مجزا به کار میرود. البته میتواند مجموع مقادیر تکراری را نیز محاسبه کند.
۱۳. کار بر روی دادهها با استفاده از دستور AVG
کاربرد دستور AVG بسیار ساده است. وظیفه اصلی این دستور، محاسبه مقدار میانگین دادههای موجود در ستون مشخص شده است. این تابع هم یکی از توابع تجمعی در SQL است. تابع AVG() مقدار میانگین مقادیر «غیرتهی» (Non-NULL) در ستون را محاسبه میکند. تمام مقادیر «NULL» توسط این تابع نادیده گرفته میشوند.
۱۴. کار بر روی دادهها با استفاده از دستور MIN
استفاده از عبارت OVER به صورت خالی، باعث میشود که تابع MIN به تابع تحلیلی تبدیل شود. در واقع کوئری نوشته شده با این شرایط از نوع کوئریهای تحلیلی است. در این حالت، کل مجموعه نتایج به عنوان مجموعه واحدی در نظر گرفته میشود.
برای مثال با کمک این تابع میتوانیم حداقل حقوق دریافتی کارمندان را بدون تغییر دادن سایر اطلاعات آنها بدست بیاوریم. در کوئری زیر، روش استفاده از تابع MIN را در عبارت SELECT نمایش دادهایم.
بعد از اجرای کوئری بالا بر روی جدول فرضی، خروجی مانند زیر، تولید شده و به کاربر نمایش داده میشود.
ENO EMPNAME DTNO SALARY MIN_RESULT ---------- ---------- ---------- ---------- --------------- 7782 CLARK 10 2450 1300 7839 KING 10 5000 1300 7934 MILLER 10 1300 1300 7566 JONES 20 2975 800 7902 FORD 20 3000 800 7876 ADAMS 20 1100 800 7369 SMITH 20 800 800 7788 SCOTT 20 3000 800 7521 WARD 30 1250 950 7844 TURNER 30 1500 950 7499 ALLEN 30 1600 950 7900 JAMES 30 950 950 7698 BLAKE 30 2850 950 7654 MARTIN 30 1250 950
۱۵. کار بر روی دادهها با استفاده از دستور MAX
استفاده از عبارت OVER به صورت خالی، باعث میشود که تابع MAX به تابع تحلیلی تبدیل شود. در واقعی کوئری نوشته شده با این شرایط از نوع کوئریهای تحلیلی است. در این حالت، کل مجموعه نتایج به عنوان موجودیت واحدی در نظر گرفته میشود.
برای مثال با کمک این تابع بیشینه حقوق دریافتی کارمندان را بدون تغییر دادن سایر اطلاعات آنها بدست میآوریم. در کوئری زیر، روش استفاده از تابع MAX را در عبارت SELECT نمایش دادهایم.
بعد از اجرای کوئری بالا بر روی جدول فرضی، خروجی مانند کادر زیر، تولید شده و به کاربر نمایش داده میشود.
ENO EMPNAME DTNO SALARY MAX_RESULT ---------- ---------- ---------- ---------- ---------- 7369 SMITH 20 800 3000 7499 ALLEN 30 1600 3000 7521 WARD 30 1250 3000 7566 JONES 20 2975 3000 7654 MARTIN 30 1250 3000 7698 BLAKE 30 2850 3000 7782 CLARK 10 2450 3000 7788 SCOTT 20 3000 3000 7839 KING 10 5000 3000 7844 TURNER 30 1500 3000 7876 ADAMS 20 1100 3000 7900 JAMES 30 950 3000 7902 FORD 20 3000 3000 7934 MILLER 10 1300 3000
۱۶. کار بر روی دادهها با استفاده از دستور HAVING
مشکل اینجاست که دستور «WHERE» در SQL نمیتواند بر روی توابع تجمعی عملیات انجام دهد. برای حل کردن این مشکل از دستور HAVING در SQL استفاده میکنیم. برای مثال، کوئری زیر، فهرست مشتریها را بر اساس ناحیه استخراج میکند. ناحیههای معتبر از نظر این کوئری، مناطقی هستند که حداقل یک مشتری در آنها سکونت داشته باشد.
کوئری های SQL برای استفاده در View ها
در این بخش از مطلب، ۵ نوع کوئری مختلف را درباره استفاده از View در SQL معرفی کرده و مثالهای مربوط به آنها را نمایش دادهایم.
۱۷. کوئری SQL برای فهرست کردن تمام View ها
با استفاده از کوئری زیر میتوانیم تمام «View»-های موجود در اسکیما یا شِمای پایگاه داده را بدست آورد.
۱۸. کوئری SQL برای ساخت View
VIEW به جدول سفارشی گفته میشود که بر اثر اجرای کوئریها ایجاد شده است. View-ها مانند تمام جدولهای دیگر شامل ستون و ردیف هستند.
استفاده از VIEW در کوئری روش بسیار خوبی است. زیرا بعدا به سادگی میتوانیم نتایج بدست آمده را فراخوانی کنیم. بدون اینکه مجبور باشیم با هدف بدست آوردن مجموعه نتایج یکسان، هربار محاسبات تکراری را اجرا کنیم.
۱۹. کوئری SQL برای فراخوانی View
در کوئری زیر، میبینیم که سینتکس استاندارد برای انتخاب کردن ویژگیهای جدول را میتوان بر روی VIEW نیز اعمال کرد.
عبارت Failing_Students که در کوئری بالا استفاده شده نام VIEW است که در مثال قبل ایجاد کردهایم. در این بخش، هم میتوانیم نام جدول قرار بدهیم و هم نام VIEW.
۲۰. کوئری SQL برای برای به روزرسانی View
کوئری پایین برای بهروزرساندن VIEW با نام Product List نوشته شده است. اما اگر این VIEW از قبل وجود نداشته باشد، با همین شکل که در کوئری تعریف شده ایجاد خواهد شد. به VIEW-ها جدول مجازی هم گفته میشود. به عبارت دیگر، VIEW نسخه کپی شدهای از جدولها است. دادههای VIEW توسط کوئری ذخیره شده تولید میشوند.
VIEW کپی معتبری از دادههای جدول یا مجموعهای از جدولهای دیگر است. VIEW-ها دادههای خود را از جدولهای موجود میگیرند. به این جدولها جدول پایه گفته میشود. جدولهای پایه، جدولهای واقعی هستند. تمام عملیاتی که بر روی VIEW اتفاق میافتند، بر روی جدول مرتبط با آن هم اثر میگذارند. کاربران میتوانند از VIEW-ها دقیقا مانند جدولهای پایه استفاده کنند. بنابراین انواع دستورهای «DDL» و «DML» را میتوان بر روی VIEW-ها اعمال کرد. برای مثال میتوان VIEW-ها را بهروزرسانی کرد. به آنها داده اضافه کرد و حتی از آنها داده حذف کرد. تمام دستورات update و insert و delete در View-ها قابل اجرا هستند.
۲۱. کوئری SQL برای حذف View با دستور DROP
کوئری پایین وظیفه حذف کردن VIEW با نام V1 را دارد. نکته مهم درباره این دستور آن است که در صورت وجود VIEW-های وابسته به V1 دیگر امکان استفاده از دستور DROP VIEW را نداریم. یعنی فقط VIEW-هایی را میتوانیم حذف کنیم که هیچ VIEW دیگری به آن وابسته نباشد.
کلیدها و محدودیت ها
در این بخش از مطلب، ۴ مورد از مهمترین کوئری های SQL را درباره کلیدها و محدودیتها معرفی کرده و مثالهای مربوط به آنها را نمایش دادهایم.
۲۲. نمایش جدول های تعریف شده توسط کاربر
جدولهای تعریف شده توسط کاربر، اطلاعات خاصی را به شکل جدولی نمایش میدهند. از این جدولها میتوان به عنوان داده ورودی برای رویهها یا توابع تعریف شده توسط کاربر هم استفاده کرد. از آنجا که استفاده از این جدولها فایدههای زیادی دارد، بهتر است که با بهکارگیری کوئری زیر آنها را مدیریت کنیم. «جدولهای – تعریف شده توسط – کاربر» (User Tables) توصیفی هستند از جدولهای رابطهای متعلق به کاربر فعلی.
۲۳. کوئری برای نمایش کلیدهای اصلی
کلیدهای اصلی منحصربهفرد هستند. این کلیدها تمام ردیفهای درون جدول را مشخص میکنند.
«کلید اصلی» (Primary Key) دو قاعده NOT NULL و «محدودیت یکتا بودن» (Unique Constraint) را در کنار هم و در یک تعریف، ترکیب میکند. این مسئله به معنای آن است که هیچ دو ردیف مجزایی نمیتوانند کلید اصلی مشترک داشته باشند. همچنین مقدار کلید اصلی در هیچ ردیفی از جدول نمیتواند تهی یا NULL شود. کلید اصلی مسئول برقراری و مدیریت همه رابطههای بین جدولهای مختلف است.
کوئری SQL پایین، تمام فیلدهای کلید اصلی را در جدول، فهرست میکند.
۲۴. کوئری برای نمایش کلیدهای یکتا
«کلید منحصربهفرد» (Unique Key) یا یکتا تضمین میکند که تمام مقادیر قرار گرفته در ستون مشخصی به صورت یکتا و غیرتکراری باشند. با استفاده از این کلیدها تمام ردیفهای درون جدول غیرتکراری میشوند. هر جدولی میتواند چندین کلید یکتای مختلف داشته باشد. ستونهای کلید یکتا فقط میتوانند شامل یک مقدار NULL شوند. حتی وجود NULL تکراری هم پذیرفته شده نیست.
۲۵. کوئری برای نمایش کلیدهای خارجی
«کلیدهای خارجی» (Foreign Key) با هدف متصل کردن جدولها به یکدیگر به کار برده میشوند. کلیدهای خارجی به ویژگیهایی از جدول گفته میشود که با کلیدهای اصلی جدول دیگری یکسان باشند.
اصلی بودن، یکتا بودن و خارجی بودن، بخش از محدودیتهای SQL هستند. محدودیتها قوانینی هستند که بر روی ستونهای پایگاه داده اعمال میشوند. وجود محدودیتها باعث میشود که دقت، خوانایی و ثبات دادهها تضمین شود. محدودیتها شرایط خاصی را مشخص کرده و دادهها باید از آنها پیروی کنند. برای مثال، با کمک محدودیتها میتوانیم نوع دادههای وارد شده به جدول را کنترل کنیم. این مسئله باعث میشود که عملکرد پایگاه داده به صورت معتبر و کارآمد باقی بماند.
کوئری های SQL برای مدیریت پایگاه داده
یکی از بهترین روشها برای تمرین نوشتن کوئری های SQL حرفهای، دیدن دورههای آموزشی پروژه محور است. از آنجا که این دورهها پیادهسازی پروژههای نزدیک به دنیای واقعی را نمایش میدهند، مشاهده آنها تجربه بسیار خوبی برای دانشجویان و افراد علاقهمند به این رشته است. به این منظور میتوانید فیلم آموزش پروژه محور اس کیو ال سرور درباره ساخت دیکشنری برای دیتابیس را از فرادرس تماشا کنید. لینک مربوط به این فیلم را در پایین نیز قرار دادهایم.
در این بخش از مطلب، ۷ مورد از پرکاربردترین کوئریهای SQL را درباره مدیریت پایگاه داده معرفی کرده و مثالهای مربوط به آنها را نمایش دادهایم.
۲۶. نمایش تریگرها
Trigger در SQL نوعی «شنونده رویداد» (Event Listener) است. یعنی اینکه تریگر مجموعهای از دستورالعملهای از پیش تعریف شده است که در زمان رویدادن اتفاقات مشخصی به صورت خودکار اجرا میشوند. با استفاده از کوئری زیر میتوانیم لیستی از تریگرهای تعریف شده را مشاهده کنیم.
۲۷. نمایش جدولهای داخلی
«جدولهای داخلی» (Internal Tables) به عنوان نتیجه فعالیتهای کاربران و به صورت خودکار ایجاد میشوند. معمولا نمیتوان به این جدولها به صورت مستقیم دسترسی داشت.
دادههای درون جدولهای داخلی را نمیتوان دستکاری کرد. هر چند با استفاده از کوئریهای مشخصی میتوان «فرادادههای» (Metadata) این جدولها را مشاهده کرد.
۲۸. نمایش فهرستی از رویهها
«رویههای ذخیره شده» (Stored Procedure) مجموعهای از کوئریهای پیشرفته SQL هستند. این مجموعه کوئریها از جهت منطقی، موجودیت یکسانی را تشکیل میدهند و وظیفه مشخصی را اجرا میکنند. بنابراین با استفاده از کوئری زیر میتوانیم رویههای ذخیره شده را مشاهده کنیم.
۲۹. اضافه کردن جدول به پایگاه داده جدید
اکنون فرض کنیم که پایگاه داده جدیدی را ایجاد کردهایم. میخواهیم برای نگهداری اطلاعات مشتریها جدولی را به نام Customers به این پایگاه داده اضافه کنیم. به این جدول چند مورد از بر چسبهای ستونها را نیز اضافه میکنیم. معمولا در بیشتر جدولهای نگهداری مشخصات انسانها چنین برچسبهایی به کار برده میشوند. در کادر پایین مثالی از کوئریهای مورد استفاده برای ساخت جدول در SQL را نمایش دادهایم.
البته بیشتر جدولهای پایگاههای داده با استفاده از رابطهای کاربری مانند «Access» یا «OpenOffice» ایجاد میشوند. اما لازم است که روش حذف و اضافه جدولها و پایگاههای داده را با دستورهای کدنویسی نیز بلد باشیم. به این منظور باید با عبارتهای SQL مربوط به این عملیات آشنا شویم. به طور خاص در زمان راهاندازی وباپلکیشنهای جدید، داشتن این مهارت ارزش خود را نشان میدهد. معمولا در طی این فرایندها رابطهای کاربری از کابران میخواهند که با هدف راهاندازی پایگاه داده، نامهای متنوعی را به جدولها و پایگاه داده اختصاص دهند.
۳۰. اعمال تغییرات و حذف جدولها
عبارت ALTER به منظور تغییر دادن یا بهروزرسانی ساختار جدولها به کار برده میشود. عبارت ALTER در SQL جدولهای رابطهای را با استفاده از قوانین جدید یا بهروزرسانی شده تغییر میدهد. ALTER بخشی از دستورات «زبان تعریف داده» (Data Definition Language | DDL) است. دستورات DDL مشخص میکنند که ساختار دادهها چگونه نمایش داده شده یا سازماندهی شوند.
اعمال تغییرات در جدول
فرض کنیم که به منظور قدردانی از خرید خوب مشتریان میخواهیم که کارت تبریک تولدی برای آنها ارسال کنیم. بنابراین لازم است که ستونی برای ذخیره تاریخ تولد با نام Birthday به جدول مشتریها «Customers» اضافه شود. در مثالهای پایین روش بسیار ساده اعمال تغییرات در جدولهای موجود را نشان دادهایم. برای انجام این کار از عبارت ALTER استفاده کردیم.
حذف جدول
اگر جدولی به دلیل وجود دادههای نامناسب خراب شد، میتوانیم بلافاصله با کمک کوئری زیر آن را حذف کنیم.
۳۱. جابه جا کردن مقدارهای دو ستون در یک جدول
در این مثال و چند مثال دیگر از مطلب، از پایگاههای داده رایج در شرکتها استفاده میکنیم. این پایگاههای داده معمولا چندین جدول مختلف دارند که به سادگی هم قابل درک هستند. پایگاه داده مورد استفاده در این مثالها شامل جدولی برای نگهداری اطلاعات مشتریان به نام Customer و جدولی برای نگهداری سفارشات مشتریها به نام Order است. جدول مشتریها شامل ستونهایی مانند ID و Name و Address و Zip و Email است. در این مسئله فرض میکنیم که فیلد Customer_ID کلید اصلی است. ستون کلید اصلی برای اندیسگذاری استفاده میشود.
با توجه به جدول Customer میتوان در نظر گرفت که جدول Order باید شامل ستونی به نام Customer_ID باشد. با استفاده از این ستون به تمام جزئیات مربوط به ارتباط بین سفارشات و مشتریها دسترسی داریم. این جدول هم شامل ستونهایی مانند Number و Quantity و Date و Item و Price است. حالا فرض کنیم که تمام شماره تلفنهای مشتریها با کدهای Zip مربوط به آنها جابهجا شدهاند. یعنی اینکه به صورت اشتباهی تمام شمارههای تلفن در ستون Zip نوشته شدهاند.
برای حل این مشکل فقط کافیست که از عبارت SQL زیر استفاده کنیم.
۳۲. مدیریت پایگاه داده
تا به اینجای کار، کوئریهای مختلف SQL را همراه با مثالهایی درباره گرفتن داده از جدولها و ترکیب ردیفها با استفاده از کوئریهای مختلف بررسی کردیم. اکنون زمان حرکت به مرحله بعد و نگاه به ساختار پایگاه داده است. این بخش را همراه با سادهترین عبارت SQL برای ساخت پایگاه داده جدید، شروع میکنیم.
در کوئری زیر، میخواهیم پایگاه داده جدیدی ایجاد کنیم که قرار است شامل جدولهای Customers و Orders باشد. در بخشهای قبلی مثالهای زیادی را با کمک این جدولها نمایش دادهایم.
اندیس گذاری و بهینه سازی عملکرد
در این بخش از مطلب، ۲ مورد از مهمترین کوئری های SQL را درباره اندیسگذاری و بهینهسازی عملکرد معرفی کرده و مثالهای مربوط به آنها را نمایش دادهایم.
۳۳. روش اندیسگذاری موفق
اندیسها بخشی از ساختار پایگاه داده هستند. این ساختار به ازای هر عنصر در جدول مقداری را نگهداری میکند. برای نمایش این ساختار از ستون اندیسگذاری شده در جدول یا خوشهها استفاده میشود. با کمک اندیسها میتوان به سرعت ردیف مورد نظر را پیدا کرد. اندیسهای متنوعی در SQL وجود دارند. برای مثال میتوان به اندیسهای «Bitmap» و «اندیسهای بخشبندی شده» (Partitioned Indexes)، اندیسهای «Function-Based» و «اندیسهای دامنه» (Domain Indexes) اشاره کرد.
برای اندیسگذاری دقیق لازم است که ستون مربوط به کلید اصلی فقط شامل مقادیر یکتا باشد. این مسئله تضمین میکند که عبارتهای JOIN از یکپارچگی پایگاه داده محافظت کرده و بعد از اجرا نتایج معتبری تولید کنند. در کوئری زیر، جدول مربوط به مشتریان Customers را ایجاد کردهایم. در این جدول ستون مربوط به ID به عنوان کلید اصلی ثبت شده است.
حتی میتوان عملکرد کلید اصلی را گسترش هم داد. به شکلی که مقدار موجود در ستون کلید اصلی به صورت خودکار از مقدار مشخص شده به عنوان پایه، شروع به افزایش کند. برای این کار باید خط مربوط به تعریف ستون ID را به شکل زیر تغییر دهیم. در واقع فقط کلمه کلیدی AUTO_INCREMENT را به انتهای آن خط اضافه کردهایم.
۳۴. مطالب پیشرفته برای ارتقای عملکرد
در کوئری های SQL بهجای استفاده از وایلدکارت * برای انتخاب تمام ستونها، بهتر است که تا حد ممکن از نام ستون به شکل صریح استفاده کنیم. بخصوص در عبارت SELECT توصیه شده که تا جای ممکن این قاعده را رعایت کنیم. در غیر این صورت با هربار اجرای کوئریها، SQL Server مجبور است که کاراکتر * را با تمام ستونهای ممکن در جدول جایگذاری کرده و جستوجو کند.
برای مثال، کوئری پایین با سرعت بسیار بیشتری نسبت به کوئری بالا در پایگاه داده اجرا میشود.
با کمک چند روش مختلف میتوان از بروز مشکل در کیفیت اجرای کوئریها جلوگیری کرد. برای مثال به چند مورد از این راهکارها در فهرست پایین اشاره کردهایم.
- از SP_ به عنوان پیشوند نام رویههای ذخیره شده استفاده نکنید. با این کار مانع از آن میشوید که پایگاه داده «Master» هربار توسط SQL Server بررسی شود.
- هربار که دستوراتی مانند INSERT و DELETE و غیره اجرا میشوند، SQL Server یکبار ردیفها را میشمارد. با تنظیم کردن NOCOUNT ON میتوانید زمان مورد نیاز برای شمارش ردیفها را کاهش دهید.
- اجرای دستور INNER JOIN همراه با شرط، نسبت به اجرای دستور WHERE همراه با شروط مختلف، سرعت بسیار بیشتری دارد.
توسعهدهندگان به منظور رسیدن به بهرهوری بیشتر باید کوئریهای پیشرفته SQL را بیاموزند. رعایت این نکات در پیادهسازی پروژههای مربوط به دنیای واقعی ضروری است. در این مطلب هم بیشتر تلاش کردهایم تا از INNER JOIN استفاده کنیم.
کوئری های تحلیلی
در این بخش از مطلب، ۸ مورد از مهمترین دستورها را درباره کوئریهای تحلیلی معرفی کرده و مثالهای مربوط به آنها را هم نمایش دادهایم.
۳۵. تابع تحلیلی DENSE_RANK
تابع DENSE_RANK() کوئری تحلیلی است که رتبه هر ردیف را در مجموعهای از ردیفهای مرتب شده مشخص میکند. رتبه خروجی عدد صحیحی است که از ۱ شروع میشود. DENSE_RANK() یکی از مهمترین کوئری های SQL است. این تابع مقادیر مربوط به رتبهبندی را مانند اعداد پشت سر هم تولید میکند. در بین این اعداد هیچ فضای خالی وجود ندارد. حتی با وجود درگیر بودن ردیفها در روابط خارجی باز هم رتبهبندی به شکل صحیح انجام میشود.
برای مثال، با استفاده از کوئری زیر، کارمندان را به شکل منظم رتبهبندی کردیم.
بعد از اجرای کوئری بالا، مجموعه نتایج خروجی به شکل زیر تولید شده و نمایش داده میشوند.
ENO DNO SALARY RANKING ---------- ---------- ---------- ---------- 7933 10 1500 1 7788 10 2650 2 7831 10 6000 3 7362 20 900 1 7870 20 1200 2 7564 20 2575 3 7784 20 4000 4 7903 20 4000 4 7901 30 550 1 7655 30 1450 2 7522 30 1450 2 7844 30 1700 3 7493 30 1500 4 7698 30 2850 5
۳۶. دستورات مخصوص بخشبندی دادهها
با کمک دستورهای مخصوص «بخشبندی دادهها» مجموعه نتایج خروجی به دستهها یا مجموعههای کوچکتری از داده تقسیم میشوند. کوئریهای تحلیلی فقط درون این بخشها کار میکنند. این رفتار، شبیه به رفتار دستور GROUP BY در SQL در مقابل توابع تجمعی است. اگر از دستورهای مخصوص «بخشبندی دادهها» استفاده نکنیم، کل مجموعه نتایج نهایی به عنوان یک بخش مجزا و مستقل در نظر گرفته میشود.
کوئری پایین، دستور OVER را به کار برده است. بنابراین مقدار میانگین بر اساس تمام رکوردهای موجود در مجموعه نتایج نهایی محاسبه شده است.
بعد از اجرای کوئری بالا، مجموعه نتایج خروجی به شکل زیر تولید شده و نمایش داده میشوند.
EO DNO SALARY AVG_SAL ---------- ---------- ---------- ---------- 7364 20 900 2173.21428 7494 30 1700 2173.21428 7522 30 1350 2173.21428 7567 20 3075 2173.21428 7652 30 1350 2173.21428 7699 30 2950 2173.21428 7783 10 2550 2173.21428 7789 20 3100 2173.21428 7838 10 5100 2173.21428 7845 30 1600 2173.21428 7877 20 1200 2173.21428 7901 30 1050 2173.21428 7903 20 3100 2173.21428 7935 10 1400 2173.21428
۳۷. تابع FIRST_VALUE
سادهترین روش برای اجرای عملیات تحلیلی این است که کار خود را با اجرای توابع تجمعی شروع کنیم. توابع تجمعی، دادهها را از روی تعداد بسیار زیادی ردیف مختلف جمعآوری کرده و در یک ردیف به صورت مجزا از دیگران نمایش میدهد. برای نمونه شاید کاربران با استفاده از تابع AVG بخواهند که مقدار میانگین حقوق کارمندان را محاسبه کنند. فرض کنیم این تابع بر روی جدول EMPLOYEE اعمال شده است.
اکنون میخواهیم روش کار تابع FIRST_VALUE را بررسی کنیم. ابتدا باید سینتکس مورد استفاده برای بهکارگیری این تابع را نمایش دهیم.
کدی که در بالا مشاهده میشود، سینتکس خالی استفاده از تابع FIRST_VALUE است. در کادر پایین مثال سادهای را پیادهسازی کردهایم.
کوئری نوشته شده در بالا، مقادیر NULL را نادیده میگیرد.
۳۸. تابع LAST_VALUE
در کادر زیر، سینتکس کامل استفاده از تابع تحلیلی LAST_VALUE را نمایش دادهایم. این نوع از توابع در دسته توابع تحلیلی قرار میگیرند. توابع تحلیلی جزو توابع SQL مهم و کاربردی هستند که هر توسعهدهنده پایگاه دادهای باید با آنها به طور کامل آشنا شود. به این منظور مثالهای بیشتری هم در مجله فرادرس توضیح داده شدهاند. برای آشنا شدن با آنها میتوانید مطلب مربوطه در مجله را مطالعه کنید.
کوئری تحلیلی LAST_VALUE با تابع تحلیلی LAST ارتباط دارد. این تابع به کاربران کمک میکند تا آخرین خروجی را از میان دادههای ستون مرتبسازی شده پیدا کنند.
۳۹. تابع PERCENT_RANK
PERCENT_RANK هم یکی دیگر از توابع SQL است که برای استفادههای تحلیلی به کار برده میشود. برای استفاده از این تابع لازم است که دستور ORDER BY را هم به کار ببریم. در عبارت OVER هیچ بخشی برای دستهبندی دادههای خروجی وجود ندارد. بنابراین، کل مجموعه نتایج خروجی به عنوان یک دسته در نظر گرفته میشوند. به اولین ردیف رتبه ۰ اختصاص داده میشود و به آخرین ردیف هم رتبه ۱.
برای مثال، کوئری نوشته شده در پایین، خروجی را به شکل گفته شده دستهبندی کرده است.
بعد از اجرای کوئری بالا، مجموعه نتایج خروجی به شکل زیر تولید شده و نمایش داده میشوند.
PRDID SUM(AMOUNT) PERCENT_RANK ----------- ----------- ------------ 1 22623.5 0 2 223927.08 1
۴۰. کوئری تحلیلی NTILE
تابع NTILE به کاربران برای تقسیم کردن مجموعهای از ردیفها به تعداد گروههای مشخص شده یا «ظرفها» (Containers) کمک میکند. اگر تعداد ردیفها از تعداد ظرف کمتر باشد، تعداد ظرف به اندازه ردیفها کاهش داده میشود. یعنی اینکه در بیشترین حالت، به ازای هر ردیف یک ظرف میتواند وجود داشته باشد.
سینتکس پایه برای استفاده از این تابع به صورت زیر است.
در کادر زیر مثال دیگری از اجرای این تابع را در کوئری نمایش دادهایم.
۴۱. توابع تحلیلی VARIANCE و VAR_POP و VAR_SAMP
توابع تحلیلی VARIANCE و VAR_POP و VAR_SAMP از نوع توابع تجمعی هستند. این توابع برای محاسبه انواع پراکندگی یا واریانس در دادهها به کار برده میشوند.
- تابع VARIANCE مقدار پراکندگی را محاسبه میکند.
- تابع VAR_POP مقدار «پراکندگی جمعیتی» (Population Variance) را محاسبه میکند.
- تابع VAR_SAMP هم مقدار «پراکندگی نمونهها» (Sample Variance) را محاسبه میکند.
تجمعی بودن در این توابع به معنای آن است که تعداد ردیفها را از طریق خلاصه کردن دادهها در یک مقدار – به عنوان نتیجه نهایی – کاهش میدهند. یعنی اینکه اگر دادهها از قبل مرتبسازی نشدهاند، میتوانیم تمام ردیفهای مربوط به جدولی مانند کارمندان employee را در ردیف مجزایی با همدیگر ترکیب کنیم.
برای مثال در کوئری زیر، روش استفاده از این توابع را نمایش دادهایم.
بعد از اجرای کوئری بالا، مجموعه نتایج خروجی به شکل زیر تولید شده و نمایش داده میشوند.
VAR_SALARY POP_SALARY SAMP_SALARY ------------ ----------- ------------ 1479414.97 1588574.81 1388717.27
۴۲. توابع تحلیلی STDDEV و STDDEV_POP و STDDEV_SAMP
توابع تحلیلی STDDEV و STDDEV_POP و STDDEV_SAMP برای محاسبه انواع مختلف «انحراف معیار» (Standard Deviation) در گروهی از دادهها به کار برده میشوند.
- تابع STDDEV میزان انحراف معیار را محاسبه میکند.
- تابع STDDEV_POP مقدار انحراف معیار جامعه را محاسبه میکند.
- تابع STDDEV_SAMP مقدار انحراف معیار نمونه تراکمی را محاسبه میکند.
این توابع هم از نوع توابع تجمعی هستند. به این معنا که میتوانند انبوه دادهها را با کمک کم کردن تعداد ردیفها در یک مقدار به عنوان نتیجه، خلاصه کنند. اگر دادهها از قبل مرتبسازی نشده باشند، تمام ردیفهای مربوط به جدولی مانند کارمندان employee - بعد از انجام محاسبات مورد نظر – باید به ردیف مجزایی تبدیل شوند.
برای مثال در کوئری زیر، روش استفاده از این توابع را نمایش دادهایم.
بعد از اجرای کوئری بالا، مجموعه نتایج خروجی به شکل زیر تولید شده و نمایش داده میشوند.
STDDEV_SALARY POP_SALARY SAMP_SALARY ---------- -------------- --------------- 1193.50 1159.588 1193.603
اگر بعد از حذف کردن مقادیر NULL ، بیش از یک اکانت باقی مانده بود. نتیجه تولید شده توسط تابع STDDEV شبیه به نتیجه تابع STDDEV_SAMP میشد. اگر عبارت OVER در کوئری STDDEV وجود نداشت، کوئری به کوئری تحلیلی تبدیل میشد. بدون بخشبندی، کل مجموعه نتایج خروجی به عنوان یک گروه واحد در نظر گرفته میشود. برای مثال، با استفاده از تمام دادهها میتوانیم انحراف معیار همه حقوقهای پرداخته شده به کارمندان را محاسبه کنیم.
کوئری های SQL برای تطبیق رشته و الگو
در این بخش از مطلب، ۴ مورد از مهمترین کوئری های SQL را برای تطبیق رشته و الگو معرفی کرده و مثالهای مربوط به آنها را نمایش دادهایم.
۴۳. کار بر روی دادههایی با نوع رشته
در این قسمت، نگاهی داریم به استفاده از توابع برای پردازش محتوای موجود در ستونها. SUBSTRING احتمالا با ارزشترین تابع برای کار با رشتهها در میان تمام توابع درونی SQL است. این تابع به توسعهدهندگان برای استفاده از قدرت Regex-ها کمک میکند. اما کار کردن با آن به اندازه Regex-ها پیچیده نیست. فرض کنیم باید بخشهای رشتهای سمت چپ دومین نماد نقطه «.» را در آدرسهای وب پیدا کنیم.
در کوئری زیر، روش انجام این کار را در SQL نمایش دادهایم.
خط کد بالا، تمام چیزهایی را که در سمت چپ دومین کاراکتر نقطه از آدرس سایت وجود دارد، برمیگرداند. بنابراین خروجی کوئری بالا به شکل زیر میشود.
www.Faradars
۴۴. تطبیق الگو
سینتکس مربوط به تطبیق الگو، گزینههای جایگزین بسیار زیادی را به کوئریها اضافه میکند. دادهها باید به درستی و در شکل صحیح آن مدیریت شوند. در کوئریهای تحلیلی SQL، قواعد PARTITION BY و ORDER BY برای تقسیم کردن دادهها به گروههای کوچکتر و مرتبسازی آنها در هر گروه استفاده میشوند. اگر هیچ تعداد گروه برای تقسیمبندی مشخص نشده باشد، کل دادهها مانند مجموعه واحد بزرگی در نظر گرفته میشوند.
برای مثال، عبارت MEASURES مشخص میکند که به ازای تطبیقهای مختلف، نتایج مربوط به کدام ستون از جدول نمایش داده شود. سینتکس مربوط به استفاده از این دستور در کوئری به شکل زیر است.
۴۵. تابع SOUNDEX
تابع SOUNDEX رشتهای را در خروجی برمیگرداند. این رشته از کاراکترها نحوه تلفظ رشته اصلی را مشخص میکنند. منظور از رشته اصلی، همان رشتهای است که تابع SOUNDEX در ورودی دریافت کرده. بعضی از کلمات در زبان انگلیسی به شکلهای مختلفی هجی میشوند، اما در نهایت صدای یکسانی دارند. با کمک این تابع میتوانیم آن کلمات را با همدیگر تطبیق دهیم. این تابع از «CLOB» پشتیبانی نمیکند.
کوئری پایین روش استفاده از این تابع را نشان میدهد.
۴۶. تابع UNISTR
تابع UNISTR به عنوان ورودی عبارتی را میپذیرد که از دادههای کاراکتری تشکیل شده است. سپس آن را به مجموعهای از کاراکترهای معمولی تبدیل میکند. این تابع از حروف الفبا تعریف شده در رشتههای Unicode پشتیبانی میکند. در نتیجه کاربران میتوانند مقادیری از جنس Unicode تعریف کنند. کوئری که در پایین آمده روش استفاده از این تابع را نشان میدهد.
کوئری های شرطی و مدیریت داده های پوچ
در این بخش از مطلب، ۳ مورد از مهمترین کوئریها را درباره عبارتهای شرطی و مدیریت دادههای پوچ معرفی کرده و مثالهای مربوط به آنها را نمایش دادهایم.
۴۷. استخراج نتایج NULL
کلمه NULL ، اصطلاح تخصصی است که برای توصیف مقادیر غایب یا تهی به کار برده میشود. NULL به معنای صِفر نیست. مقدار NULL در ستونهای جدول به معنای خالی بودن جایگاه مقدار مشخص شده است. ستون شامل مقدار NULL، شامل گروهی از دادهها است که بخشهایی از آن خالیاند. بسیار مهم است که به یاد داشته باشیم NULL بودن یک مقدار به معنی صفر بودن آن نیست.
در مواردی که وجود مقدار NULL در ستونها مجاز شمرده شده است، نتیجه انجام محاسبات بر روی آن مقدارها هم برابر با NULL میشود. برای روبهرو نشدن با این وضعیت میتوانیم از عملگر IFNULL استفاده کنیم. در مثال بعدی، هرجا که محاسبات با فیلدهای شامل مقدار NULL روبهرو شوند، بهجای NULL مقدار صفر «0» برگردانده میشود.
۴۸. استفاده از COALESCE برای برگرداندن اولین مقدار غیر NULL
کوئری های SQL با استفاده از تابع COALESCE مقادیر NULL درون پایگاه داده را مدیریت میکنند. در این روش، مقدارهای NULL با مقدارهای تعریف شده توسط کاربر جایگزین میشوند. تابع COALESCE در SQL تمام پارامترها را به صورت یک به یک بررسی میکند. در طی این بررسی اولین مقدار غیر NULL را که پیدا کرده به بیرون برمیگرداند.
در کوئری زیر، روش ساده استفاده از این تابع را نمایش دادهایم.
بعد از اجرای کوئری بالا، عبارت Mostafa به عنوان نتیجه تولید شده و به خروجی برگشت داده میشود.
۴۹. نتایج حاصل از اجرای زیرکوئریهای شرطی
عملگر EXISTS در SQL وجود داشتن رکوردها را درون زیرکوئری بررسی میکند. اگر رکوردی در زیرکوئری پیدا شد، در پاسخ مقدار «TRUE» برمیگرداند.
کوئری که در زیر نوشتهایم شامل عبارت شرطی در زیرکوئری است.
در کوئری بالا، اگر سفارشات مشتریها کمتر از ۵۰ واحد پولی باشد، دستور SELECT مقدار «TRUE» را به عنوان نتیجه برمیگرداند.
آموزش انواع پایگاه داده از آشنایی تا تسلط
در حال حاضر انواع مختلفی از پایگاه داده وجود دارند. بعضی از این پایگاههای داده با توجه به کاربرد اختصاصی خود شهرت جهانی پیدا کردهاند. بعضی از آنها در کار با نرمافزارهای دسکتاپ یا نرمافزارهایی با حجم دادههای کم عالی هستند. از طرف دیگر بعضی هم برای کار با سیستمهای بسیار پیچیدهای طراحی شدهاند که سرورهای آنها از لحاظ فیزیکی در مناطق مختلف جغرافیایی قرار گرفتهاند. فرادرس تلاش کرده تا بهترین آموزشها را از لحاظ کیفیت و جامعیت علمی تهیه کند. فیلمهای آموزشی فرادرس از سطوح ابتدایی تا پیشرفته و حتی اجرای پروژههای دنیای واقعی را هم پوشش دادهاند. در این قسمت از مطلب، به معرفی چند فیلم مختلف درباره چند پایگاه داده گوناگون پرداختهایم.
برای اینکه فیلمهای بیشتری درباره این پایگاههای داده ببینید یا با پایگاههای داده بیشتری آشنا شوید میتوانید بر روی تصویر زیر کلیک کرده تا به صفحه اصلی این مجموعه آموزشی هدایت شوید.
توابع پیشرفته در کوئری های SQL
کوئرینویسی، فرایندی است که در آن، به کمک زبانی مانند SQL، دادهها از پایگاه داده استخراج میشوند. در واقع، کوئرینویسی به کاربران اجازه میدهد تا به سادگی و سرعت، دادههای مورد نیاز خود را از پایگاه داده استخراج کنند. مدیران پایگاه داده حرفهای باید بتوانند کوئریهای خود را در خواناترین و کاملترین شکل ممکن بنویسند. برای یاد گرفتن نوشتن کوئریهای SQL حرفهای، پیشنهاد میکنیم که فیلم آموزش کوئری نویسی پیشرفته در SQL Server را از فرادس مشاهده کنید. لینک مربوط به این فیلم را در پایین نیز قرار دادهایم.
در ادامه این بخش، ۹ مورد از مهمترین کوئریهای SQL را که شامل توابع پیشرفته هستند، معرفی کرده و مثالهای مربوط به آنها را نیز نمایش دادهایم.
۵۰. استفاده از تابع CONVERT برای تبدیل نوع
این تابع برای تبدیل کردن مقادیر به نوعهای تعریف شده به کار برده میشود. برای مثال، اگر بخواهید که مقدار مشخصی را به نوع «Int» تبدیل کنید، تابع CONVERT کاربرد خود را نشان میدهد. در کادر زیر نمونه سادهای از استفاده تابع CONVERT را نمایش دادهایم.
بعد از اجرای کوئری بالا در خروجی عدد 27
به کاربر نمایش داده میشود.
۵۱. تابع WIDTH_BUCKET در کوئریهای SQL
این تابع با هدف کشف شماره گروه مرتبط با پارامتر دریافت شده به کار میرود. تابع WIDTH_BUCKET نتیجه عبارت دریافت شده را بعد از ارزیابی آن برمیگرداند. در کوئری زیر، روش استفاده از این تابع را نمایش دادهایم.
۵۲. تابع COSH در کوئریهای SQL
این تابع جزو توابع پیشرفته ریاضی است. تابع COSH مقدار کسینوس هایپربولیک عدد داده شده را محاسبه میکند. تابع COSH به عنوان پارامتر ورودی، هم انواع عددی را دریافت میکند و هم انواع غیر عددی را. در مثال پایین، روش استفاده از آن نمایش داده شده است.
۵۳. تابع TZ_OFFSET در کوئریهای SQL
تابع TZ_OFFSET اختلاف زمانی را بر اساس منطقه زمانی مشخص شده محاسبه کرده و به بیرون برمیگرداند. این تابع برای انجام کار خود به تاریخ اجرای کوئری هم توجه میکند. کوئری که در پایین آمده روش کار تابع TZ_OFFSET را نمایش میدهد.
۵۴. تابع CARDINALITY در کوئریهای SQL
تابع CARDINALITY برای محاسبه تعداد عناصر موجود درون جدولهای تودرتو به کار برده میشود. این تابع در نسخههای مختلف پشتیبانی میشود. در کوئری زیر، روش استفاده از این تابع نمایش داده شده است.
۵۵. تابع DUMP در کوئریهای SQL
در زمان نوشتن کوئری های SQL بسیار پیش میآید که با دادههای نوع رشته کار کنیم. تابع DUMP یکی از مهمترین توابع برای اجرای عملیات بر روی کاراکترها و رشتهها است. این تابع برای برگرداندن مقادیری با نوع «VARCHAR2» استفاده میشود. مقدار برگشت داده شده، درباره نوع دادهای ارسال شده به تابع به عنوان پارامتر، اطلاعات میدهد.
در کوئری زیر، روش استفاده از این تابع نمایش داده شده است.
۵۶. تابع PATH در کوئریهای SQL
برای استفاده از باید تابع PATH پیشنیازهای UNDER_PATH و EQUALS_PATH فراهم شوند. این تابع مسیر مربوط به منبع مشخص شده در عبارت اصلی را نشان میدهد. در کوئری زیر، روش استفاده از این تابع نمایش داده شده است.
۵۷. تابع CLUSTER_SET در کوئریهای SQL
تابع CLUSTER_SET میتواند دادهها را به یکی از دو روش زیر دریافت کند.
- روش اول: برای کسب اطلاعات میتواند از «شیء کاوشی» (Mining Type Object) خاصی استفاده کند.
- روش دوم: عبارتهای تحلیلی وجود دارند که برای بررسی دادهها الگوهای کاوشی مشخصی را ایجاد کرده یا مورد استفاده قرار میدهند. در روش دوم تابع CLUSTER_SET با استفاده از این الگوها به کاوش در میان دادهها میپردازد.
در مثال پایین، تنظیماتی وجود دارند که بیشترین تاثیر را بر روی توزیع خوشهها میگذارند. در این مثال تمام این تنظیمات را به ازای کلاینت با شماره ID 1000 فهرست کردهایم. این کوئری از توابع CLUSTER_DETAILS و CLUSTER_SET استفاده میکند. این توابع هم از مدل مخصوص خوشهبندی با نام my_sample استفاده میکنند.
خوشه به مجموعهای از جدولها گفته میشود که اطلاعات مرتبط بهم را در بلوکهای دادهای یکسانی ذخیره میکنند. در واقع تمام جدولها در کنار یکدیگر قرار گرفتهاند. برای مثال، جدولهای EMPLOYEE و DEPARTMENT با استفاده از ستون DNO به یکدیگر متصل شدهاند. اگر این جدولها را باهمدیگر در یک خوشه قرار دهیم، تمام ردیفهای آنها در بلوکهای داده یکسانی ذخیره میشوند.
۵۸. تابع NANVL در کوئریهای SQL
از این تابع برای اجرای عکسالعمل مناسب در زمان دریافت مقدار «غیرعددی» (Not a Number | NaN) استفاده میشود. فرض کنیم که مقدار «n2» را برابر با NaN قرار دادهایم. در این زمان با کمک تابع NANVL و به صورت خودکار مقدار اختیاری «n1» برگشت داده میشود. اما اگر «n2» عددی معتبر بود، در خروجی تابع مقدار «n2» برگشت داده میشد. از این تابع فقط در زمان کار کردن با مقادیری با نوع «BINARY_FLOAT» استفاده میشود.
کوئری که در پایین آمده روش کار تابع NANVL را نمایش میدهد.
سایر کوئریهای SQL
کوئری های SQL که در این بخش نمایش داده شدهاند، شامل کوئریهای پرکاربردی هستند که بیشتر به قواعد کلی کار مدیریت پایگاههای داده اشاره میکنند.
۵۹. برگرداندن ستونی از مقادیر یکتا
فرض کنیم که مسئول بخش وارد کردن دادهها در سازمان، به صورت اشتباهی اطلاعات مربوط به بعضی از مشتریها را بیش از یک بار به جدول Customers وارد کرده است. همینطور که میدانیم، برای اندیسگذاری مناسب دادهها در جدول، لازم است که همه مقادیر، درون ستون کلیدی با مقدار یکتا باشند. برای حل این مشکل از عبارت SELECT DISTINCT استفاده میکنیم.
با کمک این کد میتوانیم فهرستی از مشتریان یکتا ایجاد کنیم. این فهرست به سادگی قابل اندیسگذاری است.
۶۰. استفاده از عبارت SELECT TOP برای انتخاب برترین گزینهها
فرض کنیم که جدول مشتریان Customers بهمرور زمان بسیار بزرگ شده است. این جدول اکنون شامل هزاران ردیف داده است. اما برای دیدن سربرگهای ستونها میخواهیم که فقط ۲۵ مورد اول از ردیفهای این جدول نمایش داده شوند. به این منظور از عبارت SELECT TOP استفاده میکنیم. با کمک این عبارت میتوان تعداد ردیف برگشت داده شده بعد از اجرای کوئریها را مشخص کرد. در این مثال تصمیم داریم که ۲۵ ردیف اول از جدول Customers را انتخاب کرده و به بیرون برگردانیم.
۶۱. کلمات کلیدی ANY و ALL
بعضی از کوئری های SQL پیچیده از عبارتهای ANY و ALL استفاده میکنند. کلمه کلیدی ALL کمک میکند تا دستورات بر روی همه ردیفها اعمال شوند. البته وقتی که شرط تعیین شده به ازای همه رکوردها «TRUE» باشد. در مثال زیر ردیفها را از جدول Orders واکشی میکنیم. هدف این است که به ازای محصول مشخص شده، سفارشات با حجم بالا را پیدا کنیم. در این کوئری کد را به ازای مشتریانی اجرا میکنیم که بیش از ۵۰ محصول را سفارش دادهاند.
۶۲. نوشتن کوئریهای SQL مناسب برای توسعهدهندگان
یکی از عناصر نادیده گرفته شده در اسکریپت نویسی SQL – که از قضا بسیار هم مهم است – نوشتن کامنت در اسکریپتهاست. بسیار ضروری است که در اسکریپتهای تشکیل شده از کوئری های SQL، هدف کامل اسکریپت توضیح داده شود. این مسئله به طور خاص برای توسعهدهندگانی مفید است که احتمالا در آینده اسکریپتهای ما را میخوانند. زیرا شاید لازم شود که این توسعهدهندگان، تغییرات و اصلاحاتی را در آنها اعمال کنند.
اسکریپتهای SQL مجموعهای از کوئریها در کنار توضیحات مربوط به این کدها هستند. تمام این موارد در کنار هم و در یک فایل ذخیره میشوند. این فایل میتواند شامل دستورات SQL یا کدهای PL/SQL شود. افراد میتوانند از اسکپریتهای SQL برای ساخت، ویرایش، طراحی، اجرا یا حذف فایلها استفاده کنند.
کاراکترهای جداکننده تکخطی «—» و چندخطی «/* … */ » به توسعهدهندگان کمک میکنند که توضیحات مفیدی را به اسکریپتهای خود اضافه کنند. از این کاراکترها میتوان به روش ارزشمند دیگری نیز استفاده کرد. بعضی وقتها لازم میشود که بخش خاصی از کد غیرفعال شود. اما به عنوان توسعهدهندگان نمیخواهیم که این کدها را پاک کنیم. زیرا شاید در آینده به آن کدها نیاز داشته باشیم.
کوئری پایین را در نظر بگیرید. در این کوئری به سادگی و با اضافه کردن جداکنندههای مربوط به کامنتها میتوانیم بخشهایی از کدها را بلافاصله غیرفعال کنیم. به همین صورت با حذف جدا کنندهها این کدها بلافاصله فعال میشوند.
۶۳. کپی کردن دادههای انتخاب شده از جدولی به جدول دیگر
این ابزار SQL صدها محل استفاده مختلف دارد. فرض کنیم که میخواهیم دادههای موجود در جدول سفارشات سالیانه خود را در جدول بزرگتری آرشیو کنیم. در مثال پایین روش انجام این کار را نشان دادهایم.
کوئری بالا، تمام رکوردهای وارد شده به جدول را تا سال 2018 به جدول آرشیو وارد میکند.
۶۴. پیدا کردن هشت رکورد آخر از جدول
اگر بخواهیم که ۸ ردیف آخر وارد شده به جدول را فراخوانی کنیم – بخصوص وقتی که جدول دارای تعداد زیادی داده است – با کار مشکلی روبهرو میشویم. برای مثال فرض کنیم که میخواهیم هشت ردیف از آخرین دادههای وارد شده به جدول کارمندان Employee را استخراج کنیم. به منظور انجام اینکار میتوانیم از عبارتهای rownum و UNION استفاده کنیم. به یاد داشته باشید که متغیر rownum در SQL مقداری موقتی است.
در کوئری زیر، روش استخراج ۸ داده آخر وارد شده به این جدول را نمایش دادهایم.
توجه: در کوئری بالا هشت مورد از آخرین رکوردهای وارد شده به جدول Employee استخراج خواهند شد. rownum در این کوئری نقش «شبهستون» (Pseudo Column) را بازی میکند. دادهها با کمک این شبهستون، در مجموعه خروجی اندیسگذاری میشوند.
۶۵. تابع LAG در کوئریهای SQL
تابع LAG برای واکشی داده از ردیف قبلی استفاده میشود. این تابع هم یکی از توابع تحلیلی است. برای مثال، کوئری پایین مقدار حقوق را از ردیف قبلی واکشی میکند. با این کار مقدار اختلاف بین حقوق ردیف فعلی با ردیف قبلی محاسبه میشود. عبارت ORDER BY درون تابع LAG، ترتیب ردیفها را مشخص میکند. به صورت پیشفرض آفست برابر با 1 است. البته اگر خودمان به صورت دستی آن را تغییر نداده باشیم. اگر آفست از محدوده مجاز فراتر رود میتوانیم مقدار پیشفرض را به صورت سفارشی را تغییر دهیم. اما اگر این کار را انجام ندهیم، SQL مقدار NULL برمیگرداند.
در کوئری زیر، روش استفاده از این تابع را نمایش دادهایم.
بعد از اجرای کوئری بالا بر روی جدول فرضی، خروجی زیر تولید شده و به کاربر نمایش داده میشود.
DTNO ENO ENAME JOB SAL SAL_PREV ---------- ---------- ---------- --------- ---------- ---------- 10 7931 STEVE CLERK 1300 0 10 7783 JOHN MANAGER 2450 1300 10 7834 KING PRESIDENT 5000 2450 20 7364 ROBIN CLERK 800 0 20 7876 BRIAN CLERK 1100 800 20 7567 SHANE MANAGER 2975 1100 20 7784 SCOTT ANALYST 3000 2975 20 7908 KANE ANALYST 3000 3000 30 7900 JAMES CLERK 950 0 30 7651 CONNER SALESMAN 1250 950 30 7522 MATTHEW SALESMAN 1250 1250 30 7843 VIVIAN SALESMAN 1500 1250 30 7494 ALLEN SALESMAN 1600 1500 30 7695 GLEN MANAGER 2850 1600
۶۶. استفاده از تابع LEAD
تابع LEAD هم یکی دیگر از کوئریهای تحلیلی SQL است. این کوئری برای گرفتن داده از ردیفهای پایینتر از ردیف فعلی به کار برده میشود. برای مثال، این کوئری میتواند مقدار حقوق را از ردیف بعدی واکشی کند. با این کار مقدار اختلاف بین حقوق ردیف فعلی و ردیف بعدی محاسبه میشوند. برای این تابع هم اگر خود توسعهدهنده هیچ آفستی را مشخص نکند، به صورت پیشفرض مقدار ۱ برای آفست تنظیم میشود. اگر آفست از محدوده مجاز فراتر رود میتوانیم مقدار پیشفرض را به صورت سفارشی را تغییر دهیم. اما اگر این کار را انجام ندهیم، SQL مقدار NULL برمیگرداند.
در کوئری زیر، روش استفاده از این تابع را نمایش دادهایم.
بعد از اجرای کوئری بالا بر روی جدول فرضی، خروجی زیر تولید شده و به کاربر نمایش داده میشود.
ENO EMPNAME JOB SALARY SALARY_NEXT SALARY_DIFF ---------- ---------- --------- ---------- ---------- ---------- 7369 STEVE CLERK 800 950 150 7900 JEFF CLERK 950 1100 150 7876 ADAMS CLERK 1100 1250 150 7521 JOHN SALESMAN 1250 1250 0 7654 MARK SALESMAN 1250 1300 50 7934 TANTO CLERK 1300 1500 200 7844 MATT SALESMAN 1500 1600 100 7499 ALEX SALESMAN 1600 2450 850 7782 BOON MANAGER 2450 2850 400 7698 BLAKE MANAGER 2850 2975 125 7566 JONES MANAGER 2975 3000 25 7788 SCOTT ANALYST 3000 3000 0 7902 FORD ANALYST 3000 5000 2000 7839 KING PRESIDENT 5000 0 -5000
۶۷. N کوئری بالا
N کوئری بالا برای محدود کردن تعداد ردیفهای برگدانده شده از مجموعه مرتب شده دادهها به کار برده میشود. وقتی که بخواهیم ردیفهای بالایی یا پایینی جدولی را فراخونی کنیم، استفاده از این کوئریها بسیار مفید است.
برای مثال، کوئری زیر، به ترتیب، قیمتها مرتب شده را از بالا و پایین جدول برمیگرداند.
بعد از اجرای کوئری بالا، خروجی زیر از جدول فرضی تولید شده و به کاربر نمایش داده میشود.
PRICE ---------- 100 100 200 200 300 300 400 400 500 500 600 PRICE ---------- 600 700 700 800 800 900 900 1000 1000 20 rows selected.
۶۸. کوئری تحلیلی CORR
تابع تحلیلی CORR برای محاسبه «ضریب همبستگی» (Coefficient Of Correlation) به کار برده میشود. از این کوئری برای مشخص کردن «ضریب همبستگی پیرسون» (Pearson Correlation Coefficient) هم استفاده میشود. تابع CORR بر روی ردیفهایی کار میکند که شامل داده NULL نباشند. این کوئری همیشه مقداری بین ۱+ و ۱- را برمیگرداند. در کادر زیر سینتکس ابتدایی استفاده از این تابع نمایش داده شده است.
نمونهای از کاربرد تابع CORR را در مثال زیر نمایش دادهایم.
۶۹. تابع PREDICTION
نمونه طراحی، سن و جنسیت کاربری را پیشبینی میکند که بیشترین احتمال را برای ثبت نام در موقعیت خاصی دارد. تابع PREDICTION از فاکتورهایی مانند قیمت، طراحی، وضعیت تاهل و اندازه خانه برای انجام پیشبینی استفاده میکند.
برای انجام پیشبینی، به طور دلخواه میتوانیم اطلاعاتی را با استفاده از عبارت GROUPING به سینتکس این کوئری اضافه کنیم. این تکنیک در زمان کار کردن با مدلهای بخشبندی شده بسیار مفید است.
بعد از اجرای کوئری بالا، خروجی زیر از جدول فرضی تولید شده و به کاربر نمایش داده میشود.
CUST_GENDER CNT AVG_AGE ------------ ---------- ---------- F 270 40 M 585 41
۷۰. عبارتهای رایج جدول CTE
«عبارت رایج جدول» (Common Table Expression | CTE) مجموعه نتایج موقتی هستند که در طول زمان اجرای کوئری خاصی دوام دارند. از این عبارت میتوان چندین بار درون آن کوئری استفاده کرد. در کوئری زیر، از CTE استفاده کردهایم.
رایج ترین کوئری های SQL
در این بخش از مطلب، ۱۳ مورد از پرکابردترین کوئری های SQL را فهرست کردهایم. این کوئریها تقریبا در تمام پایگاههای داده اجرا میشوند.
- SELECT : این کوئری برای استخراج داده از جدول در پایگاههای داده به کار برده میشود.
- CREATE DATABASE : کوئری که برای ساخت پایگاه داده استفاده میشود.
- DROP DATABASE : به وسیله این کوئری میتوان پایگاه داده موجود را حذف کرد.
- CREATE TABLE : با کمک این کوئری، میتوانیم در پایگاه داده مشخص شده جدول ایجاد کنیم.
- ALTER TABLE : کوئری که برای اعمال تغییرات در جدولهای موجود مربوط به پایگاه داده مشخص شده استفاده میشود.
- DROP TABLE : با کمک این کوئری جدول موجود را از درون پایگاه داده مشخص شده حذف میکنیم.
- CREATE INDEX : این کوئری برای ساخت اندیس به کار برده میشود.
- CREATE VIEW : از این کوئری برای ساخت ویو استفاده میشود.
- DROP VIEW : از این کوئری برای حذف کردن ویو استفاده میشود.
- CREATE PROCEDURE : این کوئری به توسعهدهندگان در ساخت رویه کمک میکند.
- CREATE FUNCTION : این کوئری به توسعهدهندگان در ساخت تابع کمک میکند.
- DROP PROCEDURE : از این کوئری برای حذف کردن رویه استفاده میشود.
- DROP FUNCTION : این کوئری برای حذف کردن تابع به کار برده میشود.
جدول مهمترین کوئری های SQL
در پایان این مطلب از مجله فرادرس، تمام کوئری های SQL معرفی شده در بالا را به صورت منظم در جدول زیر جمعآوری کردهایم. به این ترتیب، مهمترین کوئری های SQL را میتوانید در جدول زیر داشته باشید.
مهمترین کوئری های SQL | ||
فراخوانی جدول با دستور SELECT | انتخاب ستونهای جدول با دستور SELECT | واکشی داده با شرایط مشخص شده با دستور SELECT |
مرتبسازی دادهها با دستور ORDER BY | دستهبندی دادهها با دستور GROUP BY | جست وجو به دنبال داده با استفاده از وایلدکارتها |
واکشی اطلاعات درون محدوده با دستور BETWEEN | کشف دادههای مشترک بین دو جدول با دستور INNER JOIN | تجمیع دادهها با دستور UNION |
اختصاص نام مستعار با دستور ** SELECT * AS | شمردن دادهها با تابع COUNT | جمع بستن مقادیر با تابع SUM |
کشف مقدار میانگین با تابع AVG | کشف کمینه دادهها با تابع MIN | کشف بیشینه دادهها با تابع MAX |
استفاده از توابع تجمعی با دستور HAVING | فهرست کردن View-ها با دستور SELECT | ساخت View با دستور CREATE VIEW |
فراخوانی View-ها با دستور SELECT | بهروزرسانی View-ها با دستور CREATE OR REPLACE | حذف View-ها با دستور DROP |
نمایش جدولهای تعریف شده با دستور SELECT * FROM | نمایش کلید اصلی با دستور SELECT * FROM | نمایش کلیدهای یکتا با دستور SELECT * FROM |
نمایش کلیدهای خارجی با دستور SELECT * FROM | نمایش Trigger-ها با دستور SELECT * FROM | نمایش جدولهای داخلی با دستور SELECT * FROM |
نمایش فهرست رویهها با دستور SELECT * FROM | ساخت جدول با دستور CREATE TABLE | اعمال تغییرات بر روی جدول با دستور ALTER TABLE |
حذف جدولها با دستور DROP TABLE | جابهجا کردن دادههای ستونها با دستور UPDATE * SET | ساخت پایگاه داده با دستور CREATE DATABASE |
اندیسگذاری در زمان ساخت جدول با دستور CREATE TABLE | روش بهینه انتخاب ستونها با دستور SELECT * FROM | رتبهبندی دادهها با دستور DENSE_RANK |
بخشبندی کوئری در دستور SELECT | استفاده از تابع FIRST_VALUE | استفاده از تابع LAST_VALUE |
استفاده از تابع PERCENT_RANK | تقسیم ردیفها با دستور NTILE | توابع تحیلی VARIANCE و VAR_POP و VAR_SAMP |
توابع تحلیلی STDDEV و STDDEV_POP و STDDEV_SAMP | استفاده از تابع SUBSTRING_INDEX | تطبیق الگو با دستور MEASURES |
استفاده از تابع SOUNDEX | استفاده از تابع UNISTR | استخراج نتایج NULL با عملگر IFNULL |
کشف مقدار غیر NULL با تابع COALESCE | استفاده از زیرکوئریهای شرطی با دستور WHERE EXISTS | تبدیل نوع با تابع CONVERT |
استفاده از تابع WIDTH_BUCKET | استفاده از تابع COSH | کشف اختلاف زمانی با تابع TZ_OFFSET |
محاسبه تعداد عناصر جدولهای تودرتو با تابع CARDINALITY | استفاده از تابع DUMP | استفاده از تابع PATH |
استفاده از تابع CLUSTER_SET | عکسالعمل در مقابل دادههای NaN با تابع NANVL | برگرداندن ستونی از مقادیر یکتا با دستور SELECT |
استفاده از عبارت SELECT TOP | انتخاب داده از بین جدولهای مرتبط باهم با دستور SELECT | نوشتن کامنتهای تکخطی «—» و چندخطی «/*…*/» |
کپی کردن داده بین جدولها با دستور SELECT | کشف رکوردهای انتهای جدول با دستور SELECT | استفاده از تابع LAG |
استفاده از تابع LEAD | محدود کردن تعداد ردیفها با دستور SELECT | تابع تحلیلی CORR |
انجام پیشبینی با تابع PREDICTION | استفاده از عبارتهای رایج جدول CTE با کلمه کلیدی WITH |
source