การใช้ไวยากรณ์ SELECT 5 ใน ADO
ผู้เขียน:Eve Cole
เวลาอัปเดต:2009-05-30 19:54:26
เข้าร่วม
การเชื่อมต่อ JOIN จะรวมบันทึกฟิลด์ไว้ในสองตาราง รวมทั้งสามประเภท:
สูตรการดำเนินการ INNER JOIN: รวมและรวมบันทึกฟิลด์ในสองตาราง
สูตรการดำเนินการ LEFT JOIN: รวมและรวมระเบียนฟิลด์ในสองตาราง และจะรวมระเบียนทั้งหมดในตารางด้านซ้ายของ LEFT JOIN
สูตรการดำเนินการ RIGHT JOIN: รวมและรวมระเบียนเขตข้อมูลในสองตาราง และจะรวมระเบียนทั้งหมดในตารางทางด้านขวาของ RIGHT JOIN
INNER JOIN ตั้งค่านิพจน์การดำเนินการที่เกี่ยวข้องกับสองตารางเพื่อเชื่อมต่อและรวมระเบียนฟิลด์ในทั้งสองตาราง
ไวยากรณ์ INNER JOIN เป็นดังนี้:
จากตารางที่ 1 เข้าร่วมภายใน ตารางที่ 2 บน ตารางที่ 1. ฟิลด์ 1 ตัวดำเนินการเปรียบเทียบ ตารางที่ 2. ฟิลด์ 2
เขตข้อมูลที่ใช้เชื่อมต่อสองตาราง เช่น [ตารางที่ 1 เขตข้อมูล 1 = ตารางที่ 2 เขตข้อมูล 2] ต้องมีประเภทเขตข้อมูลเหมือนกัน แต่ชื่อเขตข้อมูลไม่จำเป็นต้องเหมือนกัน
ตัวอย่างเช่น ประเภทฟิลด์ AutoNumber สามารถเชื่อมต่อกับประเภทฟิลด์ Long ได้ แต่ประเภทฟิลด์ Single Integer ไม่สามารถเชื่อมต่อกับประเภทฟิลด์ Double Integer ได้
ตัวดำเนินการเปรียบเทียบอาจเป็น =, <, >, <=, >= หรือ <>
ฟิลด์ที่เชื่อมต่อด้วย JOIN ไม่สามารถมีประเภทฟิลด์ MEMO หรือประเภทออบเจ็กต์ OLE มิฉะนั้นจะเกิดข้อผิดพลาด
ในนิพจน์ JOIN คุณสามารถเชื่อมต่อส่วนคำสั่ง ON ได้หลายรายการ:
เลือกช่อง
จากตารางที่ 1 เข้าร่วมภายใน ตารางที่ 2
บน ตารางที่ 1. ฟิลด์ 1 ตารางตัวดำเนินการเปรียบเทียบ 2. ฟิลด์ 1 และ
บน ตารางที่ 1. ฟิลด์ 2 ตารางตัวดำเนินการเปรียบเทียบ 2. ฟิลด์ 2) หรือ
บนตารางที่ 1. ตารางตัวดำเนินการเปรียบเทียบฟิลด์ 3 2. ฟิลด์ 3)
นิพจน์ JOIN สามารถซ้อนกันได้:
เลือกช่อง
จากตารางที่ 1 เข้าร่วมภายใน
(ตารางที่ 2 เข้าร่วมภายใน [( ]ตารางที่ 3
[เข้าร่วมภายใน [( ] ตาราง x [เข้าร่วมภายใน ...)]
บนตารางที่ 3 ฟิลด์ 3 ตารางตัวดำเนินการเปรียบเทียบ x ฟิลด์ x)]
บน ตารางที่ 2. ฟิลด์ 2 ตารางตัวดำเนินการเปรียบเทียบ 3. ฟิลด์ 3)
บน ตารางที่ 1. ฟิลด์ 1 ตารางตัวดำเนินการเปรียบเทียบ 2. ฟิลด์ 2
ใน INNER JOIN สามารถรวม LEFT JOIN หรือ RIGHT JOIN ที่ซ้อนกันได้ แต่ใน LEFT JOIN หรือ RIGHT JOIN นั้น ไม่สามารถรวม INNER JOIN ที่ซ้อนกันได้
ลองดูตัวอย่างการใช้คำสั่ง SQL นี้ในโปรแกรม ASP
คุณสามารถใช้ Inner Join...On เพื่อรวมเรคคอร์ดในสองตารางได้ ตัวอย่างเช่น โปรแกรม ASP rs26.asp เป็นดังนี้ [Select Sales, Product Name, Product] Inner Join Product On Product. Code = Sales.Code] ใช้ Inner Join...On เพื่อตั้งค่าสูตรการคำนวณที่เกี่ยวข้องกับทั้งสองตาราง และรวมเรกคอร์ดในสองตาราง:
-
ตั้งค่า conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ="& Server.MapPath("ntopsamp.mdb") &";Driver={ไดรเวอร์ Microsoft Access (*.mdb)};DriverId=25;FIL=MS Access;"
ตั้งค่า rs3 = Server.CreateObject("ADODB.Recordset")
sql = "เลือก Sales.Code, Product.Name, Product.Price, Sales.Quantity จาก SalesInner Join ProductOn Product.Code = Sales.Code"
rs3.เปิด sql,conn1,1,1,1
-
<ตาราง COLSPAN=8 เซลล์แพ็ด=5 เส้นขอบ=0>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">รหัส</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">ชื่อ</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">ราคา</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">ปริมาณ</FONT></TD>
</TR>
<% ทำในขณะที่ไม่ใช่ rs3.EOF %>
<TR>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3(0)%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3(1)%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3(2)%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3(3)%></TD>
</TR>
-
rs3.MoveNext
วนซ้ำ
rs3.ปิด
-
</ตาราง>
โปรแกรม ASP rs26.asp ด้านบนใช้เบราว์เซอร์บนฝั่งไคลเอ็นต์เพื่อเรียกดูผลการดำเนินการและแสดงบันทึกในสองตารางที่รวมกัน เนื่องจากไม่มีฟิลด์ชื่อและฟิลด์ราคาในตารางการขาย [Inner Join Product On Product] Code = Sales.Code] ค้นหาข้อมูลในช่องชื่อและช่องราคาของตารางผลิตภัณฑ์
ตัวอย่างข้างต้นใช้ไวยากรณ์ของ Inner Join:
เลือก Sales.Code, Product.Name, Product.Price, Sales.Quantity จาก SalesInner Join ProductOn Product.Code = Sales.Code
ผลลัพธ์จะเหมือนกับการใช้ Where:
เลือก Sales.Code, Product.Name, Product.Price, Sales.Quantity จากการขาย ProductWhere Product.Code = Sales.Code
เข้าร่วมทางซ้าย / เข้าร่วมทางขวา
การเชื่อมต่อ INNER JOIN จะรวมเรกคอร์ดฟิลด์ที่เกี่ยวข้องไว้ในสองตาราง ซึ่งเป็นการเชื่อมต่อภายใน คุณยังสามารถใช้:
ใช้การดำเนินการ LEFT JOIN: เพื่อสร้างการรวมภายนอกด้านซ้าย นอกเหนือจากการรับบันทึกฟิลด์ที่เกี่ยวข้องในสองตารางแล้ว LEFT JOIN ยังจะรวมบันทึกทั้งหมดในตารางด้านซ้ายของ LEFT JOIN โดยไม่คำนึงว่าจะมีบันทึกที่ตรงกันในตารางด้านขวาหรือไม่
ใช้การดำเนินการ RIGHT JOIN: สร้างการเชื่อมต่อภายนอกที่ถูกต้อง นอกเหนือจากการรับบันทึกฟิลด์ที่เกี่ยวข้องในสองตารางแล้ว RIGHT JOIN ยังรวมบันทึกทั้งหมดในตารางด้านขวาของ RIGHT JOIN โดยไม่คำนึงว่ามีบันทึกที่ตรงกันในตารางด้านซ้ายหรือไม่
ตัวอย่างเช่น [Sales LEFT JOIN Products] สามารถเลือกบันทึกการขายทั้งหมดได้ [ขายสินค้า RIGHT JOIN] สามารถเลือกบันทึกผลิตภัณฑ์ทั้งหมดได้
ตัวอย่างเช่น การใช้ Left Join...On ไม่เพียงแต่รับบันทึกฟิลด์ที่เกี่ยวข้องในสองตาราง แต่ยังรวมถึงบันทึกทั้งหมดในตารางด้านซ้ายของ LEFT JOIN ด้วย โปรแกรม ASP rs26.asp มีดังต่อไปนี้ [Select sales. code, product.name, product .Price, Sales.Quantity from SalesLeft Join ProductOn Product.Code = Sales.Code] การใช้ Left Join จะรวมบันทึกทั้งหมดในตารางการขายทางด้านซ้ายของ LEFT JOIN:
-
ตั้งค่า conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ="& Server.MapPath("ntopsamp.mdb") &";Driver={ไดรเวอร์ Microsoft Access (*.mdb)};DriverId=25;FIL=MS Access;"
'conn1.Open "driver={SQL Server};server=(Local);uid=sa;pwd=;database=NtopSamp"
ตั้งค่า rs3 = Server.CreateObject("ADODB.Recordset")
sql = "เลือก Sales.Code, Product.Name, Product.Price, Sales.Quantity จาก SalesLeft เข้าร่วม ProductOn Product.Code = Sales.Code"
rs3.เปิด sql,conn1,1,1,1
-
<ตาราง COLSPAN=8 เซลล์แพ็ด=5 เส้นขอบ=0>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">รหัส</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">ชื่อ</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">ราคา</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">ปริมาณ</FONT></TD>
</TR>
<% ทำในขณะที่ไม่ใช่ rs3.EOF %>
<TR>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3(0)%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3(1)%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3(2)%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3(3)%></TD>
-
rs3.MoveNext
วนซ้ำ
rs3.ปิด
-
</ตาราง>
สำหรับโปรแกรม ASP rs26.asp ข้างต้น ให้ใช้เบราว์เซอร์บนฝั่งไคลเอ็นต์เพื่อเรียกดูผลลัพธ์การดำเนินการ จอแสดงผลประกอบด้วยบันทึกทั้งหมดในตารางการขายทางด้านซ้ายของ LEFT JOIN เนื่องจากไม่มีฟิลด์ชื่อและฟิลด์ราคา ตารางการขาย บันทึกการขายพร้อมรหัสหมายเลข 4 ผ่าน [Sales Left Join Product On Product.Code = Sales.Code] ข้อมูลของฟิลด์ชื่อและฟิลด์ราคาของตารางผลิตภัณฑ์จะพบข้อมูล สำหรับโค้ดอื่น ๆ ไม่พบช่องชื่อและช่องราคา
การใช้ Right Join...On ไม่เพียงแต่รับบันทึกฟิลด์ที่เกี่ยวข้องในสองตาราง แต่ยังรวมบันทึกทั้งหมดในตารางด้านขวาของ RIGHT JOIN ด้วย ตัวอย่างเช่น โปรแกรม ASP rs26.asp มีดังต่อไปนี้ [Select Sales .Code, Product.Name, Product .Price, Sales.Quantity from Sales Right Join Product On Product.Code = Sales.Code] การใช้ Right Join จะรวมบันทึกทั้งหมดในตารางผลิตภัณฑ์ทางด้านขวาของ RIGHT JOIN:
-
ตั้งค่า conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ="& Server.MapPath("ntopsamp.mdb") &";Driver={ไดรเวอร์ Microsoft Access (*.mdb)};DriverId=25;FIL=MS Access;"
ตั้งค่า rs3 = Server.CreateObject("ADODB.Recordset")
sql = "เลือก Sales.Code, Product.Name, Product.Price, Sales.Quantity จาก SalesRight Join ProductOn Product.Code = Sales.Code"
rs3.เปิด sql,conn1,1,1,1
-
<ตาราง COLSPAN=8 เซลล์แพ็ด=5 เส้นขอบ=0>
<TR>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">รหัส</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">ชื่อ</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">ราคา</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#800000"><FONT COLOR="#FFFFFF">ปริมาณ</FONT></TD>
</TR>
<% ทำในขณะที่ไม่ใช่ rs3.EOF %>
<TR>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3(0)%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3(1)%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3(2)%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs3(3)%></TD>
-
rs3.MoveNext
วนซ้ำ
rs3.ปิด
-
</ตาราง>
สำหรับโปรแกรม ASP rs26.asp ข้างต้น ให้ใช้เบราว์เซอร์บนฝั่งไคลเอ็นต์เพื่อเรียกดูผลลัพธ์การดำเนินการ จอแสดงผลประกอบด้วยบันทึกทั้งหมดในตารางผลิตภัณฑ์ทางด้านขวาของ RIGHT JOIN ตารางบันทึกผลิตภัณฑ์ที่มีรหัสหมายเลข 4 ถูกส่งผ่าน [ Sales Right Join Product On Product.Code = Sales.Code] ข้อมูลในช่องปริมาณของตารางการขายจะพบ สำหรับรหัสอื่น ข้อมูลในช่องปริมาณจะไม่พบ พบ.
คิดออกแล้วเหรอ?