فصل یازدهم :
اپراتور ها در SQLite
یک اپراتور کلمه کلیدی رزرو شده ایی می باشد که در قسمت WHERE یعنی جایی که شروط را مشخص میکینم می آید تا اعمالی نظیر مقایسه و محاسبات را انجام دهد . اپراتور ها به 4 دسته ذیل تقسیم می شوند
• Arithmetic operators یا اپراتورهای ریاضی
• Comparison operators ،اپراتورهای مقایسه ایی
• Logical operators ، اپراتورهای منطقی
• Bitwise operators اپراتور های بیتی
Arithmetic Operators
فرض کنید متغیر a عدد 10 و متغیر b عدد 20 را در خود داشته باشد:
اپراتور |
توضیح |
مثال |
+ |
Addition
مقادیر دو سمت خود را با هم جمع میکیند
|
a + b will give 30 |
- |
Subtraction
مقدار سمت راس را از مقدار سمت چپ کم میکند
|
a - b will give -10 |
* |
Multiplication
دو سمت خود را در هم ضرب میکند
|
a * b will give 200
|
/ |
Division
سمت چپ خود را تقسیم بر سمت راست میکند
|
b / a will give 2
|
% |
Modulus
باقیمانده تقسیم سمت چپ بر راست را برمیگرداند
|
b % a will give 0
|
مثال های ذیل را در خط فرمان SQLite انجام دهید :
sqlite> .mode line
sqlite> select 10 + 20;
10 + 20 = 30
sqlite> select 10 - 20;
10 - 20 = -10
sqlite> select 10 * 20;
10 * 20 = 200
sqlite> select 10 / 5;
10 / 5 = 2
sqlite> select 12 % 5;
12 % 5 = 2
Comparison Operators
اپراتورهای مقایسه ایی ، فرض کنید متغیر a عدد 10 و متغیر b عدد 20 را در خود داشته باشد:
اپراتور |
توضیح |
مثال |
== |
چک میکند که آیا مقادیر دوسمت با هم برابر هستنند یا خیر اگر برابر بودند نتیجه شرط true خواهد بود
|
(a == b) is not true. |
= |
چک میکند که آیا مقادیر دوسمت با هم برابر هستند یا خیر اگر برابر بودند نتیجه شرط true خواهد بود
|
(a = b) is not true.
|
!= |
چک میکند که آیا مقادیر دوسمت با هم برابر هستنند یا خیر اگر برابر نبودند نتیجه شرط true خواهد بود
|
(a != b) is true.
|
<> |
چک میکند که آیا مقادیر دوسمت با هم برابر هستنند یا خیر اگر برابر نبودند نتیجه شرط true خواهد بود
|
(a <> b) is true.
|
> |
چک میکند که آیا مقادیر سمت چپی عبارت بزرگ تر از مقدار سمت راستی است یا خیر اگر بزرگتر بود نتیجه شرط true خواهد بود
|
(a > b) is not true.
|
< |
چک میکند که آیا مقادیر سمت چپی عبارت کوچکتر از مقدار سمت راستی است یا خیر اگر کوچکتر بود نتیجه شرط true خواهد بود
|
(a < b) is true.
|
>= |
چک میکند که آیا مقادیر سمت چپی عبارت بزرگ تر مساوی از مقدار سمت راستی است یا خیر اگر بزرگتر ویا مساوی بود نتیجه شرط true خواهد بود
|
(a >= b) is not true.
|
<= |
چک میکند که آیا مقادیر سمت چپی عبارت کوچکتر مساوی از مقدار سمت راستی است یا خیر اگر کوچکتر ویا مساوی بود نتیجه شرط true خواهد بود
|
(a <= b) is true.
|
!< |
چک میکند که آیا مقادیر سمت چپی کوچکتر از مقدار سمت راستی عبارت نباشد اگر شرط محقق شد آنگاه نتیجه true خواهد بود
|
(a !< b) is false.
|
!> |
چک میکند که آیا مقادیر سمت چپی بزرگتر از مقدار سمت راستی عبارت نباشد اگر شرط محقق شد آنگاه نتیجه true خواهد بود
|
(a !> b) is
|
مثال های ذیل را حتما انجام دهید :
فرض کنید متغیر a عدد 10 و متغیر b عدد 20 را در خود داشته باشد:
اگر به یاد داشته باشید رکورد های جدول COMPANY بشکل ذیل بودند.
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
حالا در عبارت WHERE از این اپراتور ها استفاده میکینم تا شرطی را مشخص کنیم که اگر در مورد رکوردی محقق شد آن رکورد در نتایج سلکت ما مشاهده شود.
sqlite> SELECT * FROM COMPANY WHERE SALARY > 50000;
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
یعنی تمامی سطر هایی را بیاور که فیلد SALARY آنها دارای مقداری بیش از 50000 باشند .
sqlite> SELECT * FROM COMPANY WHERE SALARY = 20000;
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
3 Teddy 23 Norway 20000.0
یعنی تمامی سطر هایی را بیاور که فیلد SALARY آنها دارای مقدار20000 باشند .
sqlite> SELECT * FROM COMPANY WHERE SALARY != 20000;
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
2 Allen 25 Texas 15000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
یعنی تمامی سطر هایی را بیاور که فیلد SALARY آنها دارای مقدار20000 نباشند .
اگر بجای اپراتور != از اپراتور <> استفاده کنید نتیجه همانند بالا خواهد بود
sqlite> SELECT * FROM COMPANY WHERE SALARY <> 20000;
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
2 Allen 25 Texas 15000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
Logical Operators - اپراتور های منطقی
اپراتور |
توضیح |
AND
|
اپراتور AND به ما اجازه میدهد تا چندن شرط را در عبارت WHERE با هم ترکب کنیم اگر تمامی شروط درست بودند انگاه نتیجه کلی عبارت صحیح می باشد .
|
BETWEEN
|
برای جستجوی مقادیری بکار میرود که در محدوه خاصی وجود دارند .
|
EXISTS
|
برای جستجوی وجود یه سطر در یک جدول خاص و بر اساس کنترل یکسری شرایط
|
IN
|
از این اپراتور برای چک کردن اینکه آیا یک مقدار دربین تعدادی از مقادیر مشخص شده وجود دارد و یا خیر استفاده میشود.
|
NOT IN
|
عملی مخالف با IN را انجام میدهد . فرض کنید می خوواهیم چک کنیم مقداری در بین لیستی از مقادیر موجود نباشد.
|
LIKE
|
برای مقایسه یک مقدار با مقادیر شبیه به ان اتفاده میشود . فرض کنید می خواهیم تمام کسانی که در نامشان کلمه "علی" هست را پیدا کنیم
|
GLOB
|
همانند LIKE ولیکن به حروف بزرگ و کوچک حساس است . یعنی ALI و یا ali و یا aLi را متفاوت میبیند.
|
NOT
|
این اپراتور معنی یک اپراتور منطقی را برعکس میکند. مثلا Not IN
(نقیض یک گزاره منطقی را ایجاد میکند)
|
OR
|
برای ترکیب اپراتور های مختلف در یک عبارت WHERE بکار میرود بدین صورت که جواب کلی گزاره هنگامی صحیح true میشود که حت اگر یکی از گزاره ها true شود. برعکس AND که بایستی کل گزاره ها حتما صحیح باشند تا نتیجه true شود.
|
IS NULL
|
برای چک کردن اینکه یک مقدار Null است یا خیر . Null یعنی مقداری که نمیدانیم چیست . هنوز مشخص نشده ات و با صفر و یا رشته خالی "" متفاوت است .
|
IS
|
همانند = عمل میکند
|
IS NOT
|
همانند != عمل میکند
|
||
|
دورشته متفاوت را به هم اضافه میکند و رشته ایی جدید میسازد
|
UNIQUE
|
تمامی رکورد های یک جدول را برای پیدا کردن رکورد های منحصربه فرد میگردد.
|
مثال ها (بسیار مهم ، حتما انجام دهید) :
دوباره به جدول COMPANY باز میگردیم :
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
حتما اول خودتان انجام دهید و بعد پاسخ ها را ببینید
سلکتی بنویسید که از رکورد های جدول COMPANY آنهایی را که Age آنها حداقل 25 باشد و مقدار درامد آنها حد اقل 65000 است را نمایش دهد :
sqlite> SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
سلکتی بنویسید که از رکورد های جدول COMPANY آنهایی را که Age آنها حداقل 25 باشد یا مقدار درامد آنها حد اقل 65000 است را نمایش دهد :
sqlite> SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
سلکتی بنویسید که از رکورد های جدول COMPANY آنهایی را که Age آنها Null نباشد را مشخص کند. (تعریف Null را دوباره ببینید)
sqlite> SELECT * FROM COMPANY WHERE AGE IS NOT NULL;
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
سلکتی بنویسید که از رکورد های جدول COMPANY آنهایی را که نامشان با دوکلمه Ki شروع شود را لیست کند
(مهم نیست بقیه حروف اسمشان چه باشد)
sqlite> SELECT * FROM COMPANY WHERE NAME LIKE 'Ki%';
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
6 Kim 22 South-Hall 45000.0
و یا
sqlite> SELECT * FROM COMPANY WHERE NAME GLOB 'Ki*';
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
6 Kim 22 South-Hall 45000.0
سلکتی بنویسید که از رکورد های جدول COMPANY آنهایی را که Age انها 25 یا 27 است را لیست کند
sqlite> SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 );
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
2 Allen 25 Texas 15000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
سلکتی بنویسید که از رکورد های جدول COMPANY آنهایی را که Age انها 25 یا 27 نیست را لیست کند
sqlite> SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 );
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
3 Teddy 23 Norway 20000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
سلکتی بنویسید که از رکورد های جدول COMPANY آنهایی را که Age انها مابین 25 و 27 است را لیست کند
sqlite> SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27;
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
2 Allen 25 Texas 15000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
Bitwise Operators - اپراتور های بیتی
این اپراتور ها بروی بیت ها کار میکنند و اعمالی بیت به بیت را انجام میدهند
p |
q |
p & q |
p | q |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
فرض کنیدA=60 و B=13 باشد در حساب دو دویی این مقادیر می شوند :
A = 0011 1100
B = 0000 1101
حالا
A&B = 0000 1100
A|B = 0011 1101
~A = 1100 0011
Operator
|
Description
|
Example
|
&
|
Binary AND Operator copies a bit to the result if it exists in both operands.
|
(A & B) will give 12 which is 0000 1100
|
|
|
Binary OR Operator copies a bit if it exists in either operand.
|
(A | B) will give 61 which is 0011 1101
|
~
|
Binary Ones Complement Operator is unary and has the effect of 'flipping' bits.
|
(~A ) will give -61 which is 1100 0011 in 2's complement form due to a signed binary number.
|
<<
|
Binary Left Shift Operator. The left operands value is moved left by the number of bits specified by the right operand.
|
A << 2 will give 240 which is 1111 0000
|
>>
|
Binary Right Shift Operator. The left operands value is moved right by the number of bits specified by the right operand.
|
A >> 2 will give 15 which is 0000 1111
|
مفاهیم و موضوعات این فصل عبارتند از :
-
Arithmetic operators یا اپراتورهای ریاضی
-
Comparison operators ،اپراتورهای مقایسه ایی
-
Logical operators ، اپراتورهای منطقی
-
Bitwise operators اپراتور های بیتی