×

اپراتور ها در SQLite

فصل یازدهم :

اپراتور ها در 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 اپراتور های بیتی

vatantop
نظرات و سوالات درج سوال/ نظر