عبارت‌های محاسباتی، نام مستعار ستون و توابع آماری SQL

عبارت‌ها و توابع در SQL

توسط admin | گروه SQL Server | 1405/05/16

نظرات 0

عبارت‌ها و توابع در SQL

نشان فصل ۴عبارت‌ها۴

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

عبارت‌های حسابی

عبارت حسابی (Arithmetic Expression) عبارتی است که از عملوندها ــ مقادیر عددی و/یا نام ستون‌ها ــ و عملگرهای حسابی تشکیل شده است. عبارت‌های حسابی توسط SQL ارزیابی می‌شوند و با مقدار عددی مناسب جایگزین می‌شوند.

عملگرهای حسابی
OPERATORMEANINGEXAMPLE
+Add2 + 2
-SubtractBDATE - 365
*MultiplyPOP * 1.25
/DividePERCENT / 100
( )Precedence2 + (4 / 2)

عملوندها می‌توانند مقدار عددی یا نام ستون باشند

در یک عبارت، عملوند معتبر شامل عدد، نام ستون و عبارت‌های دیگر است. وقتی ستونی در عبارت استفاده می‌شود، مقدار همان ستون برای ردیف جاری در محاسبه قرار می‌گیرد. تنها عملوندهای عددی نتیجهٔ محاسبهٔ معتبر تولید می‌کنند.

عملگرها بین عملوندها قرار می‌گیرند

عملگر حسابی به روش معمول بین عملوندهایش نوشته می‌شود. اگرچه فاصله در دو سوی عملگر اجباری نیست، نمونه‌های کتاب برای خوانایی از فاصله استفاده می‌کنند.

عبارت‌های داخل پرانتز نخست ارزیابی می‌شوند

SQL ابتدا عبارت‌های حسابی داخل پرانتز را ارزیابی می‌کند. سپس نتیجه با عبارت‌های دیگر همان دستور ترکیب می‌شود. محل قرارگیری پرانتز می‌تواند مقدار عبارت را به‌طور قابل توجهی تغییر دهد.

علاوه بر ستاره و نام ستون‌ها، عبارت‌ها را نیز می‌توان در فهرست ستون‌های بند SELECT مشخص کرد. SQL ستون محاسبه‌شده‌ای را در جدول نتیجه در موقعیت تعیین‌شده قرار می‌دهد. نام ستون جدید به‌صورت پیش‌فرض همان متن عبارت است.

SQL
SELECT COUNTRY, POP / AREA
FROM COUNTRIES
WHERE LANGUAGE = 'GERMAN'
ORDER BY COUNTRY
جریان از دستور SQL به نتیجهپیکان ارتباط دستور با نتیجهٔ آن
COUNTRYPOP/AREA
Austria246.66
Germany590.15
Liechtenst...494.41
Switzerland444.47
SQL
SELECT COUNTRY, GNP * 1.1
FROM COUNTRIES
WHERE LANGUAGE = 'GERMAN'
ORDER BY COUNTRY
جریان از دستور SQL به نتیجهپیکان ارتباط دستور با نتیجهٔ آن
COUNTRYGNP*1.1
Austria147840
Germany1464100
Liechtenst...693
Switzerland164010
  • عبارت‌ها در بند SELECT مشخص می‌شوند.
  • عبارت‌ها ستون‌های جدیدی در نتیجه ایجاد می‌کنند.
  • عبارت‌ها برای هر ردیف محاسبه می‌شوند.
خلاصهٔ نحو با عبارت‌ها
CLAUSEPARAMETERSEXAMPLE
SELECT**
SELECT[ DISTINCT ] col listLANGUAGE, COUNTRY
SELECTexpr listPOP / AREA
FROMtableJOBS
WHEREcomparisonsAREA > 3000000
ORDER BYcol [ DESC ] listLANGUAGE DESC, COUNTRY
ORDER BYpos [ DESC ] list1 DESC, 3
خلاصهٔ عملگرهای حسابی
OPERATORMEANINGEXAMPLE
+Add2 + 2
-SubtractBDATE - 365
*MultiplyPOP * 1.25
/DividePERCENT / 100
( )Precedence2 + (4 / 2)

تمرین‌ها

  1. اگر ۲۰ درصد کانادایی‌ها به USA مهاجرت کنند، چند آمریکایی جدید خواهیم داشت؟
  2. برای هر نفر در USA چقدر پول هزینه می‌شود؟
  3. تعداد کل خودروهای نظامی ــ تانک‌ها به‌اضافهٔ کشتی‌ها به‌اضافهٔ هواپیماها ــ متعلق به United States را محاسبه کنید.

امتیاز اضافه

  1. ۴۵ درصد بودجهٔ نظامی ما صرف چکش‌های ۱۲۵ دلاری می‌شود. چند چکش داریم؟

عبارت‌ها در بندهای دیگر

از آن‌جا که SQL عبارت‌های موجود در دستور SELECT را مانند «ستون‌های مجازی» پرشده با مقادیر محاسبه‌شده در نظر می‌گیرد، می‌توان در بندهای WHERE و ORDER BY نیز به‌جای نام ستون از عبارت استفاده کرد.

SQL
SELECT COUNTRY, POP / AREA
FROM COUNTRIES
WHERE POP / AREA > 2000
جریان از دستور SQL به نتیجهپیکان ارتباط دستور با نتیجهٔ آن
COUNTRYPOP/AREA
Maldives2272.26
Malta3029.58
Singapore11702.29
Bahrain2148.97
Bangladesh2235.70
SQL
SELECT COUNTRY, POP / AREA
FROM COUNTRIES
WHERE POP / AREA > 2000
ORDER BY POP / AREA DESC
جریان از دستور SQL به نتیجهپیکان ارتباط دستور با نتیجهٔ آن
COUNTRYPOP/AREA
Singapore11702.29
Malta3029.58
Maldives2272.26
Bangladesh2235.70
Bahrain2148.97
  • عبارت‌ها را می‌توان در بند WHERE استفاده کرد.
  • عبارت‌ها را می‌توان در بند ORDER BY استفاده کرد.
خلاصهٔ نحو عبارت‌ها در WHERE و ORDER BY
CLAUSEPARAMETERSEXAMPLE
SELECT**
SELECT[ DISTINCT ] col listLANGUAGE, COUNTRY
SELECTexpr listPOP / AREA
FROMtableJOBS
WHEREcomparisonsAREA > 3000000
WHEREexpr oper valuePOP / AREA > 300
ORDER BYcol [ DESC ] listLANGUAGE DESC, COUNTRY
ORDER BYpos [ DESC ] list1 DESC, 3
ORDER BYexpr [ DESC ] listPOP / AREA DESC

تمرین‌ها

  1. کشور، جمعیت، مساحت و تراکم جمعیت POP/AREA را برای کشورهایی نمایش دهید که تراکمشان کمتر از ۷ نفر در هر مایل مربع است. بیشترین تراکم را در بالا قرار دهید. نتیجه ۷ ردیف دارد.
  2. کشور، جمعیت، نرخ باسوادی و تعداد افراد باسواد را برای همهٔ کشورهایی با بیش از ۱۰۰ میلیون باسواد نمایش دهید. برای محاسبهٔ افراد باسواد، نرخ باسوادی را بر ۱۰۰ تقسیم و در جمعیت ضرب کنید. ۷ ردیف وجود دارد.

امتیاز اضافه

  1. فرض کنید همهٔ ارتش‌ها ۳۰ درصد بودجهٔ خود را صرف زیرسیگاری می‌کنند و میانگین قیمت هر زیرسیگاری نظامی ۶۵۰ دلار است. کشور و تعداد زیرسیگاری به ازای هر سرباز را فقط زمانی نمایش دهید که این تعداد بیش از ۱۰ باشد؛ بزرگ‌ترین مقدار را بالا قرار دهید. ۹ کشور وجود دارد.

نام مستعار ستون

کلیدواژهٔ AS را می‌توان در بند SELECT برای تعریف نام مستعار ستون (Column Alias) ــ نامی که کاربر برای ستون تعیین می‌کند ــ به کار برد. Alias برای هر ستون قابل تعریف است، اما بیشتر برای اختصاص نام معنادار به ستون‌های محاسبه‌شده استفاده می‌شود.

SQL
SELECT COUNTRY, POP / AREA
FROM COUNTRIES
WHERE POP / AREA > 2000
ORDER BY POP / AREA DESC
جریان از دستور SQL به نتیجهپیکان ارتباط دستور با نتیجهٔ آن
COUNTRYPOP/AREA
Singapore11702.29
Malta3029.58
Maldives2272.26
Bangladesh2235.70
Bahrain2148.97
SQL
SELECT COUNTRY,
       POP / AREA AS DENSITY
FROM COUNTRIES
WHERE DENSITY > 2000
ORDER BY DENSITY DESC
جریان از دستور SQL به نتیجهپیکان ارتباط دستور با نتیجهٔ آن
COUNTRYDENSITY
Singapore11702.29
Malta3029.58
Maldives2272.26
Bangladesh2235.70
Bahrain2148.97
  • نام‌های مستعار ستون در بند SELECT تعریف می‌شوند.
  • Alias را می‌توان در بند WHERE استفاده کرد.
  • Alias را می‌توان در بند ORDER BY استفاده کرد.
  • در برخی گویش‌ها AS اختیاری است.
خلاصهٔ نحو با Alias ستون
CLAUSEPARAMETERSEXAMPLE
SELECT**
SELECTcol [ AS alias ] listLANGUAGE AS LANG, COUNTRY
SELECTexpr [ AS alias ] listPOP / AREA AS DENSITY
FROMtableJOBS
WHEREcomparisonsAREA > 3000000
WHEREexpr oper valuePOP / AREA > 300
ORDER BYcol [ DESC ] listLANGUAGE DESC, COUNTRY
ORDER BYpos [ DESC ] list1 DESC, 3
ORDER BYexpr [ DESC ] listPOP / AREA DESC

تمرین‌ها

  1. کشور، جمعیت، نرخ باسوادی و تعداد افراد باسواد را برای همهٔ کشورهایی با بیش از ۱۰۰ میلیون باسواد نمایش دهید. ستون محاسبه‌شده را READERS بنامید و هر جا مناسب است از این Alias استفاده کنید. نتیجه ۷ ردیف دارد.
  2. با استفاده از Alias ستون، کشور، جمعیت، GNP و GPP ــ مخفف Gross Personal Product و برابر با GNP * 1000000 / POP ــ را برای کشورهایی که GPP بیش از ۲۰٬۰۰۰ است نمایش دهید. بر اساس GPP نزولی مرتب کنید. نتیجه ۹ ردیف دارد.

امتیاز اضافه

  1. فرض کنید کشورهای جهان نیروهای نظامی خود را ۲۰ درصد کاهش دهند و صرفه‌جویی را به نیروگاه‌های هسته‌ای اختصاص دهند. میانگین هزینهٔ هر سرباز ۲۰٬۰۰۰ دلار است. هر کشور چقدر کمک می‌کند؟ ستون محاسبه‌شده را FISSION_FUND بنامید، بزرگ‌ترین مقدار را بالا قرار دهید و کشورهای با مشارکت کمتر از دو میلیارد را حذف کنید.
نشان فصل ۵توابع۵

توابع آماری

تابع آماری (Statistical Function) برنامه‌ای داخلی است که یک پارامتر می‌پذیرد و یک مقدار خلاصه بازمی‌گرداند. پارامتر می‌تواند نام ستون یا یک عبارت باشد. پنج تابع آماری پشتیبانی‌شده توسط SQL استاندارد در جدول زیر آمده‌اند.

توابع آماری
FUNCTIONMEANINGEXAMPLE
COUNT( )Count all rowsCOUNT(*)
COUNT( )Count non-null rowsCOUNT(JOB)
COUNT( )Count unique rowsCOUNT(DISTINCT JOB)
SUM( )Total valueSUM(POP)
MIN( )Smallest valueMIN(POP)
MAX( )Largest valueMAX(POP)
AVG( )Average valueAVG(POP / AREA)

توابع آماری پارامتر می‌پذیرند

پارامترها یا نام ستون هستند یا عبارت. پارامتر همیشه باید داخل پرانتز قرار گیرد. فاصلهٔ داخل و خارج پرانتز اختیاری است و در نمونه‌ها فقط برای خوانایی نمایش داده شده است.

توابع آماری مقادیر خلاصه برمی‌گردانند

توابع SUM و AVG فقط با ستون‌هایی قابل استفاده‌اند که دارای مقادیر عددی هستند. COUNT، MIN و MAX را می‌توان با هر نوع ستون استفاده کرد. همهٔ توابع آماری روی یک ستون یا عبارت واحد عمل می‌کنند.

COUNT پارامترهای گوناگونی می‌پذیرد

COUNT(*) تعداد ردیف‌ها را برمی‌گرداند. COUNT(column) تعداد ردیف‌هایی را می‌شمارد که ستون مشخص‌شده مقدار non-null دارد. COUNT(DISTINCT column) تعداد مقادیر یکتای non-null ستون را می‌شمارد.

اگر بند SELECT فقط شامل توابع آماری باشد، SQL مجموع کلی پرس‌وجو را نمایش می‌دهد. جدول نتیجه یک ردیف و برای هر تابع آماری یک ستون دارد. برای تغییر نام ستون‌ها می‌توان از Alias استفاده کرد.

SQL
SELECT AVG( POP )
FROM COUNTRIES
WHERE LANGUAGE = 'ENGLISH'
جریان از دستور SQL به نتیجهپیکان ارتباط دستور با نتیجهٔ آن
AVG(POP)
16025475
SQL
SELECT MIN( POP ) AS LOWEST,
       MAX( POP ) AS HIGHEST
FROM COUNTRIES
WHERE LANGUAGE = 'ENGLISH'
جریان از دستور SQL به نتیجهپیکان ارتباط دستور با نتیجهٔ آن
LOWESTHIGHEST
16661263814032
  • در بند SELECT فقط توابع مشخص شده‌اند.
  • نتیجه فقط یک ردیف دارد.
  • برای هر تابع یک ستون در نتیجه وجود دارد.
  • می‌توان برای ستون‌ها Alias تعریف کرد.
خلاصهٔ نحو با توابع
CLAUSEPARAMETERSEXAMPLE
SELECT**
SELECTcol [ AS alias ] listLANGUAGE AS LANG, COUNTRY
SELECTexpr [ AS alias ] listPOP / AREA AS DENSITY
SELECTfunc [ AS alias ] listMIN(POP) AS LOWEST
FROMtableJOBS
WHEREcomparisonsAREA > 3000000
ORDER BYcol [ DESC ] listLANGUAGE DESC, COUNTRY
ORDER BYpos [ DESC ] list1 DESC, 3
ORDER BYexpr [ DESC ] listPOP / AREA DESC
خلاصهٔ توابع آماری
FUNCTIONMEANINGEXAMPLE
COUNT( )Count all rowsCOUNT(*)
COUNT( )Count non-null rowsCOUNT(JOB)
COUNT( )Count unique rowsCOUNT(DISTINCT JOB)
SUM( )Total valueSUM(POP)
MIN( )Smallest valueMIN(POP)
MAX( )Largest valueMAX(POP)
AVG( )Average valueAVG(POP / AREA)

تمرین‌ها

  1. تعداد کل نیروها را در جدول ARMIES بیابید. باید 17,846,400 به دست آید.
  2. حداقل، حداکثر و میانگین نرخ باسوادی فرانسوی‌زبانان را نمایش دهید. حداقل ۱۸٪، حداکثر ۱۰۰٪ و میانگین ۵۱٫۳۸٪ است.
  3. در یک پرس‌وجو، تعداد کشورها ــ ۱۹۰ ــ و تعداد زبان‌های متمایز ــ ۷۹ ــ را پیدا کنید.

گروه‌بندی

اگر بند SELECT هم نام ستون و هم تابع داشته باشد، SQL زیرمجموع‌ها (Subtotals) را نمایش می‌دهد. ستون‌های مشخص‌شده باید در بند GROUP BY نیز فهرست شوند. SQL جدول را به گروه‌ها تقسیم می‌کند، برای هر گروه زیرمجموع را محاسبه می‌کند و یک ردیف برای هر گروه نمایش می‌دهد.

SQL
SELECT JOB,
       COUNT(*) AS TOTAL
FROM PERSONS
WHERE GENDER = 'MALE'
GROUP BY JOB
ORDER BY JOB
جریان از دستور SQL به نتیجهپیکان ارتباط دستور با نتیجهٔ آن
JOBTOTAL
B28
E113
M36
R14
S28
T13
W99
SQL
SELECT JOB, COUNTRY,
       COUNT(*) AS TOTAL
FROM PERSONS
WHERE GENDER = 'MALE'
GROUP BY JOB, COUNTRY
ORDER BY JOB, COUNTRY
جریان از دستور SQL به نتیجهپیکان ارتباط دستور با نتیجهٔ آن
JOBCOUNTRYTOTAL
BEngland1
BFrance1
BGermany2
BUSA24
EAustria1
EBelgium1
ECanada5
EEngland14
  • ستون‌های گروه در بند SELECT مشخص می‌شوند.
  • ستون‌های گروه در بند GROUP BY تکرار می‌شوند.
  • GROUP BY پس از بندهای FROM و WHERE می‌آید.
خلاصهٔ نحو با GROUP BY
CLAUSEPARAMETERSEXAMPLE
SELECT**
SELECT[ DISTINCT ] col [ AS alias ] listJOB, COUNTRY
SELECTfunc [ AS alias ] listMIN(POP) AS LOWEST
FROMtableJOBS
WHEREcomparisonsAREA > 3000000
GROUP BYcol listJOB, COUNTRY
ORDER BYcol [ DESC ] listLANGUAGE DESC, COUNTRY
ORDER BYpos [ DESC ] list1 DESC, 3
ORDER BYexpr [ DESC ] listPOP / AREA DESC

تمرین‌ها

  1. هر زبان و تعداد کل افرادی را که به آن زبان صحبت می‌کنند نمایش دهید. نتیجه را به Hebrew، Spanish، English و French محدود کنید.
  2. حداقل، حداکثر و میانگین نرخ باسوادی زبان‌های بالا را فهرست کنید.
  3. در یک پرس‌وجو تعداد مردان و زنان هر یک از کشورها ــ Canada و France ــ را محاسبه کنید. ابتدا بر اساس جنسیت درون کشور مرتب کنید.

امتیاز اضافه

  1. تعداد افراد هر جنسیت را که هر شغل را انجام می‌دهند فهرست کنید. افراد با جنسیت ناشناخته را وارد نکنید. نتیجه را بر اساس جنسیت درون شغل مرتب کنید. جدول نتیجه باید ۱۲ ردیف داشته باشد.

توابع در بندهای دیگر

از آن‌جا که SQL نتیجه را پس از انجام همهٔ پردازش‌های دیگر مرتب می‌کند، تابع را می‌توان در بند ORDER BY مشخص کرد. تابع می‌تواند مستقیماً وارد شود یا از طریق Alias ستونی تعریف‌شده در بند SELECT به آن ارجاع داده شود.

SQL
SELECT JOB, COUNT(*)
FROM PERSONS
WHERE GENDER = 'MALE'
GROUP BY JOB
ORDER BY COUNT(*) DESC
جریان از دستور SQL به نتیجهپیکان ارتباط دستور با نتیجهٔ آن
JOBCOUNT(*)
E113
W99
M36
B28
S28
R14
T13
SQL
SELECT JOB, COUNT(*) AS TOTAL
FROM PERSONS
WHERE GENDER = 'MALE'
GROUP BY JOB
ORDER BY TOTAL DESC
جریان از دستور SQL به نتیجهپیکان ارتباط دستور با نتیجهٔ آن
JOBTOTAL
E113
W99
M36
B28
S28
R14
T13
  • توابع را می‌توان در بند ORDER BY به کار برد.
  • توابع را می‌توان مستقیماً وارد کرد.
  • توابع را می‌توان از طریق Alias ستون ارجاع داد.

توابع را نمی‌توان در بند WHERE مشخص کرد، زیرا WHERE پیش از گروه‌بندی و اجرای تابع ارزیابی می‌شود. با این حال، توابع می‌توانند در بند HAVING ظاهر شوند؛ HAVING پس از انجام گروه‌بندی پردازش می‌شود.

SQL
SELECT JOB, COUNT(*) AS TOTAL
FROM PERSONS
WHERE GENDER = 'MALE'
GROUP BY JOB
ORDER BY TOTAL DESC
جریان از دستور SQL به نتیجهپیکان ارتباط دستور با نتیجهٔ آن
JOBTOTAL
E113
W99
M36
B28
S28
R14
T13
SQL
SELECT JOB, COUNT(*) AS TOTAL
FROM PERSONS
WHERE GENDER = 'MALE'
GROUP BY JOB
HAVING TOTAL > 30
ORDER BY TOTAL DESC
جریان از دستور SQL به نتیجهپیکان ارتباط دستور با نتیجهٔ آن
JOBTOTAL
E113
W99
M36
  • بند HAVING پس از GROUP BY می‌آید.
  • HAVING شبیه WHERE است، با این تفاوت که...
  • HAVING پس از گروه‌بندی اجرا می‌شود.
خلاصهٔ نحو با HAVING
CLAUSEPARAMETERSEXAMPLE
SELECT**
SELECT[ DISTINCT ] col [ AS alias ] listLANGUAGE AS LANG, COUNTRY
SELECTexpr [ AS alias ] listPOP / AREA AS DENSITY
SELECTfunc [ AS alias ] listMIN(POP) AS LOWEST
FROMtableJOBS
WHEREcomparisonsAREA > 3000000
GROUP BYcol listJOB, COUNTRY
HAVINGcomparisons with funcsCOUNT(*) > 30
ORDER BYcol [ DESC ] listLANGUAGE DESC, COUNTRY
ORDER BYpos [ DESC ] list1 DESC, 3
ORDER BYexpr [ DESC ] listPOP / AREA DESC
ORDER BYfunc [ DESC ] listCOUNT(*) DESC

تمرین‌ها

  1. تعداد نویسندگان هر کشور را بشمارید. بر اساس تعداد به‌صورت نزولی مرتب کنید. ۱۲ ردیف وجود دارد.
  2. زبان‌هایی را فهرست کنید که کمتر از یک میلیون نفر به آن‌ها صحبت می‌کنند. ۱۱ ردیف وجود دارد.
  3. حداقل، حداکثر و میانگین نرخ باسوادی هر زبانی را که حداقل آن با حداکثرش برابر نیست پیدا کنید. نتیجه ۱۳ ردیف دارد.

امتیاز اضافه

  1. زبان، مجموع مساحت و مجموع جمعیت همهٔ زبان‌هایی را که در بیش از یک کشور صحبت می‌شوند نمایش دهید. بزرگ‌ترین مجموع مساحت را در بالا قرار دهید. ۱۳ ردیف وجود دارد.

امتیاز کاربران به این مقاله

☆☆☆☆☆

0 نفر امتیاز داده اند. میانگین: 0.0 از 5

 

0 نظر

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

0 / 500