ความแตกต่างระหว่างคำพูดเดียวและสองคำพูดใน SQL คืออะไร?
ความแตกต่างระหว่างคำพูดเดียวและสองคำพูดใน SQL คืออะไร?
คำตอบ:
ใช้อัญประกาศเดี่ยวเพื่อระบุจุดเริ่มต้นและจุดสิ้นสุดของสตริงใน SQL โดยทั่วไปอัญประกาศไม่ได้ใช้ใน SQL แต่อาจแตกต่างจากฐานข้อมูลไปยังฐานข้อมูล
ติดกับการใช้คำพูดเดียว
นั่นคือการใช้งานหลัก คุณสามารถใช้เครื่องหมายคำพูดเดี่ยวสำหรับชื่อแทนคอลัมน์ซึ่งคุณต้องการให้ชื่อคอลัมน์ที่คุณอ้างอิงในรหัสแอปพลิเคชันของคุณเป็นชื่ออื่นนอกเหนือจากชื่อคอลัมน์ในฐานข้อมูล ตัวอย่างเช่น: PRODUCT.id
จะสามารถอ่านได้มากขึ้นในฐานะproduct_id
ดังนั้นคุณจึงใช้สิ่งใดสิ่งหนึ่งต่อไปนี้:
SELECT PRODUCT.id AS product_id
SELECT PRODUCT.id 'product_id'
ทำงานได้ทั้งใน Oracle, SQL Server, MySQL ... แต่ฉันรู้ว่าบางคนบอกว่า TOAD IDE ดูเหมือนว่าจะเศร้าใจเมื่อใช้วิธีราคาเดียว
คุณต้องใช้เครื่องหมายคำพูดเดี่ยวเมื่อชื่อแทนคอลัมน์มีอักขระเว้นวรรคเช่นproduct id
แต่ไม่แนะนำให้ใช้ชื่อแทนคอลัมน์ให้มากกว่าหนึ่งคำ
SELECT * FROM USERS 'Users'
ไม่ทำงานใน SQL Server แต่SELECT * FROM USERS "Users"
ทำงานได้
SELECT PRODUCT.id 'product_id'
จะไม่ทำงานใน Oracle เครื่องหมายคำพูดเดียวใช้สำหรับตัวอักษรเท่านั้น พวกเขาไม่สามารถใช้สำหรับตัวระบุใน (มาตรฐาน) SQL (แม้ว่าบาง DBMS เพียงแค่ละเว้นมาตรฐาน SQL เมื่อมันมาถึงตัวระบุที่ยกมา)
กฎง่ายๆที่เราจำได้ว่าควรใช้ในกรณีใด:
ใน MySQL และ MariaDB ที่` (backtick) สัญลักษณ์เป็นเช่นเดียวกับ"สัญลักษณ์. คุณสามารถใช้"เมื่อคุณSQL_MODE
ได้ANSI_QUOTES
เปิดใช้งาน
เครื่องหมายคำพูดเดี่ยวคั่นค่าคงที่สตริงหรือค่าคงที่วันที่ / เวลา
อัญประกาศคู่คั่นตัวระบุเช่นชื่อตารางหรือชื่อคอลัมน์ โดยทั่วไปจำเป็นเฉพาะเมื่อตัวระบุของคุณไม่ตรงกับกฎสำหรับตัวระบุแบบง่าย
ดูสิ่งนี้ด้วย:
คุณสามารถทำให้ MySQL ใช้เครื่องหมายคำพูดคู่ต่อมาตรฐาน ANSI:
SET GLOBAL SQL_MODE=ANSI_QUOTES
คุณสามารถทำให้ Microsoft SQL Server ใช้เครื่องหมายคำพูดคู่ตามมาตรฐาน ANSI:
SET QUOTED_IDENTIFIER ON
ใน ANSI SQL ชื่ออัญประกาศคู่อัญประกาศ (เช่นตาราง) ซึ่งทำให้พวกเขามีอักขระที่ไม่ได้รับอนุญาตหรือเหมือนกับคำสงวน (หลีกเลี่ยงสิ่งนี้จริงๆ)
คำพูดเดียวสำหรับสตริง
อย่างไรก็ตาม MySQL นั้นไม่สนใจมาตรฐาน (เว้นแต่จะมีการเปลี่ยนแปลง SQL_MODE) และอนุญาตให้ใช้กับสตริงได้
ยิ่งไปกว่านั้น Sybase และ Microsoft ยังใช้วงเล็บเหลี่ยมสำหรับการอ้างอิงตัวระบุ
ดังนั้นจึงเป็นเรื่องเฉพาะเจาะจงของผู้ขาย
ฐานข้อมูลอื่น ๆ เช่น Postgres และ IBM เป็นไปตามมาตรฐาน ansi จริง ๆ :)
ฉันใช้ตัวช่วยจำนี้:
มันไม่ถูกต้อง 100% ตามสเป็ค แต่ช่วยในการจำช่วย (มนุษย์)
ความแตกต่างอยู่ในการใช้งานของพวกเขา คำพูดเดียวส่วนใหญ่จะใช้ในการอ้างถึงสตริงใน WHERE, HAVING และในฟังก์ชัน SQL ในตัวเช่น CONCAT, STRPOS, POSITION เป็นต้น
เมื่อคุณต้องการใช้นามแฝงที่มีช่องว่างระหว่างนั้นคุณสามารถใช้อัญประกาศคู่เพื่ออ้างถึงนามแฝงนั้น
ตัวอย่างเช่น
(select account_id,count(*) "count of" from orders group by 1)sub
นี่คือแบบสอบถามย่อยจากตารางคำสั่งซื้อที่มี account_id เป็นคีย์ต่างประเทศที่ฉันรวบรวมเพื่อทราบจำนวนการสั่งซื้อแต่ละบัญชี ที่นี่ฉันได้ตั้งชื่อสุ่มหนึ่งคอลัมน์เป็น "count of" เพื่อประโยชน์
ทีนี้ลองเขียนเคียวรีด้านนอกเพื่อแสดงแถวที่ "จำนวน" มากกว่า 20
select "count of" from
(select account_id,count(*) "count of" from orders group by 1)sub where "count of" >20;
คุณสามารถใช้กรณีเดียวกันกับนิพจน์ตารางทั่วไปได้เช่นกัน