SQL SELECT ... WHERE
คำสั่ง
SQL SELECT ... WHERE เป็นคำสั่งในการค้นหาแบบมีเงื่อนไขซึ่งในวลี WHERE
จะมีส่วนสำคัญอยู่ 2 ส่วนคือ
- ส่วนแรกเป็น โอเปอเรเตอร์ที่ใช้ในการเชื่อมเงื่อนไขหลาย ๆเงื่อนไขไว้ด้วยกัน
ดังตารางต่อไปนี้
โอเปอเรเตอร์ |
คำอธิบาย |
|
NOT |
มีความหมายเป็น
"ไม่" ใช้ในการเปลี่ยนค่าความจริงของ search_condition ให้เป็นตรงกันข้าม |
OR |
มีความหมายเป็น
"หรือ" โดย Record ที่เลือกมาขอแค่ให้ตรงตามเงื่อนไขเพียง
1 เงื่อนไขก็พอ |
AND |
มีความหมายเป็น
"และ" โดย Record ที่เลือกมาต้องให้ตรงตามเงื่อนไขทุกเงื่อนไข |
|
|
- ส่วนที่2 เป็นโอเปอเรเตอร์ที่ใช้ในแต่ละเงื่อนไขเพื่อกำหนดเงื่อนไขของ Record
ที่ถูกเลือกขึ้นมาโดยมีโอเปอเรเตอร์ที่ใช้งานดังตารางนี้
โอเปอเรเตอร์ |
คำอธิบาย |
= |
เท่ากับ |
<>
, != |
ไม่เท่ากับ |
> |
มากกว่า |
>= |
มากกว่าหรือเท่ากับ |
!> |
ไม่มากกว่า |
< |
น้อยกว่า |
<= |
น้อยกว่าหรือเท่ากับ |
!< |
ไม่น้อยกว่า |
[NOT]
BETWEEN ... AND |
ระหว่าง |
[NOT]
IN |
เลือกเฉพาะในค่าที่กำหนด |
[NOT]
LIKE |
ใช้ในการเปรียบเทียบคำในรูปแบบ
String เพื่อหาคำที่ต้องการ |
[NOT]
NULL |
เลือกข้อมูลมี่ค่าเป็น
NULL |
|
|
Note: ในบางเวอร์ชั่นของ SQL โอเปอร์เรเตอร์ <> ก็จะใช้เป็นเครื่องหมายนี้
!= แทน
ดังตัวอย่าง test_select_where.asp
strSQL = "SELECT Profile_ID, Profile_Name, Profile_Location
"
strSQL = strSQL & "FROM Profile
"
strSQL = strSQL &
"WHERE Profile_ID >= 3 AND Profile_ID <= 10
"
strSQL = strSQL &
"ORDER BY Profile_ID ASC;" |
|
จากคำสั่งด้านบนเป็นการเลือกค่าฟิลด์ Profile_ID,
Profile_Name, Profile_Location ในตาราง Profile โดยมีข้อกำหนดว่า ค่าที่แสดงนั้นต้องเป็นค่าที่
Profile_ID น้อยกว่าหรือเท่ากับ 3 และ Profile_ID
มากกว่าหรือเท่ากับ 10 ดังนั้นค่าที่แสดงออกมาจะอยู่ในช่วงของ
Profile_ID ที่ 3 - 10 และเรียงลำดับจากน้อยไปหามากตาม
Profile_ID ซึ่งจะได้ผลดังนี้
Profile_ID |
Profile_Name |
Profile_Location |
|
3 |
user3
|
Jagata |
4 |
user4
|
Hongkong |
5 |
user5
|
Hongkong |
6 |
user6
|
Hongkong |
7 |
user7
|
Hongkong |
8 |
user8
|
Hongkong |
9 |
user9
|
Bangkok |
10 |
user10
|
London |
|
|
SQL SELECT ... WHERE...IN (n, n)
สำหรับตัวอย่างนี้ผมจะใช้งาน โอเปอเรเตอร์ IN เพื่อเลือกค่าในฟิลด์ Phofile_Location
ที่เป็น Hongkong และ Jagata โดยการใช้งาน โอเปอเรเตอร์ IN oนจะเป็นการใช้งานเพื่อเลือกเฉพาะรายการที่เรากำหนดไว้
ดังนี้
test_select_where_in.asp
strSQL = "SELECT Profile_ID, Profile_Name, Profile_Age "
strSQL = strSQL & "FROM Profile
"
strSQL = strSQL &
"WHERE Profile_Age IN (23, 34) "
strSQL = strSQL &
"ORDER BY Profile_ID ASC;" |
|
จากคำสั่งด้านบนเป็นการเลือกค่าฟิลด์ Profile_ID,
Profile_Name, Profile_Age ในตาราง Profile โดยมีข้อกำหนดว่า ค่าที่แสดงนั้นต้องเป็นค่าที่
Profile_Age มีค่า 23, 34 เท่านั้น และเรียงลำดับจากน้อยไปหามากตาม
Profile_ID ซึ่งจะได้ผลดังนี้
Profile_ID |
Profile_Name |
Profile_Age |
|
1 |
user1
|
23 |
5 |
user5
|
34 |
7 |
user7
|
23 |
9 |
user9
|
34 |
|
|
SQL SELECT ... WHERE...LIKE.....Wildcards
เราสามารถใช้งานโอเปอเรเตอร์ LIKE ร่วมกับ Wildcards ซึ่งเป็นสัญลักษณที่ใช้แทนตัวอักษรต่างๆ
เพียงบางส่วนในข้อมูล String ในการเลือกได้เช่น ให้แสดงชื่อที่ขึ้นต้นด้วย
A เท่านั้น โดยสัญลักษณและความหมายต่างๆของ Wildcards มีดังนี้
Wildcards |
คำอธิบาย |
|
-
(ขีด) |
ใช้แทนตัวอักษรตัวใดตัวหนึ่งของ
String |
% |
ใช้แทนข้อความอะไรก็ได้ |
[
] |
ใช้แทนตัวอักษรเฉพาะบางตัวเช่น
[abcde] หรือเป็นช่วงก็ได้เช่น [a - e] |
[^] |
มีความหมายตรงกันข้ามกับ
[ ] |
|
|
ในตัวอย่างแรกเราจะมาทดลองการใช้งาน Wildcards ในการเลือกค่าในฟิลด์ Author_Password
ที่มี ตัวเลข 11 อยู่ในตารางดังนี้
test_select_where_like.asp
ตัวอย่างแรก
strSQL = "SELECT Author_ID, Author_UserName, Author_Password
"
strSQL = strSQL & "FROM Author
"
strSQL = strSQL &
"WHERE Author_Password
LIKE '%11%' "
strSQL = strSQL &
"ORDER BY Author_ID ASC;" |
|
จากคำสั่งด้านบนเป็นการเลือกค่าฟิลด์ Author_ID,
Author_UserName, Author_Password ในตาราง Author โดยมีข้อกำหนดว่า ค่าที่แสดงนั้นต้องเป็นค่าที่
Author_Password มีตัวเลข 11 เป็นส่วนประกอบและอยู่ตำแหน่งที่เท่าไหร่ก็ได้
และเรียงลำดับจากน้อยไปหามากตาม Author_ID ซึ่งจะได้ผลดังนี้
Author_ID |
Author_UserName |
Author_Password |
|
4 |
user4
|
161183 |
7 |
user7
|
799116 |
9 |
user9
|
464119 |
|
|
ตัวอย่างที่2
strSQL = "SELECT Author_ID, Author_UserName, Author_Password
"
strSQL = strSQL & "FROM Author
"
strSQL = strSQL &
"WHERE Author_Password
LIKE '4[0-5]%' "
strSQL = strSQL &
"ORDER BY Author_ID ASC;" |
|
จากคำสั่งด้านบนเป็นการเลือกค่าฟิลด์ Author_ID,
Author_UserName, Author_Password ในตาราง Author โดยมีข้อกำหนดว่า ค่าที่แสดงนั้นต้องเป็นค่าที่
Author_Password มีตัวเลขที่ขึ้นต้นด้วย4
และลำดับที่ 2 ต้องเป็น 0-5 โดยที่ลำดับต่อจากนั้นจะเป็นอะไรก็ได้
และเรียงลำดับจากน้อยไปหามากตาม Author_ID ซึ่งจะได้ผลดังนี้
Author_ID |
Author_UserName |
Author_Password |
|
1 |
user1
|
402041 |
6 |
user6
|
441468 |
8 |
user8
|
433481 |
9 |
user9
|
446119 |
10 |
user10
|
404030 |
|
|