با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، و کاربرانی که دوره آموزش SQLite را دنبال می کنند. ما در بخش های قبلی طرز استفاده از دستور SELECT را برای استخراج داده ها از دیتابیس را بررسی کردیم، همچنین نمونه کدهایی از استخراج داده های یک جدول را نیز بررسی کردیم، اما این ساده ترین حالت ممکن برای استخراج داده است و در بسیاری از موارد شما نیاز دارید داده های خاصی را از یک یا چند جدول مرتبط استخراج کنید، برای این منظور شما نیاز به استفاده از یک دستور شرطی در ادامه ی دستور SELECT دارید، در این مبحث شما یاد خواهید گرفت که چه طور از دستور شرطی WHERE در SQLite برای استخراج رکوردهای مورد نظر خود استفاده کنید.
در ادامه ی این آموزش سینتکس دستور شرطی WHERE در SQLite و مثال هایی از آن را ارائه کرده ایم.
ساختار عمومی دستور SELECT به همراه دستور شرطی WHERE در SQLite به صورت زیر است :
1 2 3 | SELECT column1, column2, columnN FROM table_name WHERE [condition] |
مثال
شما می توانید یک شرط را در query با استفاده از عملگرهای مقایسه ای و منطقی مانند >, <, =, LIKE, NOT و … تعریف کنید.
در نظر داشته باشید که جدول COMPANY شامل رکوردهای زیر است :
1 2 3 4 5 6 7 8 9 | 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 |
این یک مثال ساده از چگونگی استفاده از عملگرهای منطقی در SQLite است.
دستور SELECT زیر تمام رکوردهایی که فیلد AGE در آن بزرگتر و یا مساوی ۲۵ بوده و فیلد salary آن ها نیز بزرگتر مساوی ۶۵۰۰۰٫۰۰ را برمی گرداند:
1 2 3 4 5 6 | 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 |
دستور SELECT زیر تمام رکوردهایی که فیلد AGE در آن بزرگتر و یا مساوی ۲۵ بوده یا فیلد salary آن ها نیز بزرگتر مساوی ۶۵۰۰۰٫۰۰ را برمی گرداند:
1 2 3 4 5 6 7 8 | 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 |
دستور SELECT زیر تمام رکوردهایی که فیلد AGE در آن NULL نباشد را بر می گرداند.
این کد تمام رکوردها را برمی گرداند چراکه هیچکدام از مقادیر فیلد AGE در جدول NULL نیستند:
1 2 3 4 5 6 7 8 9 10 11 | 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 |
دستور SELECT زیر تمام رکوردهایی را که فیلد NAME در آن ها با ‘Ki’ شروع شود را برمی گرداند.
1 2 3 4 5 | sqlite> SELECT * FROM COMPANY WHERE NAME LIKE 'Ki%'; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 6 Kim 22 South-Hall 45000.0 |
دستور SELECT زیر تمام رکوردهایی را که فیلد NAME در آن ها با ‘Ki’ شروع شود را برمی گرداند.(اینبار با دستور GLOB)
1 2 3 4 5 | sqlite> SELECT * FROM COMPANY WHERE NAME GLOB 'Ki*'; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 6 Kim 22 South-Hall 45000.0 |
دستور SELECT زیر تمام رکوردهایی که فیلد AGE در آن ها، یکی از مقادیر ۲۵ یا ۲۷ را داشته باشد، برمی گرداند:
1 2 3 4 5 6 7 | 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 |
دستور SELECT زیر تمام رکوردهایی که فیلد AGE در آن ها، نه مقدار ۲۵ و نه مقدار ۲۷ را داشته باشد، برمی گرداند:
1 2 3 4 5 6 7 8 | 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 |
دستور SELECT زیر تمام رکوردهایی که فیلد AGE در آن ها، بین مقادیر ۲۵ و ۲۷ باشد، برمی گرداند:
1 2 3 4 5 6 7 | 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 |
در زیر عبارت SELECT از SQL زیر query استفاده می کند، در حالی که زیر query تمام رکوردها را با فیلد AGE با شرط SALARY> 65000 پیدا می کند.
همراه بودن WHERE با اپراتور EXISTS باعث لیست شدن تمام رکوردهایی که AGE در آن ها در query خارجی موجود است می شود:
1 2 3 4 5 6 7 8 9 10 11 12 | sqlite> SELECT AGE FROM COMPANY WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000); AGE ---------- 32 25 23 25 27 22 24 |
در زیر عبارت SELECT از SQL زیر query استفاده می کند، در حالی که زیر query تمام رکوردها را با فیلد AGE با شرط SALARY> 65000 پیدا می کند.
همراه بودن WHERE با اپراتور < باعث لیست شدن رکوردهایی که AGE آنها در query خارجی بزرگتر از AGE در زیر query برگشتی می باشد:
1 2 3 4 5 6 | sqlite> SELECT * FROM COMPANY WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000); ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 |
برای استخراج رکوردها و داده های خاصی که در دیتابیس به دنبال آن ها هستید، باید از یک ساختار شرطی در دستور SELECT استفاده کنید تا رکوردهای جداول مورد نظر فیلتر شوند، که برای اینکار دستور شرطی WHERE در SQLite ارائه می شود.