دستور SELECT یکی از پرکاربردترین دستورات SQL می باشد که با استفاده از آن اطلاعات دیتابیس اوراکل که در حافظه یا دیسک قرار دارند نمایش داده می شوند. در این متن انواع روش های استفاده از دستور SELECT برای بازیابی و نمایش اطلاعات از دیتابیس اوراکل را توضیح می دهیم.
همانطور که می دانیم در دیتابیس اوراکل یک جدول از ستون و سطر تشکیل شده است. در دستور SELECT ابتدا نام ستون یا ستون هایی از یک جدول که می خواهیم اطلاعات آن را نمایش دهیم را انتخاب می کنیم و سپس بعد از عبارت FROM نام آن جدول را می نویسیم. در خروجی این دستور اطلاعات ستون های انتخاب شده برای سطرهای جدول نمایش می یابند.
مثال: در دستور SELECT زیر ستون های DEPARTMENT_ID و LOCATION_ID از جدول DEPARTMENTS انتخاب شده اند و در خروجی این دستور، اطلاعات مورد نظر نمایش می یابند.
+ به هر ترتیبی که نام ستون ها را در دستور SELECT انتخاب کنیم، نمایش اطلاعات نیز به همان ترتیب خواهد بود. در مثال قبلی ابتدا اطلاعات ستون DEPARTMENT_ID و سپس اطلاعات ستون LOCATION_ID نمایش داده می شود.
+ اگر در دستور SELECT بجای نام ستون ها از علامت * استفاده شود، اطلاعات تمام ستون های جدول در خروجی نمایش داده می شوند.
مثال: تمام اطلاعات (سطرها و ستون ها) جدول DEPARETMENT را در خروجی نمایش دهید.
نکات مهم در نوشتن عبارات SQL
1. کلمات، نام جداول و ستون ها در دستورات SQL به بزرگی یا کوچکی حروف حساس نیستند و می توان به دلخواه از حروف بزرگ یا کوچک استفاده نمود.
2.می توان عبارات SQL را در یک یا چند خط مجزا نوشت البته به شرطی که یک کلمه کلیدی (SELECT FROM و …) بین خطوط از هم جدا نشود.
3.در ابزار SQL DEVELOPER بکارگیری علامت ; در انتهای دستورات، اختیاری می باشد مگر اینکه چندین عبارت SQL پشت سر هم نوشته شده باشند. ولی در ابزار SQL*PLUS باید در انتهای هر دستور SQL از علامت ; استفاده شود.
استفاده از عبارت های محاسباتی در دستورات SQL
می توانیم برای اطلاعاتی که توسط دستور SELECT انتخاب می شوند از عملگرهای محاسباتی استفاده کنیم. بنابراین در خروجی دستور SELECT نتیجه این عملیات ریاضی نمایش می یابد.
+ توجه شود که این عملیات فقط مربوط به زمان نمایش اطلاعات می باشد و دیتای اصلی جداول را تغییر نمی دهد.
+ از این عملگرهای محاسباتی زمانی استفاده می شود که دیتا از نوع عدد یا تاریخ باشد.
+ از این عملگرها نمی توان در قسمت FROM عبارت SELECT استفاده نمود.
+ اگر نوع داده (DATA TYPE) ستون های جدول از نوع تاریخی (DATE) و یا TIMESTAMP باشد فقط می توان از عملگرهای جمع و تفریق استفاده نمود
مثال: در زمان اجرای دستور SELECT به حقوق تمام کارکنان 300 واحد اضافه شود و در کنار حقوق اصلی آنها نمایش یابد. همانطور که مشخص است در نمایش اطلاعات نام ستون جدید نیز برابر با SALARY + 300 است.
+ زمانی که در دستور SELECT از چند عملگر محاسباتی استفاده می شود قواعد ریاضی زیر در تعیین اولویت آنها درنظرگرفته می شوند:
1.ضرب و تقسیم اولویت بالاتری نسبت به جمع وتفریق دارند.
2.اولویت بیشتر در ترتیب عملگرها از چپ به راست می باشد.
3.بکارگیری پرانتز سبب تعریف اولویت بالاتر می شود.
مثال: در دستور اول و در ستون 12*SALARY+100 ابتدا حقوق کارکنان 12 برابر می شود و سپس 100 واحد به آن اضافه می گردد. ولی در دستور دوم به دلیل اینکه پرانتز از بالاترین اولویت برخوردار است ابتدا مقدار (SALARY+100) کارکنان محاسبه می شود و سپس 12 برابر می شود.
مفهوم مقدار NULL
NULL عبارت است از مقداری که یکی از شرایط زیر را دارد:
1.در دسترس نیست.
2.هنوز اختصاص نیافته است.
3.غیر مشخص است.
4.غیرقابل بکارگیری است.
بنابراین منظور از NULL مقدار 0 و یا جای خالی نیست. اگر در یک سطر از جدول برای یک ستون خاص مقداری تعریف نشده باشد مقدار آن برابر با NULL می باشد.
مثال: همانطور که در خروجی دستور SELECT زیر مشخص است فقط تعدادی از کارمندان می توانند حق کمیسیون دریافت کنند. بنابراین مقدار ستون حق کمیسیون برای مابقی کارمندان که حق کمیسیون دریافت نکرده اند برابر با NULL می باشد.
+ می توان مقدارهای NULL را با دستور SELECT انتخاب نمود و نمایش داد. همچنین می توان برای آنها از عملگر محاسباتی استفاده کرد. البته هرگونه عملیات ریاضی بر روی مقدار NULL نتیجه ی NULL می دهد.
+ اگر در یک ستون از جدول از CONSTRAINT های PRIMARY KEY و NOT NULL استفاده گردد از درج مقدار NULL در آن ستون جلوگیری می شود.
استفاده از نام مستعار یا ALIAS
می توان در زمان نمایش اطلاعات یک جدول توسط دستور SELECT برای ستون ها یک نام مستعار تعریف کرد تا بجای نام اصلی ستون نمایش یابد. تعریف نام مستعار برای ستون ها به روش های زیر انجام می شود:
استفاده اختیاری از کلمه AS جهت افزایش خوانایی
SELECT first_name AS NAME FROM contacts;
بدون استفاده از کلمه AS:
SELECT first_name NAME FROM contacts;
اگر نام مستعار شامل فاصله باشد یا شامل کاراکترهای خاص( ! _ – و ….) باشد از علامت “ “ باید استفاده شود:
SELECT first_name “NAME!= “ FROM contacts;
ترکیبی از روش های قبلی:
SELECT first_name AS “NAME” FROM contacts;
مثال: همانطور که مشخص است نام ستون در زمان نمایش اطلاعات تغییر یافته است:
+ از روش های بالا جهت تعریف نام مستعار برای ستون ها استفاده می شود ولی جهت تعریف نام مستعار برای نام جدول نیز می توان از این روش ها استفاده نمود که این کار در عملیات JOIN و یا SELECT های خاص پرکاربرد خواهد بود.
مثال: در دستور JOIN زیر برای جدول PRODUCT از نام مستعار P استفاده کنید.
SELECT p.product_id, p.product_name, categories.category_name
FROM products p
INNER JOIN categories
ON p.category_id = categories.category_idORDER BY p.product_name ASC, categories.category_name ASC;
عملگر الحاق یا CONCATENATION
با استفاده از این عملگر که با علامت || تعریف می شود مقدارهای چند ستون که از نوع کاراکتری می باشند در زمان نمایش اطلاعات به هم متصل گردند.
مثال: با استفاده از عملگر الحاق، دو ستون LAST_NAME و JOB_ID به هم متصل شوند و با نام مستعار EMPLOYEES نمایش داده شوند.
+ اگر یک ستون که دارای مقدار NULL می باشد با ستون دیگر الحاق شود نتیجه برابر با مقدار ستون دیگر خواهد بود.
رشته های LITERAL
عبارت LITERAL به صورت مجموعه ای از کاراکتر، عدد یا تاریخ تعریف می شود. با استفاده از LITERAL یک عبارت خاص برای نمایش در هر سطر از داده تعیین می شود.
استفاده از LITERAL همانند این می باشد که یک ستون دلخواه در زمان اجرای دستور SELECT به جدول اضافه شود. اگر عبارت تعریف شده شامل کاراکتر یا تاریخ بود باید از علامت ‘ ‘ استفاده گردد ولی برای اعداد نیاز به استفاده از علامت ‘ ‘ نمی باشد.
مثال: همزمان از الحاق، نام مستعار و LITERAL استفاده شده است:
+ اگر داخل عبارت LITERAL علامت ‘ بکار رود به جهت اینکه این علامت با ‘ شروع یا پایان آن عبارت اشتباه گرفته نشود بجای LITERAL از یک روش دیگر به نام ALTERNATE QUOTE استفاده می گردد.
عبارت ALTERNATE QUOTE با علامت q’ تعریف می گردد. همچنین می توان بجای علامت[ ] از < > ، ( ) یا { } استفاده نمود. مثال:
عدم نمایش سطرهای تکراری با عبارت DISTINCT
در حالت عادی وقتی از دستور SELECT استفاده می شود محتویات تمامی سطرها نمایش داده خواهد شد حتی اگر مقادیر در سطرهای مختلف، تکراری باشند. اگر بخواهیم فقط سطرهایی از جدول که براساس محتویات یک ستون، تکراری نیستند را نمایش دهیم می توانیم از عبارت DISTINCT برای آن ستون استفاده کنیم.
مثال: در جدول زیر(PERSONS) فقط نام تمام شهرها به صورت غیر تکراری را می خواهیم:
دستور زیر را اجرا می کنیم تا مقدارهای غیر تکراری ستون CITY را نمایش دهیم:
SELECT DISTINCT City FROM Persons;
بنابراین مقدارهای زیر نمایش داده می شود:
+می توان از عبارت DISTINCT برای مجموعه ای از ستون ها استفاده کرد که در این حالت فقط سطرهایی که به صورت غیر تکراری ترکیبی از آن ستون ها را دارند نمایش داده می شوند.
مثال:
SELECT DISTINCT product_id, quantity FROM ORDER_ITEMS;
در این دستور تمام سطرهایی که ستون های PRODUCT_ID و QUANTITY آنها مقداری متفاوت و جدید از مابقی سطرها می باشند نمایش می یابد.
مشاهده ساختار یک جدول
از دستور DESCRIBE یا DESC جهت نمایش ساختار جدول ها استفاده می شود. این دستور نام تمام ستون های جدول، نوع DATA TYPE آنها و امکان قرارگیری مقدار NULL در هر ستون را نمایش می دهد.
مثال: جدول EMPLOYEES دارای یازده ستون می باشد که پنج ستون NOT NULL هستند. نوع داده هر ستون نیز در قسمت Type مشخص است.
در این دستور ستون NULL مشخص می کند که آیا یک ستون خاص از جدول می تواند مقدار NULL داشته باشد یا نه. اگر آن ستون از نوع NOT NULL باشد یعنی در زمان تعریف آن جدول از یک شرط خاص استفاده شده است تا مقدار NULL در آن ستون درج نشود
+ دستور DESC فقط در ابزار SQL*PLUS اجرا می شود و در ابزارهای دیگر باید از نمایش گرافیکی درختی ستون ها استفاده نمود.