آشنایی با SQL - بخش هشتم - آشنایی با دستور SELECT

SQL

انتخاب، گزارش گیری، جستجو، بازیابی، استخراج داده ها، لیست کردن و … همگی در واقع توسط  دستور select قابل انجام است. این دستور تغییری روی داده های ذخیره شده ایجاد نمی کند.

مثال: نام و نام خانوادگی همه کارمندان را لیست کنید:

SELECT Name, Family

;FROM Personnel

دستور بالا با دستور زیر چه تفاوتی دارد؟

SELECT Family, Name

;FROM Personnel

از شرط در SELECT هم می توان استفاده کرد و نتایج جستجو را محدود کرد . مثال : نام و نام خانوادگی کارکنان متولد ۱۳۶۰ را لیست کنید

SELECT Family, Name
FROM Personnel
;WHERE BirthYear = 1360

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

SELECT *
;FROM Personnel

با استفاده از کلمه کلیدی AS می توان نام فیلدها را هنگام نمایش گزارش تغییر داد. یکی از کاربردهای آن فارسی سازی عنوان گزارش است. مثال:

SELECT Name AS ‘نام’, Family AS ‘فامیل’ ;FROM Personnel

با استفاده از  + می توان فیلدها را با هم ترکیب کرد. خروجی دستور زیر فقط یک ستون با عنوان نام کارمند می باشد.

SELECT Name + Family AS ‘نام کارمند’
;FROM Personnel

برای آن که محتوای (خروجی) گزارش بالا خواناتر باشد بهتر است این کد را به شیوه زیر اصلاح کنیم. (چرا؟)

SELECT Name +’ ‘+ Family AS ‘نام کارمند’
;FROM Personnel

مرتب سازی نتیجه (خروجی) گزارش: لیست کارمندان را که بر اساس حقوق مرتب شده است تهیه کنید.

SELECT Name,Family,Salary
FROM Personnel
;ORDERED BY Salary

به دلیل نوشتن عبارت ORDER BY  Salary گزراش بر اساس فیلد Salary  به صورت صعودی مرتب می شود یعنی فرد با حقوق کمتر در بالای لیست قرار می گیرد و آخرین نفر لیست کارمندی است که بیشترین حقوق را می گیرد.

برای مرتب سازی نزولی کافیست دستور بالا به شکل زیر اصلاح گردد:

SELECT Name,Family,Salary
FROM Personnel
;ORDERED BY Salary DESC

آیا لازم است فیلدی که مرتب سازی بر اساس آن صورت می گیرد به عنوان ستونی در خروجی گزارش هم آورده شود؟ (بحث کنید)

مرتب سازی بر اساس چند فیلد:

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

SELECT Name, Family, BithYear, Salary
FROM Personnel
;ORDERED BY BithYear ASC, Salary DESC

چنانچه دستور بالا را به شکل پائین بنویسیم. آیا نتیجه  همان است؟ چرا؟

SELECT Name, Family, BithYear, Salary
FROM Personnel
;ORDERED BY Salary DESC, BithYear ASC

با استفاده از کلمه کلیدی LIKE در شرط WHERE می توان الگوی خاصی را جستجو کرد. لیست کارمندانی را تهیه کنید که فامیل آنها با ‘Shakiba’ آغاز می شود. مثلا Shakibayi , ShakibaFar , ShakibaPoor و … و همچنین خود Shakiba

SELECT *
FROM Personnel
;WHERE Family LIKE ‘Shakiba%’

در واقع % نماینده هرتعداد کاراکتر دلخواه است.

سئوال ۱ : آیا % را می توان در ابتدا یا وسط عبارت به کار برد؟

سئوال ۲ : به % اصطلاحا کاراکتر عمومی (Wildcard) می گویند. آیا کاراکتر عمومی دیگری نیز در SQL وجود دارد؟

کاربرد عبارت DISTINCT در  دستور SELECT

با نوشتن این عبارت در جلوی SELECT  می توان ردیف های تکراری را از نتایج جستجو حذف کرد.

دستور زیر لیستی غیر تکراری از همه نام هایی که کارمندان دارند را تولید می کند.

SELECT DISTINCT Name
;FROM Personnel