دریافت داده های جدول توسط دستور SELECT

SELECT یکی از دستورهای SQL است که برای بازیابی داده ها از پایگاه داده های رابطه ای استفاده می شود. به طور مثال می خواهیم فهرست تمامی کارمندان را بدست آوریم. برای این کار باید از دستور SELECT استفاده کنیم تا بر روی جدول hr.employess کوئری را اجرا کنیم. به عنوان مثال دیگر می خواهیم فهرست تمامی کارمندان متعلق به یک دپارتمان خاص را پیدا کنیم، بنابراین ممکن است دستور SELECT را بر روی دو جدول اجرا کنیم.

در مطالب قبلی توضیح دادیم که هر جدول بیانگر یک موجودیت (entity) است که می تواند شامل صفر یا چندین سطر باشد. هر سطر از جدول یک نمونه از موجودیت را نشان می دهد و هر یک از ستون های جدول، یکی از خصوصیت های موجودیت را نشان می دهد.

در مفاهیم پایگاه داده اوراکل هر جدول به یک اسکیما (schema) تعلق دارد. اسکیما یک مفهوم منطقی است که تمامی اشیا متعلق به یک کاربر را نگهداری می کند. در واقع اسکیما شامل تمامی اشیایی است که تحت مالکیت یک کاربر هستند. جدول ها یکی از انواع اشیا هستند که درون یک اسکیما قرار دارند.

با استفاده از دستور SELECT سطرهایی از جدول را انتخاب می کند که محدود به یک یا همه ستون های آن جدول می شود. به طور مثال در جدول department از اسکیما hr که به صورت hr.department نوشته می شود، می توانیم تمامی ستون ها و تمامی سطرها را با یک دستور SELECT بدست آوریم. همچنین می توانیم تنها ستون های department_id و department_name را در دستور SELECT در نظر بگیریم.

مفهوم اسکیما در پایگاه داده اوراکل

ساده ترین شکل اجرای دستور SELECT

الگوی زیر ساده ترین شکل استفاده از دستور SELECT را نشان می دهد که در آن می توانیم تمامی یا چندین ستون را در خروجی نمایش دهیم. در الگوی زیر تمامی سطرها نشان داده می شوند. توجه کنید که SELECT و DISTINCT و FROM جز کلمه های رزرو شده در زبان sql هستند.

توجه کنید که دستورهای SQL به بزرگی و کوچکی حروف حساس نیستند ولی ما در این دوره تمامی دستورهای SQL را با حرف بزرگ و نام جدول و ستون ها را با حروف کوچک می نویسیم. همچنین حتما باید انتهای دستورهای SQL علامت سمی کالن قرار گیرد.

در الگو بالا اگر بخواهیم دستور SELECT را بر روی تمامی ستون ها اجرا کنیم، می توانیم از علامت * استفاده کنیم. علامت * (یا asterisk symbol) به معنی انتخاب تمامی ستون ها برای چاپ شدن در خروجی است. به عبارت دیگر استفاده از علامت * برای خلاصه نویسی است، به جای اینکه نام تمامی ستون ها را در دستور SELECT تعیین کنیم.

نابراین اگر فرض کنیم جدول دارای n ستون به نام های column1 و column2 و … و columnN باشد، اگر بخواهیم تمامی این ستون ر در خروجی و بدون استفاده از علامت * نمایش دهیم، باید نام آنها را مطابق دستور زیر در جلوی select فهرست کنیم و هر ستون را از ستون بعدی و با علامت ویرگول جدا کنیم.

به طور مثال فرض کنید می خواهیم فهرست تمامی کارمندان را از جدول employees از اسکیما hr بدست آوریم، بنابراین باید دستور زیر را در sqlplus یا sql developer اجرا کنیم.

همانطور که می بینید hr نام اسکیما و employees نام جدول است که در دستور به صورت hr.employees آمده اند. به طور کلی هر اسیکما شامل انواع مختلفی از اشیا پایگاه داده مانند جدول است که همه این اشیا تحت مالکیت یک کاربر هستند. معمولا نام کاربر و اسکیما یکسان است ولی لزوما اینطور نیست.

بنابراین توسط دستور بالا فهرست تمامی کارمندان نشان داده می شود ولی اگر بخواهیم به جای استفاده از علامت *، نام تمامی ستون ها را در دستور SELECT بنویسیم باید ابتدا توسط دستور describe ساختار جدول employees را مشاهده کنیم و سپس تمامی یا هر یک از ستون ها را در دستور SELECT بنویسیم.

شکل زیر ساختار جدول employees را نشان می دهد. همانطور که در دستورهای بالا می بینید هم از حالت hr.employees و هم از تنها نام جدول employees استفاده کردیم. زمانی که یک کاربر (در اینجا hr) به اوراکل لاگین می کند، به تمامی اشیا درون اسیکما خودش دسترسی دارد و لزومی ندارد که حتما از فرم schema_name.table_name استفاده کنیم. در شکل زیر می توانید توسط دستور DESC یا DESCRIBE نام ستون های جدول و نوع هر ستون و اندازه هر ستون را مشاهده کنید.

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

توجه کنید که SQL به بزرگی و کوچکی حروف حساس نیست و به همین خاطر در این دوره ما دستورهای SQL را با حروف بزرگ و نام ستون ها را با حروف کوچک می نویسیم. همچنین با توجه به دیاگرام زیر، ستون های job_id و manager_id و department_id نام ستون های کلید خارجی به جدول های jobs و departments و managers هستند. همچنین ستون employee_id کلید اصلی جدول است.

در طول این دوره تمرکز ما بر جدول های اسکیما hr است که دیاگرام آن در بالا آورده شده است.

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