: มีสองด้านที่แตกต่างกันนี้จะต้องพิจารณา ผลการปฏิบัติงานและการบำรุงรักษา / การอ่าน
การบำรุงรักษา / การอ่าน
ฉันเลือกข้อความค้นหาอื่นเนื่องจากเป็นสิ่งที่ฉันคิดว่าเป็นตัวอย่างที่ดีกว่าหรือแย่กว่าแบบสอบถามต้นฉบับที่คุณโพสต์
อะไรที่ดูดีสำหรับคุณและอ่านง่ายขึ้น?
select
e.LoginID,
DepartmentName = d.Name
from HumanResources.Employee e
inner join HumanResources.EmployeeDepartmentHistory edh
on e.BusinessEntityID = edh.BusinessEntityID
inner join HumanResources.Department d
on edh.DepartmentID = d.DepartmentID
where d.Name = 'Engineering';
หรือ...
select
e.LoginID,
DepartmentName = d.Name
from HumanResources.Employee e,
HumanResources.EmployeeDepartmentHistory edh,
HumanResources.Department d
where e.BusinessEntityID = edh.BusinessEntityID
and edh.DepartmentID = d.DepartmentID
and d.Name = 'Engineering';
สำหรับฉันเป็นการส่วนตัวคนแรกอ่านได้ค่อนข้างมาก คุณเห็นว่าเรากำลังเข้าร่วมตารางด้วยINNER JOIN
ซึ่งหมายความว่าเรากำลังดึงแถวที่ตรงกับส่วนคำสั่งการรวมภายหลัง (เช่น "เข้าร่วมพนักงานกับ EmployeeDepartmentHistory บน BusinessEntityID และรวมแถวเหล่านั้น")
หลังเครื่องหมายจุลภาคไม่มีความหมายอะไรกับฉัน มันทำให้ฉันสงสัยว่าคุณกำลังทำอะไรกับWHERE
ประโยคทั้งหมดเหล่านี้
อดีตอ่านเพิ่มเติมเช่นสมองของฉันคิดว่า ฉันดู SQL ทุกวันทุกวันและเครื่องหมายจุลภาคสำหรับการเข้าร่วม ซึ่งนำฉันไปยังจุดต่อไปของฉัน ...
จริงๆแล้วมีวิธีอื่น ๆ ในการทำให้ข้อความค้นหาประเภทนี้ทำงานเรียกว่า "เข้าร่วม"
พวกเขาทั้งหมดเข้าร่วม แม้แต่เครื่องหมายจุลภาคก็เข้าร่วม ความจริงที่ว่าผู้เขียนไม่ได้เรียกพวกเขาว่าเป็นความหายนะของพวกเขา .... มันไม่ชัดเจน มันควรจะชัดเจน คุณกำลังเข้าร่วมข้อมูลเชิงสัมพันธ์ไม่ว่าคุณจะระบุหรือJOIN
,
ประสิทธิภาพ
นี่จะขึ้นอยู่กับ RDBMS อย่างแน่นอนที่สุด ฉันสามารถพูดในนามของ Microsoft SQL Server เท่านั้น ประสิทธิภาพที่ชาญฉลาดเหล่านี้เทียบเท่า คุณรู้ได้อย่างไร? จับภาพแผนการดำเนินการหลังการขายและดูว่า SQL Server กำลังทำอะไรสำหรับแต่ละข้อความสั่งนี้:
ในภาพด้านบนฉันเน้นว่าฉันใช้ทั้งการสืบค้นข้างต้นแตกต่างกันเฉพาะในตัวอักษรที่ชัดเจนสำหรับการเข้าร่วม ( JOIN
vs ,
) SQL Server ทำสิ่งเดียวกัน
สรุป
อย่าใช้เครื่องหมายจุลภาค ใช้JOIN
ข้อความที่ชัดเจน