เมื่อเขียนคำสั่ง sql มันมักจะเกิดขึ้นสถานการณ์เมื่อดึงข้อมูลจำเป็นต้องเปรียบเทียบค่าของหลายคอลัมน์และแสดงค่าที่มีข้อมูล (ไม่ว่างเปล่า) นิพจน์ Coalesce แก้ปัญหานี้ได้อย่างสมบูรณ์แบบ ในบทความนี้ คุณจะพบคำอธิบายที่สมบูรณ์ของนิพจน์ Coalesce sql คำอธิบายคุณลักษณะการใช้งาน ตลอดจนตัวอย่าง
การแสดงค่าที่ไม่ว่างเปล่าด้วย Coalesce ลักษณะเฉพาะ
พิจารณาคุณสมบัติการใช้งาน SQL Coalesce:
- อนุญาตให้ระบุอาร์กิวเมนต์จำนวนเท่าใดก็ได้ (ต่างจาก Isnull / Nvl / Nvl2 ซึ่งมีจำนวนอาร์กิวเมนต์ที่จำกัด)
- สามารถใช้แบบสอบถามย่อยเป็นอาร์กิวเมนต์
- ส่งกลับผลลัพธ์เท่ากับ คนแรก ค่าที่ไม่ใช่ค่า Null หรือค่า Null หากไม่พบค่าที่ไม่ใช่ค่า Null
- สามารถใช้ SQL Coalesce ในส่วน Select เพื่อเลือกค่าที่ไม่ว่างเปล่า และยังสามารถใช้ใน Where to ชี้แจงว่าไม่อนุญาตให้ใช้ชุดของคอลัมน์ที่มีค่าว่าง (/ อนุญาต)
- นิพจน์นี้เหมือนกับการใช้นิพจน์กรณีซึ่งตรวจสอบแต่ละอาร์กิวเมนต์ตามลำดับสำหรับเงื่อนไข เมื่ออาร์กิวเมนต์1 ไม่เป็นโมฆะ อาร์กิวเมนต์1 โดยพื้นฐานแล้ว Coalesce เป็นช็อตคัทเพื่อความสะดวกในการใช้งาน และใน DBMS หลายๆ ตัว ตัวเพิ่มประสิทธิภาพการสืบค้นจะเขียนนิพจน์ Coalesce ใหม่เป็น Case
- ฟังก์ชัน sql Coalesce พบได้ในระบบการจัดการฐานข้อมูลเชิงสัมพันธ์ชั้นนำทั้งหมด
รวมไวยากรณ์
ใครที่เคยใช้Coalesceที่การเขียน sql-queries รู้ว่าไวยากรณ์ของนิพจน์นี้ง่ายมาก การระบุอาร์กิวเมนต์ที่ทดสอบสำหรับ Null ในวงเล็บก็เพียงพอแล้ว โดยคั่นด้วยเครื่องหมายจุลภาค หากเราคิดว่าอาร์กิวเมนต์ชื่อ arg1, arg2, ... argN ไวยากรณ์สำหรับ Coalesce จะเป็นดังนี้:
รวมตัวกัน (arg1, arg2, ... argN)
มาเตรียมตารางหลายตารางเพื่อศึกษากลไกของนิพจน์นี้
เตรียมโต๊ะ
เพื่อให้เข้าใจคำอธิบายของ Coalesce sql มากขึ้น ให้สร้างตารางสองตารางในฐานข้อมูลที่มีข้อมูลเกี่ยวกับวัตถุอสังหาริมทรัพย์
ให้ตารางแรก พื้นที่ ประกอบด้วยชื่อของอ็อบเจ็กต์อสังหาริมทรัพย์และพื้นที่ของอ็อบเจ็กต์ สามารถระบุพื้นที่ได้ (area_yt) หรือประกาศ (area_decl)
id | object_name | area_yt | area_decl |
1 | อาคาร 1 | 116,2 | 114 |
2 | อยู่ระหว่างการก่อสร้าง 1 | 568 | |
3 | ห้อง 1 | 64,7 | |
4 | ห้อง2 | 34,2 | |
5 | ที่ดิน 1 | 112 | 111,6 |
6 | อาคาร 1 | ||
7 | ห้อง 3 | 27,9 | |
8 | อาคาร 2 | 37,2 | 36,4 |
9 | อาคาร 2 |
ตาราง Basic_characteristic ที่สอง letมีข้อมูลเกี่ยวกับคุณสมบัติหลักของวัตถุอสังหาริมทรัพย์ - ส่วนขยาย, ความลึก, พื้นที่, ขอบเขต, ความสูง
id | object_name | การขยาย | ความลึก | พื้นที่ | ขอบเขต | ส่วนสูง |
1 | อาคาร 1 | 892,4 | 30 | |||
2 | อาคาร 2 | 48 | ||||
3 | อาคาร 1 | 164,7 | ||||
4 | ที่ดิน 1 | |||||
5 | ห้อง 1 | 23,6 | ||||
6 | ห้อง2 | 34,7 | ||||
7 | ห้อง 3 | 19,8 |
เราดูที่ไวยากรณ์ของ Coalesce sql คำอธิบาย คุณลักษณะการใช้งาน และไปที่ตัวอย่างโดยตรง
ตัวอย่างการใช้
ไวยากรณ์สำหรับนิพจน์ Coalesce นั้นง่ายมากอย่างไรก็ตาม สิ่งสำคัญที่ต้องจำไว้ว่าคำสั่งจะคืนค่า FIRST ที่ไม่ว่างเปล่าที่พบในรายการอาร์กิวเมนต์ ข้อสังเกตนี้มีความสำคัญมาก ดังนั้น อาร์กิวเมนต์ในนิพจน์ต้องเรียงลำดับตามความสำคัญ วิธีที่ง่ายที่สุดในการทำความเข้าใจหลักการคือจากตารางพื้นที่ สร้างแบบสอบถามที่เลือกชื่อของคุณสมบัติ ตลอดจนค่าของพื้นที่:
เลือก Area.id, Area.object_name, รวมกัน (Area.area_yt, Area.area_decl) จากพื้นที่ |
และรับผลลัพธ์:
id | object_name | รวมตัวกัน |
1 | อาคาร 1 | 116,2 |
2 | อยู่ระหว่างการก่อสร้าง 1 | 568 |
3 | ห้อง 1 | 64,7 |
4 | ห้อง2 | 34,2 |
5 | ที่ดิน 1 | 112 |
6 | อาคาร 1 | |
7 | ห้อง 3 | 27,9 |
8 | อาคาร 2 | 37,2 |
9 | อาคาร 2 |
สำหรับวัตถุ "อาคาร 1", "ที่ดินแปลงที่ 1" และ"อาคาร 2" ทั้งสองค่าของพื้นที่เต็ม แต่ลำดับความสำคัญคือพื้นที่ที่ระบุเนื่องจากเราระบุเป็นอันดับแรกในรายการอาร์กิวเมนต์ นิพจน์ Coalesce พบค่าที่ไม่ว่างเปล่าค่าแรกและทิ้งค่านั้น หยุดการสแกนอาร์กิวเมนต์เพิ่มเติม การสร้างแบบสอบถามนี้ถูกต้อง เนื่องจากพื้นที่ที่ระบุมีความชัดเจนมากกว่าพื้นที่ที่ประกาศไว้ หากเราระบุพื้นที่ที่ประกาศเป็นอาร์กิวเมนต์แรก เมื่อกรอกข้อมูลในฟิลด์นี้ของตารางแล้ว พื้นที่นั้นจะอยู่ในลำดับความสำคัญ
นอกจากจะใช้ใน Select แล้ว บ่อยมากนิพจน์ Coalesce ถูกนำไปใช้กับส่วนคำสั่ง Where ช่วยให้คุณสามารถตัดออกจากผลลัพธ์บรรทัดเหล่านั้นซึ่งค่าของรายการเขตข้อมูลว่างเปล่า สถานการณ์นี้เกิดขึ้นทุกที่ ตัวอย่างเช่น ที่องค์กร เมื่อลงทะเบียนพนักงานใหม่ จะมีการป้อนข้อมูลพื้นฐานเกี่ยวกับเขาลงในฐานข้อมูลเท่านั้น และการกรอกข้อมูลโดยละเอียดจะเหลือ "ไว้ใช้ภายหลัง" ค่อยๆ "ช่องว่าง" เกิดขึ้น - ก่อนเช็คหรือเมื่อส่งพนักงานในวันหยุด / เดินทางไปทำธุรกิจ / ลาป่วย
ให้เราเลือกจากตารางที่มีคุณสมบัติหลักของวัตถุอสังหาริมทรัพย์ที่ไม่มีค่าลักษณะเฉพาะ:
SELECT id, object_name จาก Basic_characteristic โดยที่การรวม (ส่วนขยาย, ความลึก, พื้นที่, ขอบเขต, ความสูง) เป็นโมฆะ |
สำหรับแบบสอบถามนี้มีการจับคู่หนึ่งรายการในตาราง - ออบเจ็กต์ "ที่ดิน 1" ซึ่งฟิลด์ทั้งหมดที่มีคุณสมบัติจะว่างเปล่า:
id | object_name |
4 | ที่ดิน 1 |
เราหวังว่าคำอธิบาย Coalesce sql โดยละเอียดของเราจะช่วยให้คุณเข้าใจคุณลักษณะทั้งหมดของการใช้นิพจน์นี้ รวมทั้งจัดการกับความแตกต่างที่สำคัญ