عملگرهای پیشرفته SQL
عملگرهای پیشرفته SQL
این فصل عملگرهای LIKE، AND، BETWEEN، OR، IN و IS NULL را همراه با تقدم ارزیابی و نقیض بررسی میکند.
عملگر LIKE
عملگر LIKE برای یافتن مقادیری استفاده میشود که با یک الگو مطابقت دارند. الگوها همیشه داخل کوتیشن نوشته میشوند. علامت درصد برای نمایش صفر یا چند نویسهٔ ناشناخته و زیرخط برای نمایش دقیقاً یک نویسهٔ ناشناخته استفاده میشود.
SELECT NAME, COUNTRY
FROM PERSONS
WHERE NAME LIKE 'Z%'
| NAME | COUNTRY |
|---|
| Zola | France |
| Zimbalist | USA |
| Zwingli | Sweden |
SELECT NAME, COUNTRY
FROM PERSONS
WHERE NAME LIKE 'EINST__N'
| NAME | COUNTRY |
|---|
| Einstein | Germany |
SELECT NAME, COUNTRY
FROM PERSONS
WHERE NAME LIKE '%ST__N%'
| NAME | COUNTRY |
|---|
| Einstein | Germany |
| Springsteen | USA |
| Steinbeck | USA |
| Silverstein | USA |
- LIKE مقادیری را مییابد که با یک الگو منطبقاند.
- علامت درصد (%) نمایندهٔ صفر یا چند نویسه است.
- زیرخط (_) نمایندهٔ یک نویسه است.
خلاصهٔ نحو با LIKE| CLAUSE | PARAMETERS | EXAMPLE |
|---|
| SELECT | * | * |
| SELECT | [ DISTINCT ] col list | LANGUAGE, COUNTRY |
| FROM | table | JOBS |
| WHERE | col oper value | AREA > 3000000 |
| WHERE | col LIKE pattern | NAME LIKE '%ST__N%' |
| ORDER BY | col [ DESC ] list | LANGUAGE DESC, COUNTRY |
| ORDER BY | pos [ DESC ] list | 1 DESC, 3 |
تمرینها
- همهٔ کشورهایی را انتخاب کنید که عبارت guinea در نامشان وجود دارد. باید ۴ ردیف بیابید.
- همهٔ ستونها را برای افرادی نمایش دهید که حرف z دومین نویسهٔ نامشان است. ۲ نفر هستند.
- همهٔ ستونهای افراد متولد ۱۵ ژوئیه را نمایش دهید. ۶ نفر هستند.
امتیاز اضافه
- همهٔ افرادی را که در نامشان apostrophe دارند بیابید. ۳ نفر هستند.
- فهرستی از ادیانی بسازید که واژهٔ orthodox در نامشان وجود دارد. فهرست را مرتب کنید و مطمئن شوید ردیف تکراری ندارد. نتیجه ۱۰ ردیف است.
عملگر AND
عملگر AND برای ترکیب دو مقایسه و ساختن یک مقایسهٔ مرکب استفاده میشود. کلیدواژهٔ AND بین دو مقایسه قرار میگیرد. برای True شدن مقایسهٔ مرکب، هر دو مقایسه باید True باشند.
SELECT NAME, BDATE
FROM PERSONS
WHERE NAME LIKE 'A%'
AND BDATE >= '1900-01-01'
| NAME | BDATE |
|---|
| Anne | 1950-08-15 |
| Albert II | 1934-06-06 |
| Achebe | 1930-11-16 |
| Archer | 1947-08-25 |
| Azimov | 1920-08-22 |
| Andrews | 1935-10-01 |
SELECT COUNTRY, GNP
FROM COUNTRIES
WHERE GNP >= 1000
AND GNP <= 2000
| COUNTRY | GNP |
|---|
| Eritrea | 1700 |
| Guyana | 1400 |
| Jamaica | 1500 |
| Suriname | 1170 |
- AND دو مقایسه را ترکیب میکند.
- AND بین دو مقایسه قرار میگیرد.
- هر دو مقایسه باید True باشند.
خلاصهٔ نحو با AND| CLAUSE | PARAMETERS | EXAMPLE |
|---|
| SELECT | * | * |
| SELECT | [ DISTINCT ] col list | LANGUAGE, COUNTRY |
| FROM | table | JOBS |
| WHERE | col oper value | AREA > 3000000 |
| WHERE | col LIKE pattern | NAME LIKE '%ST__N%' |
| WHERE | cmpr AND cmpr | NAME LIKE '%ST__N%' AND JOB = 'S' |
| ORDER BY | col [ DESC ] list | LANGUAGE DESC, COUNTRY |
| ORDER BY | pos [ DESC ] list | 1 DESC, 3 |
تمرینها
- همهٔ ستونها را برای دانشمندان آلمانی فهرست کنید. باید ۷ دانشمند پیدا شود.
- همهٔ ستونهای کشورهایی را نمایش دهید که GNP آنها کمتر از سه میلیارد و نرخ باسوادی کمتر از ۴۰ درصد است. به یاد داشته باشید GNP در میلیون دلار ذخیره شده است. بر اساس GNP مرتب کنید. نتیجه ۷ ردیف دارد.
- نام کشور و نرخ باسوادی کشورهایی را نمایش دهید که باسوادی بین ۵۵ و ۶۰ درصد است. ۷ ردیف وجود دارد.
امتیاز اضافه
- همهٔ ستونهای انگلیسیهایی را که در قرن شانزدهم به دنیا آمدهاند بر اساس نام مرتب کنید. نتیجه ۴ ردیف دارد.
- همهٔ ستونهای هشت ارتشی را نمایش دهید که بیش از ۱۰۰٬۰۰۰ سرباز، کمتر از ۱٬۰۰۰ تانک، کمتر از ۱٬۰۰۰ کشتی و کمتر از ۱٬۰۰۰ هواپیما دارند.
عملگر BETWEEN
برخی مقایسههای مرکب با AND را میتوان با عملگر BETWEEN راحتتر بیان کرد. BETWEEN مقدار هر ستون را با یک بازه مقایسه میکند. بازه همیشه هر دو نقطهٔ انتهایی را شامل میشود.
SELECT COUNTRY, LITERACY
FROM COUNTRIES
WHERE LITERACY >= 55
AND LITERACY <= 60
ORDER BY LITERACY
| COUNTRY | LITERACY |
|---|
| Equatorial... | 55 |
| Guatemala | 55 |
| Congo | 57 |
| Algeria | 57 |
| Ghana | 60 |
| Iraq | 60 |
| Palau | 60 |
SELECT COUNTRY, LITERACY
FROM COUNTRIES
WHERE LITERACY BETWEEN 55 AND 60
ORDER BY LITERACY
| COUNTRY | LITERACY |
|---|
| Equatorial... | 55 |
| Guatemala | 55 |
| Congo | 57 |
| Algeria | 57 |
| Ghana | 60 |
| Iraq | 60 |
| Palau | 60 |
- BETWEEN مقدار هر ستون را با یک بازه مقایسه میکند.
- بازه هر دو نقطهٔ انتهایی را شامل میشود.
- مقدار دوم باید بزرگتر از مقدار اول باشد.
خلاصهٔ نحو با BETWEEN| CLAUSE | PARAMETERS | EXAMPLE |
|---|
| SELECT | * | * |
| SELECT | [ DISTINCT ] col list | LANGUAGE, COUNTRY |
| FROM | table | JOBS |
| WHERE | col oper value | AREA > 3000000 |
| WHERE | col LIKE pattern | NAME LIKE '%ST__N%' |
| WHERE | cmpr AND cmpr | NAME LIKE '%ST__N%' AND JOB = 'S' |
| WHERE | col BETWEEN i AND j | LITERACY BETWEEN 55 AND 60 |
| ORDER BY | col [ DESC ] list | LANGUAGE DESC, COUNTRY |
| ORDER BY | pos [ DESC ] list | 1 DESC, 3 |
تمرینها
- با استفاده از BETWEEN، همهٔ ستونهای کشورهایی را فهرست کنید که مساحتشان بزرگتر یا مساوی ۵ و کوچکتر یا مساوی ۷۵ مایل مربع است. ۵ ردیف وجود دارد.
- همهٔ ستونهای کشورهایی را انتخاب کنید که جمعیتشان بین ۱۰۰٬۰۰۰ و ۲۰۰٬۰۰۰ نفر است. ۶ ردیف وجود دارد.
- همهٔ ستونهای ارتشهایی را انتخاب کنید که تجهیزاتشان بیش از ۳۰۰ اما کمتر از ۴۰۰ هواپیما دارد. ۹ ارتش وجود دارد.
امتیاز اضافه
- همهٔ ستونهای ارتشهایی را انتخاب کنید که دستکم ۳۰۰٬۰۰۰ سرباز و بودجهای بین ۱۰ تا ۱۰۰ میلیارد دلار دارند. به یاد داشته باشید BUDGET در میلیون دلار است. ۴ ارتش وجود دارد.
عملگر OR
عملگر OR برای ترکیب دو مقایسه و ساختن یک مقایسهٔ مرکب به کار میرود. OR بین دو مقایسه قرار میگیرد. برای True شدن مقایسهٔ مرکب، یکی از مقایسهها یا هر دو باید True باشند.
SELECT NAME, BDATE
FROM PERSONS
WHERE NAME = 'LUTHER'
OR NAME = 'CALVIN'
| NAME | BDATE |
|---|
| Luther | 1483-06-15 |
| Calvin | 1509-06-04 |
SELECT COUNTRY, LANGUAGE
FROM COUNTRIES
WHERE COUNTRY = 'GHANA'
OR COUNTRY = 'USA'
OR COUNTRY = 'FIJI'
| COUNTRY | LANGUAGE |
|---|
| Fiji | English |
| USA | English |
| Ghana | English |
- OR دو مقایسه را ترکیب میکند.
- OR بین دو مقایسه قرار میگیرد.
- یک یا هر دو مقایسه باید True باشند.
خلاصهٔ نحو با OR| CLAUSE | PARAMETERS | EXAMPLE |
|---|
| SELECT | * | * |
| SELECT | [ DISTINCT ] col list | LANGUAGE, COUNTRY |
| FROM | table | JOBS |
| WHERE | col oper value | AREA > 3000000 |
| WHERE | col LIKE pattern | NAME LIKE '%ST__N%' |
| WHERE | cmpr AND cmpr | NAME LIKE '%ST__N%' AND JOB = 'S' |
| WHERE | col BETWEEN i AND j | LITERACY BETWEEN 55 AND 60 |
| WHERE | cmpr OR cmpr | NAME = 'LUTHER' OR NAME = 'CALVIN' |
| ORDER BY | col [ DESC ] list | LANGUAGE DESC, COUNTRY |
| ORDER BY | pos [ DESC ] list | 1 DESC, 3 |
تمرینها
- همهٔ ستونهای جدول ARMIES را برای Israel و Iraq نمایش دهید.
- همهٔ ستونهای افرادی را نمایش دهید که در یکی از تاریخهای 1835-10-19 یا 1917-02-06 متولد شدهاند. ۴ نفر هستند... یا هستند؟
- نامها و تاریخ تولدهای Poe، Hugo و Dahl را فهرست کنید.
امتیاز اضافه
- چند نفر در پایگاه داده در قرن سیزدهم یا پانزدهم به دنیا آمدهاند؟
عملگر IN
برخی مقایسههای مرکب با OR را میتوان با عملگر IN راحتتر بیان کرد. IN مقدار هر ستون را با فهرستی از مقادیر مقایسه میکند. فهرست داخل پرانتز قرار میگیرد و مقادیر با ویرگول جدا میشوند.
SELECT NAME, BDATE
FROM PERSONS
WHERE NAME = 'POE'
OR NAME = 'HUGO'
OR NAME = 'DAHL'
| NAME | BDATE |
|---|
| Hugo | 1802-08-05 |
| Dahl | 1916-09-01 |
| Poe | 1809-04-09 |
SELECT NAME, BDATE
FROM PERSONS
WHERE NAME IN ('POE', 'HUGO', 'DAHL')
| NAME | BDATE |
|---|
| Hugo | 1802-08-05 |
| Dahl | 1916-09-01 |
| Poe | 1809-04-09 |
- IN مقدار هر ستون را با یک فهرست مقایسه میکند.
- فهرست داخل پرانتز قرار میگیرد.
- مقادیر فهرست با ویرگول جدا میشوند.
خلاصهٔ نحو با IN| CLAUSE | PARAMETERS | EXAMPLE |
|---|
| SELECT | * | * |
| SELECT | [ DISTINCT ] col list | LANGUAGE, COUNTRY |
| FROM | table | JOBS |
| WHERE | col oper value | AREA > 3000000 |
| WHERE | col LIKE pattern | NAME LIKE '%ST__N%' |
| WHERE | cmpr AND cmpr | NAME LIKE '%ST__N%' AND JOB = 'S' |
| WHERE | col BETWEEN i AND j | LITERACY BETWEEN 55 AND 60 |
| WHERE | cmpr OR cmpr | NAME = 'LUTHER' OR NAME = 'CALVIN' |
| WHERE | col IN ( value list ) | NAME IN ('POE', 'HUGO', 'DAHL') |
| ORDER BY | col [ DESC ] list | LANGUAGE DESC, COUNTRY |
| ORDER BY | pos [ DESC ] list | 1 DESC, 3 |
تمرینها
- همهٔ ستونها را برای Einstein، Galilei و Newton با استفاده از IN نمایش دهید.
- همهٔ ستونهای کشورهایی را نمایش دهید که نرخ باسوادی آنها ۲۰، ۴۰ یا ۶۰ درصد است. ۵ کشور وجود دارد.
- نام و کشور همهٔ دانشمندان پایگاه داده را که از Germany، Austria یا Italy هستند فهرست کنید. نتیجه ۱۱ ردیف دارد.
امتیاز اضافه
- همهٔ افراد اهل Germany، Austria یا Italy را که نویسنده، سرگرمیساز یا مدیر کسبوکار هستند پیدا کنید. ۱۱ نفر هستند. شناسههای رسمی شغل در جدول JOBS قرار دارند.
عملگر IS NULL
مقدار Null ورودیِ مفقود در یک ستون است. Null یعنی «ناشناخته» یا «قابل اعمال نیست». Null نه Blank است و نه Zero؛ دو Null نیز الزاماً با هم برابر نیستند و نمیتوان با Null محاسبات عددی انجام داد. عملگر IS NULL ردیفهایی را پیدا میکند که مقدار Null دارند.
SELECT COUNTRY, POP
FROM COUNTRIES
WHERE POP IS NULL
SELECT NAME, BDATE
FROM PERSONS
WHERE COUNTRY = 'IRAN'
AND BDATE IS NULL
- Nullها مقادیر مفقود هستند.
- Null با Blank یکسان نیست.
- Null با Zero یکسان نیست.
- IS NULL مقادیر Null را پیدا میکند.
خلاصهٔ نحو با IS NULL| CLAUSE | PARAMETERS | EXAMPLE |
|---|
| SELECT | * | * |
| SELECT | [ DISTINCT ] col list | LANGUAGE, COUNTRY |
| FROM | table | JOBS |
| WHERE | col oper value | AREA > 3000000 |
| WHERE | col LIKE pattern | NAME LIKE '%ST__N%' |
| WHERE | cmpr AND cmpr | NAME LIKE '%ST__N%' AND JOB = 'S' |
| WHERE | col BETWEEN i AND j | LITERACY BETWEEN 55 AND 60 |
| WHERE | cmpr OR cmpr | NAME = 'LUTHER' OR NAME = 'CALVIN' |
| WHERE | col IN ( value list ) | NAME IN ('POE', 'HUGO', 'DAHL') |
| WHERE | col IS NULL | POP IS NULL |
| ORDER BY | col [ DESC ] list | LANGUAGE DESC, COUNTRY |
| ORDER BY | pos [ DESC ] list | 1 DESC, 3 |
تمرینها
- همهٔ ستونهای کشورهایی را نمایش دهید که GNP آنها ناشناخته است. یک چنین کشوری وجود دارد.
- همهٔ ستونهای سرگرمیسازانی را نمایش دهید که جنسیتشان Null است. ۲ مورد وجود دارد.
- همهٔ ستونهای اسرائیلیهایی را انتخاب کنید که تاریخ تولدشان ناشناخته است. ۹ نفر هستند.
امتیاز اضافه
- چند کشور مساحت کمتر از ۱۰ مایل مربع و GNP بیش از ۲۵۰ میلیون دارند؟ چند کشور مساحت کمتر از ۱۰ مایل مربع و GNP کمتر یا مساوی ۲۵۰ میلیون دارند؟ با توجه به این نتایج، حدس میزنید چند کشور مساحت کمتر از ۱۰ مایل مربع داشته باشند؟
تقدم و نقیض
پرانتز برای تعیین تقدم (Precedence) ــ یعنی ترتیب ارزیابی مقایسهها ــ استفاده میشود. SQL ابتدا مقایسههای داخل پرانتز را ارزیابی میکند. کلیدواژهٔ NOT برای نقیض یا معکوسکردن نتیجهٔ یک مقایسه استفاده میشود.
SELECT JOB, NAME
FROM PERSONS
WHERE COUNTRY = 'ITALY'
AND (JOB = 'S' OR JOB = 'W')
ORDER BY JOB, NAME
| JOB | NAME |
|---|
| S | Avogadro |
| S | Fermi |
| S | Galilei |
| W | Boccaccio |
| W | Dante |
| W | Petrarca |
SELECT JOB, NAME
FROM PERSONS
WHERE COUNTRY = 'ITALY'
AND NOT (JOB = 'S' OR JOB = 'W')
ORDER BY JOB, NAME
| JOB | NAME |
|---|
| E | Fabio |
| M | Epiphani |
| M | Ptolemio |
| T | Augustino |
- مقایسههای داخل پرانتز نخست ارزیابی میشوند.
- NOT در جلوی یک مقایسه قرار میگیرد.
- NOT نتیجهٔ مقایسه را معکوس میکند.
خلاصهٔ نحو با پرانتز و NOT| CLAUSE | PARAMETERS | EXAMPLE |
|---|
| SELECT | * | * |
| SELECT | [ DISTINCT ] col list | LANGUAGE, COUNTRY |
| FROM | table | JOBS |
| WHERE | col oper value | AREA > 3000000 |
| WHERE | [NOT] col LIKE pattern | NAME LIKE '%ST__N%' |
| WHERE | cmpr AND cmpr | NAME LIKE '%ST__N%' AND JOB = 'S' |
| WHERE | col BETWEEN i AND j | LITERACY BETWEEN 55 AND 60 |
| WHERE | cmpr OR cmpr | NAME = 'LUTHER' OR NAME = 'CALVIN' |
| WHERE | col IN ( value list ) | NAME IN ('POE', 'HUGO', 'DAHL') |
| WHERE | col IS NULL | POP IS NULL |
| WHERE | ( compound cmpr ) | ( JOB = 'S' OR JOB = 'W' ) |
| ORDER BY | col [ DESC ] list | LANGUAGE DESC, COUNTRY |
| ORDER BY | pos [ DESC ] list | 1 DESC, 3 |
تمرینها
- همهٔ ستونها را برای آلمانیهایی نمایش دهید که یا الهیداناند یا مدیر کسبوکار. نتیجه را بر اساس نام مرتب کنید. ۳ ردیف وجود دارد.
- پرسوجوی قبلی را تغییر دهید تا همهٔ آلمانیهایی را بیابد که مدیر کسبوکار یا الهیدان نیستند. نتیجه ۱۱ ردیف دارد.
امتیاز اضافه
- چند ارتش، بهجز USA و Russia، بودجهٔ نظامی بیش از ۳۰ میلیارد دلار دارند؟ تعداد آنها ...