การใช้ไวยากรณ์ SELECT สี่ใน ADO
ผู้เขียน:Eve Cole
เวลาอัปเดต:2009-05-30 19:54:28
มี
HAVING ใช้ในนิพจน์ SELECT เพื่อกรองระเบียนที่นับโดย GROUP BY หลังจากที่ GROUP BY นับบันทึกแล้ว HAVING จะกรองบันทึกที่ตรงกับเงื่อนไขในส่วนคำสั่ง HAVING
ไวยากรณ์มีดังนี้:
เลือกรายการเขตข้อมูล
จากตาราง
เกณฑ์การคัดเลือกอยู่ที่ไหน
จัดกลุ่มตามกลุ่มรายการฟิลด์
[มีเกณฑ์กลุ่ม]
.groupcriteria ระบุบันทึกทางสถิติที่กำหนดว่าควรกรองรายการใด
HAVING คล้ายกับ WHERE และใช้ในการตัดสินใจว่าจะเลือกระเบียนใด เมื่อใช้ GROUP BY เพื่อนับบันทึก HAVING จะกำหนดบันทึกที่ควรแสดง เช่น
เลือกชื่อผลิตภัณฑ์
จากผลิตภัณฑ์
จัดกลุ่มตามหมวดหมู่
มีราคาต่อหน่วย > 1,000
ส่วนคำสั่ง HAVING สามารถมีนิพจน์การดำเนินการได้สูงสุด 40 รายการ และนิพจน์การดำเนินการจะเชื่อมต่อกันโดยตัวดำเนินการเชิงตรรกะ เช่น AND หรือ OR
ลองดูตัวอย่างการใช้คำสั่ง SQL นี้ในโปรแกรม ASP
เราสามารถใช้ HAVING clause เพื่อกำหนดเรคคอร์ดที่ควรแสดง ตัวอย่างเช่น โปรแกรม ASP rs23.asp เป็นดังนี้ [SELECT Name, Subject, Avg (Score) As Average From Exam Group By Name, Subject Being Avg ( Score) >=60] ใช้ Have Avg(score) >=60 ค้นหาบันทึกที่มีคะแนนเฉลี่ยมากกว่าหรือเท่ากับ 60 คะแนน:
-
ตั้งค่า conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver={ไดรเวอร์ Microsoft Access (*.mdb)};DriverId=25;FIL=MS Access;"
ตั้ง rs2 = Server.CreateObject("ADODB.Recordset")
SqlStr = "เลือกชื่อ, หัวเรื่อง, ค่าเฉลี่ย (คะแนน) เป็นค่าเฉลี่ยจากกลุ่มการสอบตามชื่อ, หัวข้อที่มีค่าเฉลี่ย (คะแนน) >=60"
rs2.เปิด SqlStr,conn1,1,1
Response.Write "<p>มีค่าเฉลี่ย(คะแนน) >=60"
ทำในขณะที่ไม่ใช่ rs2.EOF
การตอบสนองเขียน "<BR>" & rs2("ชื่อ") & " " & rs2("Subject") & " เฉลี่ย: " & rs2("เฉลี่ย")
rs2.MoveNext
วนซ้ำ
rs2.ปิด
-
โปรแกรม ASP rs23.asp ข้างต้นใช้เบราว์เซอร์บนไคลเอนต์เพื่อเรียกดูผลการดำเนินการและแสดงบันทึกที่มีคะแนนเฉลี่ยมากกว่าหรือเท่ากับ 60 คะแนน
เรายังสามารถใช้ HAVING clause เพื่อค้นหาเรคคอร์ดที่ซ้ำกันได้ เช่น โปรแกรม ASP rs23.asp เป็นดังนี้ [SELECT Code From Product Group By Code Looking Count (Code) > 1] ให้ใช้ Have Count (Code) > 1 เพื่อค้นหารหัสที่ซ้ำกัน บันทึก:
-
ตั้งค่า conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver={ไดรเวอร์ Microsoft Access (*.mdb)};DriverId=25;FIL=MS Access;"
ตั้ง rs2 = Server.CreateObject("ADODB.Recordset")
SqlStr = "เลือกโค้ดจากกลุ่มผลิตภัณฑ์ตามโค้ดที่มีการนับ(โค้ด) > 1"
rs2.เปิด SqlStr,conn1,1,1
Response.Write "<p>ค้นหารายการซ้ำที่มีการนับ (รหัส) > 1"
ทำในขณะที่ไม่ใช่ rs2.EOF
Response.Write "<BR>" & rs2("ชื่อรหัส")
rs2.MoveNext
วนซ้ำ
rs2.ปิด
-
สำหรับโปรแกรม ASP rs23.asp ข้างต้น ให้ใช้เบราว์เซอร์บนฝั่งไคลเอ็นต์เพื่อเรียกดูผลการดำเนินการและแสดงบันทึกที่มีชื่อโค้ดที่ซ้ำกัน
ยูเนี่ยน
Union สามารถรวมผลลัพธ์ของการสืบค้นหลายชุดได้
ไวยากรณ์มีดังนี้:
แบบสอบถาม 1 ยูเนี่ยน [ทั้งหมด] แบบสอบถาม 2 [ยูเนี่ยน [ทั้งหมด] แบบสอบถาม 3 [ ... ]]
แบบสอบถามเป็นนิพจน์ SELECT
เมื่อคุณใช้การดำเนินการ UNION ระเบียนที่ซ้ำกันจะไม่ถูกส่งกลับ หากคุณต้องการส่งคืนระเบียนทั้งหมด คุณสามารถเพิ่ม ALL หลังจาก UNION การเพิ่ม ALL จะดำเนินการค้นหาได้เร็วขึ้น
แบบสอบถามทั้งหมดในการดำเนินการ UNION จะต้องมีจำนวนฟิลด์เท่ากัน ขนาดฟิลด์อาจแตกต่างกัน และชนิดข้อมูลของฟิลด์อาจแตกต่างกันได้เช่นกัน
นามแฝงสามารถใช้ได้เฉพาะในนิพจน์ SELECT แรกเท่านั้น และละเว้นในนิพจน์ SELECT อื่นๆ
คุณสามารถใช้ส่วนคำสั่ง GROUP BY หรือ HAVING ในแต่ละนิพจน์ SELECT เพื่อนับผลลัพธ์ของคิวรีได้
คุณสามารถใช้ส่วนคำสั่ง ORDER BY ในนิพจน์ SELECT สุดท้ายเพื่อระบุลำดับในการเรียงลำดับผลลัพธ์ของคิวรี
ลองดูตัวอย่างการใช้คำสั่ง SQL นี้ในโปรแกรม ASP
Union สามารถใช้รวมผลลัพธ์ของแบบสอบถามสองชุดได้ ตัวอย่างเช่น โปรแกรม ASP rs25.asp เป็นดังนี้ [(เลือกชื่อ วิชา คะแนนจากการสอบ โดยที่ subject='arithmetic' และ name='Li Si' ) Union (เลือกชื่อ, หัวเรื่อง, คะแนน) จากการสอบ โดยที่ subject='arithmetic' และ name='Zhang San')] ใช้ Union เพื่อรวมผลลัพธ์ของการสืบค้น SELECT สองชุด กลุ่มหนึ่งคือการสืบค้นบันทึกคะแนนเลขคณิต ของ Li Si และอีกอย่างคือสอบถามบันทึกคะแนนเลขคณิตของ Zhang San:
-
ตั้งค่า conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver={ไดรเวอร์ Microsoft Access (*.mdb)};DriverId=25;FIL=MS Access;"
ตั้ง rs2 = Server.CreateObject("ADODB.Recordset")
SqlStr = "(เลือกชื่อ วิชา คะแนนจากการสอบ โดยที่ subject='เลขคณิต' และชื่อ='หลี่ซี') ยูเนี่ยน (เลือกชื่อ วิชา คะแนนจากการสอบ โดยที่ หัวเรื่อง='เลขคณิต' และชื่อ='จางซาน') "
rs2.เปิด SqlStr,conn1,1,1
Response.เขียน "<p>Union"
ทำในขณะที่ไม่ใช่ rs2.EOF
การตอบสนองเขียน "<BR>" & rs2("ชื่อ") & " " & rs2("Subject") & " คะแนน: " & rs2("คะแนน")
rs2.MoveNext
วนซ้ำ
rs2.ปิด
-
โปรแกรม ASP ข้างต้น rs25.asp ใช้เบราว์เซอร์บนไคลเอนต์เพื่อเรียกดูผลการดำเนินการและแสดงบันทึกเศษส่วนทางคณิตศาสตร์ของ John Doe และ John Doe