ฉันได้เห็นSQLว่าการใช้งานทั้งใน!=และ<>สำหรับไม่เท่ากัน ไวยากรณ์ที่ต้องการคืออะไรและเพราะเหตุใด
ผมชอบ!=เพราะทำให้ผมนึกถึง<>Visual Basic
NOT (A = B)คำถามที่มีการทำเครื่องหมายเป็นซ้ำเพียงขยายออกไปโดยยังมีตัวเลือกมากขึ้นอย่างใดอย่างหนึ่ง
ฉันได้เห็นSQLว่าการใช้งานทั้งใน!=และ<>สำหรับไม่เท่ากัน ไวยากรณ์ที่ต้องการคืออะไรและเพราะเหตุใด
ผมชอบ!=เพราะทำให้ผมนึกถึง<>Visual Basic
NOT (A = B)คำถามที่มีการทำเครื่องหมายเป็นซ้ำเพียงขยายออกไปโดยยังมีตัวเลือกมากขึ้นอย่างใดอย่างหนึ่ง
คำตอบ:
ในทางเทคนิคมันทำงานเหมือนกันถ้าคุณใช้ SQL Server AKA T-SQL หากคุณกำลังใช้งานในขั้นตอนการจัดเก็บไม่มีเหตุผลด้านประสิทธิภาพในการใช้อีกแบบหนึ่ง จากนั้นจะลงมาตามความชอบส่วนตัว ฉันชอบที่จะใช้ <> เนื่องจากเป็นไปตามมาตรฐาน ANSI
คุณสามารถค้นหาลิงก์ไปยังมาตรฐาน ANSI ต่างๆได้ที่ ...
!=เพราะของการดำรงอยู่ในทุกภาษา C-อิทธิพลฉันได้ใช้และเนื่องจากเอกสารงูใหญ่กล่าวว่า "รูปแบบ<>และ!=มีเทียบเท่าสำหรับความสอดคล้องกับ C, !=เป็นที่ต้องการที่ซึ่ง!=เป็นที่กล่าวถึงด้านล่าง<>นอกจากนี้ยังได้รับการยอมรับ การ<>สะกดคำนี้ถือว่าล้าสมัย " แต่ SQL ไม่ใช่ Python!
<>มากกว่า!=โดยเฉพาะสำหรับการปฏิบัติตามมาตรฐาน ANSI เช่นในชุดฝึกอบรม Microsoft ข่าวสำหรับ 70-461 สอบ "สอบถาม Microsoft SQL Server" พวกเขากล่าวว่า "ในฐานะที่เป็นตัวอย่างเมื่อจะเลือกรูปแบบมาตรฐาน T-SQL สนับสนุนสอง“ไม่ได้ เท่ากับ” ตัวดำเนินการ: <> และ! = อดีตคือมาตรฐานและไม่หลังกรณีนี้ควรเป็นตัวกรอง: ไปหามาตรฐาน! "
ฐานข้อมูลส่วนใหญ่รองรับ!=(ภาษาโปรแกรมที่เป็นที่นิยม) และ<>(ANSI)
ฐานข้อมูลที่รองรับทั้ง!=และ<>:
!=และ<>!=และ<>!=และ<>!=และ<>!=และ<>!=และ<>!=และ<>!=และ<>!=และ<>ฐานข้อมูลที่รองรับตัวดำเนินการมาตรฐาน ANSI โดยเฉพาะ :
NOT (a = b)แทนหรือ(a <> b) (a != b)ภายในเหมือนกันหรือไม่
'<>'มาจากมาตรฐานSQL-92และ'!='เป็นผู้ดำเนินการ T-SQL ที่เป็นกรรมสิทธิ์ มันมีอยู่ในฐานข้อมูลอื่นด้วยเช่นกัน แต่เนื่องจากมันไม่ได้มาตรฐานคุณจึงต้องใช้มันเป็นกรณี ๆ ไป
ในกรณีส่วนใหญ่คุณจะรู้ว่าคุณกำลังเชื่อมต่อกับฐานข้อมูลใดจึงไม่เป็นปัญหา ที่แย่ที่สุดคุณอาจต้องทำการค้นหาและแทนที่ใน SQL ของคุณ
!=ไม่ได้เป็นส่วนหนึ่งของมัน แม้ว่ามันจะเป็นมาตรฐานที่ปฏิบัติได้จริง แต่เราก็ไม่ควรสร้างความสับสนให้กับสิ่งที่และไม่ใช่คุณสมบัติมาตรฐาน
มาตรฐาน ANSI SQL กำหนด<>เป็นตัวดำเนินการ "ไม่เท่ากับ"
http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt ( 5.2 <token> and <separator>)
ไม่มี!=ตัวดำเนินการตามมาตรฐาน ANSI / SQL 92
<> เป็น SQL ที่ถูกต้องตามมาตรฐาน SQL-92
http://msdn.microsoft.com/en-us/library/aa276846(SQL.80).aspx
พวกเขาทั้งที่ถูกต้องและที่เหมือนกันด้วยความเคารพในSQL Server ,
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/not-equal-to-transact-sql-exclamation
ดูเหมือนว่า Microsoft เองชอบที่<>จะ!=เป็นหลักฐานในข้อ จำกัด ตารางของพวกเขา ผมเองชอบใช้!=เพราะผมอย่างชัดเจนอ่านว่าเป็น "ไม่เท่ากัน" แต่ถ้าคุณใส่[field1 != field2]และบันทึกเป็น constrait [field1 <> field2]ที่ครั้งต่อไปที่คุณสอบถามมันจะแสดงเป็น <>นี้บอกกับผมว่าวิธีที่ถูกต้องที่จะทำคือ
!=แม้จะไม่ใช่ ANSI แต่จิตวิญญาณที่แท้จริงของ SQL ก็เป็นภาษาที่อ่านได้มากกว่า มันกรีดร้องไม่เท่ากัน
<>บอกฉันว่า (น้อยกว่ามาก) ซึ่งแปลกมาก ฉันรู้ว่าความตั้งใจคือว่ามันน้อยกว่าหรือมากกว่านั้นไม่เท่ากัน แต่นั่นเป็นวิธีที่ซับซ้อนมากในการพูดบางสิ่งที่เรียบง่ายจริงๆ
ฉันเพิ่งจะต้องใช้แบบสอบถาม SQL ยาว ๆ และวางลงในไฟล์ XML ด้วยความรักด้วยเหตุผลโง่ ๆ มากมายที่ฉันจะไม่เข้าไป
พอเพียงที่จะบอกว่า XML นั้นไม่ได้ลดลง<>เลยและฉันต้องเปลี่ยนพวกเขาเป็น!=และตรวจสอบตัวเองก่อนที่ฉันจะทำลายตัวเอง
คุณสามารถใช้สิ่งที่คุณต้องการใน T-SQL เอกสารกล่าวว่าพวกเขาทั้งสองทำงานในลักษณะเดียวกัน ฉันชอบ!=เพราะมันอ่าน "ไม่เท่ากัน" เพื่อ (C / C ++ / C # based) ใจของฉัน <>แต่ผู้เชี่ยวชาญด้านฐานข้อมูลดูเหมือนจะชอบ
ฉันเข้าใจว่าไวยากรณ์ C !=อยู่ใน SQL Server เนื่องจาก Unix Heritage (ย้อนกลับไปใน Sybase SQL Server วันก่อน Microsoft SQL Server 6.5)
อีกทางเลือกหนึ่งคือการใช้ตัวดำเนินการ NULLIF นอกเหนือจาก<>หรือ!=ซึ่งคืนค่า NULL ถ้าอาร์กิวเมนต์สองตัวมีค่าเท่ากับNULLIF ใน Microsoft Docsเอกสาร ดังนั้นฉันเชื่อว่าคำสั่ง WHERE สามารถแก้ไขได้<>และ!=ดังนี้
NULLIF(arg1, arg2) IS NOT NULL
อย่างที่ฉันพบว่าการใช้งาน<>และ!=ไม่สามารถทำงานได้ในบางกรณี ดังนั้นการใช้นิพจน์ด้านบนจึงไม่จำเป็น
<>เท่ากับการใช้ดัชนีในทุกกรณีหรือไม่ นอกจากนี้ความสามารถในการอ่านนั้นแย่ยิ่งกว่าเดิมมาก ...
ฉันต้องการใช้!=แทน<>เพราะบางครั้งฉันใช้<s></s>ไวยากรณ์เพื่อเขียนคำสั่ง SQL การใช้!=สะดวกกว่าเพื่อหลีกเลี่ยงข้อผิดพลาดทางไวยากรณ์ในกรณีนี้
พวกเขาทั้งสองได้รับการยอมรับใน T-SQL อย่างไรก็ตามดูเหมือนว่าการใช้<>งานจะเร็วกว่า!=มาก ฉันเพิ่งเรียกใช้แบบสอบถามที่ซับซ้อนที่ใช้!=และใช้เวลาประมาณ 16 วินาทีโดยเฉลี่ยในการทำงาน ฉันเปลี่ยนสิ่งเหล่านี้เป็น<>และแบบสอบถามตอนนี้ใช้เวลาโดยเฉลี่ยประมาณ 4 วินาทีในการเรียกใช้ นั่นเป็นการปรับปรุงครั้งใหญ่!
แม้ว่าพวกเขาจะทำงานในลักษณะเดียวกัน!=หมายความว่า "ไม่เท่ากับ" ในขณะที่<>หมายถึงมากกว่าและน้อยกว่าค่าที่เก็บไว้
พิจารณา>=หรือ<=และสิ่งนี้จะสมเหตุสมผลเมื่อแฟคตอริ่งในดัชนีของคุณไปยังคิวรี ... <>จะทำงานได้เร็วขึ้นในบางกรณี (ด้วยดัชนีที่ถูกต้อง) แต่ในบางกรณี (ดัชนีฟรี) พวกเขาจะทำงานเหมือนเดิม
นอกจากนี้ยังขึ้นอยู่กับวิธีการที่ระบบฐานข้อมูลของคุณอ่านค่าและ!= <>ผู้ให้บริการฐานข้อมูลอาจทำการลัดและทำให้มันทำงานเหมือนกันดังนั้นจึงไม่มีผลประโยชน์ใด ๆ ทั้งทาง PostgreSQL และ SQL Server จะไม่ทำสิ่งนี้ อ่านตามที่ปรากฏด้านบน