ฉันได้เห็น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 จะไม่ทำสิ่งนี้ อ่านตามที่ปรากฏด้านบน