SAP HANA Union & Union All: Operaตัวอย่างสำหรับ

⚡ สรุปอย่างชาญฉลาด

SAP HANA OperaTor ทำหน้าที่คำนวณ เปรียบเทียบค่า หรือกำหนดค่าภายใน SQL โดยมีตัวดำเนินการอยู่ 6 ประเภท ได้แก่ ตัวดำเนินการเอกภาคและทวิภาค ตัวดำเนินการทางคณิตศาสตร์ ตัวดำเนินการสตริง ตัวดำเนินการเปรียบเทียบ ตัวดำเนินการตรรกะ และตัวดำเนินการเซต เช่น UNION และ INTERSECT

  • ➕ เอกภาคและทวิภาค: ตัวดำเนินการเอกภาครับตัวถูกดำเนินการหนึ่งตัว และตัวดำเนินการทวิภาครับตัวถูกดำเนินการสองตัว
  • 🧮 เลขคณิต: การบวก, ย่อยtracการคูณ การหาร และการดำเนินการทางคณิตศาสตร์อื่นๆ จะใช้ตัวเลขเป็นตัวดำเนินการ
  • 🔗 การต่อสตริง: เครื่องหมายขีดแนวตั้งสองเส้นใช้เชื่อมสตริง นิพจน์ หรือค่าคงที่เข้าด้วยกันเป็นค่าเดียว
  • 🇧🇷 การเปรียบเทียบ: ค่าเท่ากับ มากกว่า น้อยกว่า และการผสมผสานของค่าเหล่านี้ จะส่งคืนค่าความจริงสำหรับการกรองข้อมูล
  • 🔀 ตรรกะ: AND, OR และ NOT ใช้สำหรับรวมเงื่อนไขต่างๆ ภายในคำสั่ง WHERE
  • 🧩 ชุด Operaทอร์: UNION จะลบข้อมูลที่ซ้ำกัน UNION ALL จะเก็บข้อมูลที่ซ้ำกัน INTERSECT จะคืนค่าแถวที่เหมือนกัน และ EXCEPT subtracทีเอส
  • 📊 ตัวอย่างการทำงาน: ตารางสองตารางที่แสดงค่าร่วมกันจะแสดงให้เห็นถึงผลลัพธ์ที่แตกต่างกันของตัวดำเนินการเซตแต่ละตัว

SAP ผู้ให้บริการ HANA UNION และ UNION ALL

SAP HANA OperaTor สามารถใช้ในการคำนวณ เปรียบเทียบค่า หรือกำหนดค่าได้

SAP HANA Operaโปร

  • เอกนารีและไบนารี OperaTor
  • คณิตศาสตร์ OperaTor
  • เชือก Operaโปร
  • การเปรียบเทียบ OperaTor
  • ตรรกะ OperaTor
  • ชุด OperaTor

ตัวดำเนินการทุกตัวจะส่งคืนค่า ซึ่งเป็นเหตุผลว่าทำไมจึงสามารถซ้อนกันได้ ลำดับการประเมินผลจะถูกกำหนดโดยลำดับความสำคัญ ซึ่งจะอธิบายหลังจากกลุ่มตัวดำเนินการแต่ละกลุ่ม

เอกนารีและไบนารี OperaTor

OperaTor Operaการ Descriptไอออน
ยูนารี ตัวดำเนินการยูนารีใช้กับตัวดำเนินการหนึ่งตัว ตัวดำเนินการบวกเอกภาค (+) ตัวดำเนินการปฏิเสธเอกภาค (-) การปฏิเสธเชิงตรรกะ (NOT)
เลขฐานสอง ไบนารี Operator ใช้กับตัวดำเนินการสองตัว ตัวดำเนินการคูณ ( *, / ) ตัวดำเนินการบวก ( +,- ) ตัวดำเนินการเปรียบเทียบ ( =,!=,<,>,<=,>=) ตัวดำเนินการตรรกะ ( AND, OR )

คณิตศาสตร์ OperaTor

  • บวก (+)
  • ตtraction (-)
  • การคูณ ( * )
  • แผนก ( / )

เชือก OperaTor

สตริง Operator คือตัวดำเนินการเรียงต่อกันซึ่งรวมรายการสองรายการ เช่น สตริง นิพจน์ หรือค่าคงที่เข้าเป็นหนึ่งเดียว

แถบแนวตั้งสองอัน “||” ใช้เป็นตัวดำเนินการเรียงต่อกัน

การเปรียบเทียบ OperaTor

ตัวดำเนินการเปรียบเทียบใช้ในการเปรียบเทียบตัวดำเนินการสองตัว ด้านล่างนี้คือรายการตัวดำเนินการเปรียบเทียบ Operaทอร์-

  • เท่ากับ ( = )
  • มากกว่า ( > )
  • Less กว่า ( < )
  • มากกว่าหรือเท่ากับ ( >= )
  • Less มากกว่าหรือเท่ากับ ( <= )
  • ไม่เท่ากัน (!= , <> )

ตรรกะ OperaTor

ตัวดำเนินการเชิงตรรกะใช้ในเกณฑ์การค้นหา

เช่น WHERE เงื่อนไข 1 และ / OR / NOT เงื่อนไข 2

ด้านล่างนี้เป็นรายการตัวดำเนินการเชิงตรรกะ –

  • และ – (เช่น WHERE condition1 AND condition2)
    ถ้าทั้งเงื่อนไข 1 และเงื่อนไข 2 เป็นจริง ดังนั้นเงื่อนไขการรวมจะเป็นจริง มิเช่นนั้นจะเป็นเท็จ
  • หรือ – (เช่น WHERE condition1 OR condition2)
    หากเงื่อนไข 1 หรือ เงื่อนไข 2 เป็นจริง ให้รวมเงื่อนไขเป็นจริงหรือเท็จ หากเงื่อนไขทั้งสองเป็นเท็จ
  • ไม่ใช่ – (เช่น เงื่อนไข WHERE NOT)
    NOT เงื่อนไขเป็นจริง ถ้าเงื่อนไขเป็นเท็จ

ชุด Operaโปร

  • UNION – คำสั่งที่ใช้รวมคำสั่ง SELECT หรือแบบสอบถามสองคำสั่งขึ้นไปเข้าด้วยกันโดยไม่ซ้ำซ้อน
  • UNION ALL – คำสั่งนี้ใช้สำหรับรวมคำสั่ง SELECT หรือแบบสอบถามหลายรายการเข้าด้วยกัน รวมถึงแถวข้อมูลที่ซ้ำกันทั้งหมดด้วย
  • INTERSECT – รวมคำสั่ง SELECT หรือแบบสอบถามสองคำสั่งขึ้นไปเข้าด้วยกัน และส่งคืนแถวที่เหมือนกันทั้งหมด
  • ยกเว้น – นำผลลัพธ์จากคำสั่งค้นหาแรกมาใช้ และลบแถวที่เลือกโดยคำสั่งค้นหาที่สองออก

เช่น ฉันมีสองตาราง (table1, table2) ซึ่งบางค่าเป็นเรื่องธรรมดา

ชุด Operaโทรเข้า SAP HANA

เราใช้ตัวดำเนินการ Set (Union, Union ALL, Intersect, except) สำหรับตารางทั้งสองนี้ SQL ดังต่อไปนี้ -

สร้าง Table1- สคริปต์ SQL

CREATE COLUMN TABLE DHK_SCHEMA.TABLE1
( ELEMENT CHAR(1),
  PRIMARY KEY (ELEMENT)
);
INSERT INTO DHK_SCHEMA.TABLE1 VALUES ('P');
INSERT INTO DHK_SCHEMA.TABLE1 VALUES ('Q');
INSERT INTO DHK_SCHEMA.TABLE1 VALUES ('R');
INSERT INTO DHK_SCHEMA.TABLE1 VALUES ('S');
INSERT INTO DHK_SCHEMA.TABLE1 VALUES ('T');

สร้าง Table2- สคริปต์ SQL

CREATE COLUMN TABLE DHK_SCHEMA.TABLE2
( ELEMENT CHAR(1),
  PRIMARY KEY (ELEMENT)
);
INSERT INTO DHK_SCHEMA.TABLE2 VALUES ('S');
INSERT INTO DHK_SCHEMA.TABLE2 VALUES ('T');
INSERT INTO DHK_SCHEMA.TABLE2 VALUES ('U');
INSERT INTO DHK_SCHEMA.TABLE2 VALUES ('V');
INSERT INTO DHK_SCHEMA.TABLE2 VALUES ('W');

หมายเหตุ: ที่นี่ “DHK_SCHEMA” คือชื่อสคีมา ผู้ใช้สามารถเปลี่ยนชื่อสคีมาได้ SQL ตาม

ชุด Operaตัวอย่างของ Tor มีดังนี้

OperaTor แบบสอบถาม SQL เอาท์พุต การใช้งาน
ยูเนี่ยน SELECT *
จาก
(
SELECT ELEMENT
จาก DHK_SCHEMA.TABLE1
ยูเนี่ยน
SELECT ELEMENT
จาก DHK_SCHEMA.TABLE2
)
สั่งโดย องค์ประกอบ;

เอาต์พุตตัวดำเนินการชุด UNION

รวมผลลัพธ์ของแบบสอบถามตั้งแต่สองรายการขึ้นไปโดยไม่ซ้ำกัน
ยูเนี่ยนทั้งหมด SELECT *
จาก
(
SELECT ELEMENT
จาก DHK_SCHEMA.TABLE1
ยูเนี่ยนทั้งหมด
SELECT ELEMENT
จาก DHK_SCHEMA.TABLE2
)
สั่งโดย องค์ประกอบ;

UNION ALL ตั้งค่าเอาต์พุตตัวดำเนินการ

รวมผลลัพธ์ของแบบสอบถามตั้งแต่สองรายการขึ้นไปเข้ากับรายการที่ซ้ำกันทั้งหมด
ตัด SELECT *
จาก
(
SELECT ELEMENT
จาก DHK_SCHEMA.TABLE1
ตัด
SELECT ELEMENT
จาก DHK_SCHEMA.TABLE2
)
สั่งโดย องค์ประกอบ;

INTERSECT ชุดผลลัพธ์ตัวดำเนินการ

รวมผลลัพธ์ของแบบสอบถามตั้งแต่สองรายการขึ้นไปเข้ากับแถวทั่วไปทั้งหมด
ยกเว้น SELECT *
จาก
(
SELECT ELEMENT
จาก DHK_SCHEMA.TABLE1
ยกเว้น
SELECT ELEMENT
จาก DHK_SCHEMA.TABLE2
)
สั่งโดย องค์ประกอบ;

ยกเว้นผลลัพธ์ของตัวดำเนินการตั้งค่า

รับเอาต์พุตจากการสืบค้นครั้งแรกและลบแถวที่เลือกโดยแบบสอบถามที่สอง

ชุด Operaกฎและข้อกำหนดของ tor

ตัวดำเนินการเซตดูเรียบง่าย แต่ปฏิเสธการค้นหาได้ง่าย เนื่องจากเปรียบเทียบชุดผลลัพธ์ทั้งหมดแทนที่จะเปรียบเทียบค่าแต่ละค่า มีกฎสี่ข้อที่ควบคุมตัวดำเนินการเหล่านี้

  1. จำนวนคอลัมน์ต้องตรงกัน คำสั่ง SELECT ทั้งสองคำสั่งต้องส่งคืนจำนวนคอลัมน์ที่เท่ากัน หากไม่ตรงกัน ระบบจะล้มเหลวทันที และข้อความแสดงข้อผิดพลาดจะระบุตำแหน่งแทนที่จะเป็นคอลัมน์
  2. ชนิดข้อมูลต้องเข้ากันได้ คอลัมน์แรกของแบบสอบถามแรกจะถูกเปรียบเทียบกับคอลัมน์แรกของแบบสอบถามที่สอง และทำเช่นนี้ต่อไปเรื่อยๆ โดยพิจารณาจากตำแหน่ง ไม่ใช่ชื่อ ประเภทตัวเลขที่เข้ากันได้จะถูกแปลงโดยอัตโนมัติ ส่วนคอลัมน์ที่เป็นอักขระที่ใช้กับวันที่นั้นจะไม่ถูกแปลง
  3. ชื่อคอลัมน์มาจากคำสั่งค้นหาแรก ไม่ว่าคำสั่งที่สองจะเรียกคอลัมน์ใด ระบบก็จะไม่สนใจในผลลัพธ์ ซึ่งทำให้ผู้ที่อ่านผลลัพธ์ของคำสั่ง UNION เป็นครั้งแรกประหลาดใจ
  4. คำสั่ง ORDER BY มีผลกับผลลัพธ์ทั้งหมด ควรวางไว้ตอนท้ายสุด หลังคำสั่ง SELECT สุดท้าย และนี่คือเหตุผลที่ตัวอย่างข้างต้นใช้คำสั่ง SELECT ครอบคำสั่ง union ไว้ด้านนอก

ความแตกต่างด้านประสิทธิภาพระหว่าง UNION และ UNION ALL นั้นควรค่าแก่การสังเกต UNION ต้องเรียงลำดับหรือแฮชผลลัพธ์ที่รวมกันเพื่อลบข้อมูลซ้ำ ในขณะที่ UNION ALL เพียงแค่เพิ่มข้อมูลเข้าไป ในกรณีที่ข้อมูลซ้ำเป็นไปไม่ได้หรือยอมรับได้ UNION ALL จะเร็วกว่าอย่างเห็นได้ชัดในตารางขนาดใหญ่ คำจำกัดความของคอลัมน์ที่ใช้ในตารางเหล่านี้จะกล่าวถึงในหัวข้อถัดไป SAP ประเภทข้อมูล HANA.

Operaลำดับความสำคัญใน SAP ฮาน่า SQL

เมื่อมีตัวดำเนินการหลายตัวปรากฏในนิพจน์เดียวกัน ลำดับความสำคัญจะเป็นตัวตัดสินว่าตัวดำเนินการใดจะถูกประเมินก่อน หากทำผิดพลาดในส่วนนี้ จะทำให้คำสั่งค้นหาทำงานได้อย่างสมบูรณ์ แต่ส่งคืนแถวที่ไม่ถูกต้อง ซึ่งอันตรายกว่าข้อผิดพลาดทางไวยากรณ์มาก

สั่งซื้อ โอเปอร์เตอร์-ผู้ประกอบการ Category
1 () วงเล็บ จะต้องได้รับการประเมินก่อนเสมอ
2 + – (ตัวดำเนินการเดี่ยว) เครื่องหมายบวกและเครื่องหมายลบเอกภาค
3 * / การคูณและการหาร
4 + – || การบวก, ย่อยtracการเชื่อมต่อ, การต่อกัน
5 = != < > <= >= การเปรียบเทียบ
6 ไม่ การปฏิเสธเชิงตรรกะ
7 AND การเชื่อมโยงเชิงตรรกะ
8 OR การแยกตรรกะ

กับดักแบบคลาสสิกอยู่ที่แถวที่ 7 และ 8 เนื่องจาก AND ผูกมัดแน่นกว่า OR เงื่อนไขจึงเป็นเช่นนั้น โดยที่ภูมิภาค = 'ตะวันออก' หรือ ภูมิภาค = 'ตะวันตก' และสถานะ = 'เปิด' อ่านว่า ทิศตะวันออก หรือไม่ก็ทิศตะวันตกที่เปิดอยู่ทุกแถวทางทิศตะวันออกจะถูกส่งคืนโดยไม่คำนึงถึงสถานะ การเพิ่มวงเล็บครอบการทดสอบภูมิภาคทั้งสองจะช่วยแก้ไขปัญหานี้ได้

💡 เคล็ดลับ: ใส่เครื่องหมายวงเล็บรอบเงื่อนไข AND และ OR ที่ผสมกันทุกเงื่อนไข แม้ว่าลำดับความสำคัญจะให้ผลลัพธ์ที่ต้องการอยู่แล้วก็ตาม การทำเช่นนี้จะทำให้แบบสอบถามมีความชัดเจนในตัวเองและยังคงใช้งานได้แม้จะมีการแก้ไขในภายหลังโดยนักพัฒนาคนอื่น

ไวยากรณ์คำสั่งทั่วไปที่ใช้ในชีวิตประจำวันนั้นครอบคลุมอยู่ใน... SAP ฮาน่า SQL บทช่วยสอน และแพลตฟอร์มที่กว้างขึ้นใน SAP บทช่วยสอน HANA ชุด.

คำถามที่พบบ่อย

UNION ALL จะรวมผลลัพธ์เข้าด้วยกันเท่านั้น ในขณะที่ UNION ทั่วไปจะต้องลบข้อมูลซ้ำออกด้วย ควรใช้ UNION ALL เมื่อไม่สามารถหรือไม่ยอมรับข้อมูลซ้ำในผลลัพธ์ได้

ใช่ SAP HANA แปลงตัวเลขโดยอัตโนมัติ Wrapping การใช้ TO_VARCHAR ยังคงเป็นวิธีปฏิบัติที่ดีกว่า เพราะรูปแบบจะอยู่ภายใต้การควบคุมของคุณ แทนที่จะใช้ค่าเริ่มต้นของเซสชัน

ใช่ AI จะแปลงเงื่อนไขแบบผสมระหว่าง AND และ OR ให้เป็นภาษาที่เข้าใจง่าย ซึ่งจะทำให้เห็นได้ทันทีว่ากลุ่มนั้นเป็นอย่างไรping ตรงกับเจตนา จากนั้นจึงเสนอวงเล็บเพื่อแก้ไขให้ถูกต้อง

ใช่แล้ว คำสั่ง INTERSECT และ EXCEPT มักถูกเขียนใหม่เป็น inner join หรือ NOT EXISTS ซึ่งอาจให้ประสิทธิภาพที่ดีกว่า เปรียบเทียบแผนการทำงานก่อนที่จะนำการเขียนใหม่ไปใช้

การเปรียบเทียบค่าใดๆ กับ NULL จะส่งคืนค่าที่ไม่ทราบ แทนที่จะเป็นจริงหรือเท็จ ดังนั้นแถวนั้นจึงถูกกรองออกไป ควรใช้ IS NULL และ IS NOT NULL แทนตัวดำเนินการเท่ากับ

สรุปโพสต์นี้ด้วย: