PostgreSQL อาร์เรย์: ฟังก์ชัน ประเภท ตัวอย่าง

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

PostgreSQL คลาส Array ช่วยให้คุณกำหนดคอลัมน์ในตารางเป็นอาร์เรย์ของชนิดข้อมูลใดก็ได้ที่ถูกต้อง เนื้อหาครอบคลุมการสร้างคอลัมน์อาร์เรย์ การแทรกค่าด้วยตัวสร้าง ARRAY หรือวงเล็บปีกกา การค้นหาและแก้ไของค์ประกอบ และการค้นหาด้วย ANY()

  • 📦 ความหมาย: ใด PostgreSQL ชนิดข้อมูลมีชนิดอาร์เรย์ที่ตรงกัน เช่น integer[]
  • 🧱 สร้างและแทรก: ใช้คอลัมน์ TEXT[] และตัวสร้าง ARRAY หรือวงเล็บปีกกา
  • 🔎 ค้นหา: เข้าถึงองค์ประกอบด้วยดัชนี โดยองค์ประกอบแรกจะอยู่ที่ตำแหน่งที่ 1
  • ✏️ แก้ไขและค้นหา: อัปเดตองค์ประกอบเดี่ยวและค่าการค้นหาด้วย ANY()
  • ➗ ขยาย: ฟังก์ชัน unnest() จะแยกค่าในอาร์เรย์ออกเป็นแถวแยกกัน

PostgreSQL แถว

ความหมายของ PostgreSQL อาร์เรย์?

In PostgreSQLเราสามารถกำหนดคอลัมน์เป็นอาร์เรย์ของชนิดข้อมูลที่ถูกต้องได้ ชนิดข้อมูลนั้นอาจเป็นชนิดข้อมูลพื้นฐาน ชนิดข้อมูลที่ผู้ใช้กำหนด หรือชนิดข้อมูลแบบแจงนับ นอกจากนี้ อาร์เรย์ยังมีบทบาทสำคัญในด้านต่างๆ อีกด้วย PostgreSQL.

ทุกที่สอดคล้องกัน PostgreSQL ชนิดข้อมูลจะมีชนิดข้อมูลอาร์เรย์ที่เกี่ยวข้อง ตัวอย่างเช่น ชนิดข้อมูลจำนวนเต็มจะมีชนิดข้อมูลอาร์เรย์ integer[] ชนิดข้อมูลอักขระจะมีชนิดข้อมูลอาร์เรย์ character[] เป็นต้น

การสร้าง PostgreSQL อาร์เรย์

ในตัวอย่างต่อไปนี้ เราจะสร้างตารางชื่อพนักงานโดยกำหนดคอลัมน์ผู้ติดต่อเป็นอาร์เรย์ข้อความ:

CREATE TABLE Employees (
   id int PRIMARY KEY,
   name VARCHAR (100),
   contact TEXT []
);

คำสั่งควรรันได้สำเร็จ

การสร้าง PostgreSQL อาร์เรย์

แทรก PostgreSQL ค่าอาร์เรย์

ให้เราตอนนี้ แทรก ค่าลงในตารางด้านบน:

INSERT INTO Employees
VALUES
   (
      1,
      'Alice John',
      ARRAY [ '(408)-743-9045',
      '(408)-567-7834' ]
   );

การแทรกควรทำงานสำเร็จ

แทรก PostgreSQL ค่าอาร์เรย์

ค่าในคอลัมน์ที่สาม ซึ่งก็คือข้อมูลติดต่อ ได้ถูกแทรกเข้าไปในรูปแบบอาร์เรย์แล้ว โดยใช้ตัวสร้าง ARRAY ในตัวอย่างนี้ เราได้ใส่ค่าเหล่านั้นไว้ในวงเล็บเหลี่ยม [] เรามีข้อมูลติดต่อสองรายการสำหรับพนักงานชื่อ Alice John

ยังคงเป็นไปได้สำหรับเราที่จะใช้วงเล็บปีกกา {} ดังที่แสดงด้านล่าง:

INSERT INTO Employees
VALUES
   (
    2,
      'Kate Joel',
      '{"(408)-783-5731"}'
   ),
   (
      3,
      'James Bush',
      '{"(408)-745-8965","(408)-567-78234"}'
   );

คำสั่งควรรันได้สำเร็จ

แทรก PostgreSQL ค่าอาร์เรย์

คำสั่งด้านบนจะแทรกสองแถวลงในตารางพนักงาน เมื่อใช้เครื่องหมายวงเล็บปีกกา อาร์เรย์จะถูกห่อด้วยเครื่องหมายคำพูดเดี่ยว (') ในขณะที่รายการอาร์เรย์ข้อความจะถูกห่อด้วยเครื่องหมายคำพูดคู่ (").

การสืบค้นข้อมูลอาร์เรย์

ในการเรียกดูข้อมูลจากอาร์เรย์ เราใช้คำสั่ง SELECT ตัวอย่างเช่น หากต้องการดูเนื้อหาของตาราง Employees เราจะใช้คำสั่งต่อไปนี้:

SELECT * FROM Employees;

สิ่งนี้ส่งคืนสิ่งต่อไปนี้:

การสืบค้นข้อมูลอาร์เรย์

องค์ประกอบของคอลัมน์อาร์เรย์ ซึ่งก็คือข้อมูลติดต่อ จะถูกล้อมด้วยวงเล็บปีกกา {} ในการเข้าถึงองค์ประกอบของอาร์เรย์ เราจะเพิ่มดัชนีไว้ในวงเล็บเหลี่ยม [] องค์ประกอบแรกในอาร์เรย์จะอยู่ที่ตำแหน่งที่ 1

ตัวอย่างเช่น เราจำเป็นต้องได้รับชื่อพนักงานและเฉพาะข้อมูลติดต่อแรกสำหรับพนักงานที่มีข้อมูลติดต่อมากกว่าหนึ่งรายการ เราสามารถเข้าถึงข้อมูลนี้ได้ในรูปแบบข้อมูลติดต่อ[1] มาดูกัน:

SELECT name, contact[1]
FROM Employees;

สิ่งนี้จะส่งคืนสิ่งต่อไปนี้:

การสืบค้นข้อมูลอาร์เรย์

เราสามารถใช้คำสั่ง SELECT ร่วมกับเงื่อนไข WHERE เพื่อกรองแถวตามคอลัมน์อาร์เรย์ได้ ตัวอย่างเช่น หากต้องการดูพนักงานที่มีหมายเลข (408)-567-78234 เป็นผู้ติดต่อคนที่สอง เราสามารถเรียกใช้คำสั่งต่อไปนี้:

SELECT
   name
FROM
   Employees
WHERE
   contact [ 2 ] = '(408)-567-78234';

สิ่งนี้จะส่งคืนสิ่งต่อไปนี้:

การสืบค้นข้อมูลอาร์เรย์

การปรับเปลี่ยน PostgreSQL แถว

คุณสามารถอัปเดตข้อมูลทั้งหมดหรือเพียงข้อมูลเดียวในอาร์เรย์ได้ ต่อไปนี้คือข้อมูลในตารางพนักงาน:

การปรับเปลี่ยน PostgreSQL แถว

ให้เราอัปเดตหมายเลขโทรศัพท์ที่สองของพนักงาน James Bush ซึ่งมี ID 3:

การปรับเปลี่ยน PostgreSQL แถว

เรียกใช้คำสั่งต่อไปนี้:

UPDATE Employees
SET contact [ 2 ] = '(408)-589-89347'
WHERE
   id = 3;

คำสั่งควรทำงานสำเร็จ:

การปรับเปลี่ยน PostgreSQL แถว

ให้เราสอบถามตารางเพื่อตรวจสอบว่าการเปลี่ยนแปลงสำเร็จหรือไม่:

การปรับเปลี่ยน PostgreSQL แถว

การเปลี่ยนแปลงสำเร็จ

การค้นหาใน PostgreSQL แถว

ปัจจุบันตารางพนักงานของเรามีดังนี้:

การค้นหาใน PostgreSQL แถว

สมมติว่าเราต้องการทราบว่าใครเป็นเจ้าของรายชื่อติดต่อหมายเลข (408)-783-5731 โดยไม่คำนึงถึงตำแหน่งภายในอาร์เรย์รายชื่อติดต่อ เราสามารถใช้ฟังก์ชัน ANY() ได้ดังที่แสดงด้านล่าง:

SELECT
   name,
   contact
FROM
   Employees
WHERE
   '(408)-783-5731' = ANY (contact);

สิ่งนี้จะส่งคืนสิ่งต่อไปนี้:

การค้นหาใน PostgreSQL แถว

อาร์เรย์ขยาย

เราสามารถแบ่งค่าในอาร์เรย์ออกเป็นแถวได้ กระบวนการนี้เรียกว่าการขยายอาร์เรย์ ในตัวอย่างของตารางพนักงาน มีพนักงานบางคนที่มีผู้ติดต่อสองคนในอาร์เรย์ผู้ติดต่อ เราสามารถแยกผู้ติดต่อเหล่านี้ออกเป็นแถวแยกกันได้ PostgreSQL มีฟังก์ชัน unnest() ที่สามารถใช้เพื่อจุดประสงค์นี้ได้ ตัวอย่างเช่น:

SELECT
   name,
   unnest(contact)
FROM
   Employees;

สิ่งนี้จะส่งคืนสิ่งต่อไปนี้:

อาร์เรย์ขยาย

พนักงานอลิซ จอห์น และเจมส์ บุช มีผู้ติดต่อสองราย เราสามารถแยกผู้ติดต่อเหล่านี้ออกเป็นแถวแยกกันได้

การใช้งาน pgAdmin

การสร้าง PostgreSQL อาร์เรย์

หากต้องการบรรลุผลเช่นเดียวกันผ่าน pgAdmin ให้ทำดังนี้:

ขั้นตอน 1) เข้าสู่ระบบบัญชี pgAdmin ของคุณ

ขั้นตอน 2)

  1. จากแถบนำทางด้านซ้าย คลิกฐานข้อมูล
  2. คลิกที่ปุ่มสาธิต (Demo)

การสร้าง PostgreSQL อาร์เรย์ใช้ pgAdmin

ขั้นตอน 3) พิมพ์แบบสอบถามในตัวแก้ไขแบบสอบถามเพื่อสร้างตารางพนักงาน:

CREATE TABLE Employees (
   id int PRIMARY KEY,
   name VARCHAR (100),
   contact TEXT []
);

ขั้นตอน 4) คลิกปุ่มดำเนินการ

การสร้าง PostgreSQL อาร์เรย์ใช้ pgAdmin

แทรก PostgreSQL ค่าอาร์เรย์

ขั้นตอน 1) พิมพ์แบบสอบถามต่อไปนี้ในตัวแก้ไขแบบสอบถาม:

INSERT INTO Employees
VALUES
   (
      1,
      'Alice John',
      ARRAY [ '(408)-743-9045',
      '(408)-567-7834' ]
   );

ขั้นตอน 2) คลิกปุ่มดำเนินการ:

แทรก PostgreSQL ค่าอาร์เรย์

ขั้นตอน 3) หากต้องการใช้เครื่องหมายวงเล็บปีกกาในคำสั่งค้นหา ให้พิมพ์คำสั่งค้นหาต่อไปนี้ในโปรแกรมแก้ไขคำสั่งค้นหา:

INSERT INTO Employees
VALUES
   (
    2,
      'Kate Joel',
      '{"(408)-783-5731"}'
   ),
   (
      3,
      'James Bush',
      '{"(408)-745-8965","(408)-567-78234"}'
   );

จากนั้นคลิกปุ่ม Execute:

แทรก PostgreSQL ค่าอาร์เรย์

การสืบค้นข้อมูลอาร์เรย์

ขั้นตอน 1) หากต้องการดูเนื้อหาของตารางพนักงาน ให้พิมพ์คำสั่งต่อไปนี้ลงในตัวแก้ไขคำสั่ง:

SELECT * FROM Employees;

ขั้นตอน 2) คลิกปุ่มดำเนินการ:

การสืบค้นข้อมูลอาร์เรย์โดยใช้ pgAdmin

ควรส่งคืนสิ่งต่อไปนี้:

การสืบค้นข้อมูลอาร์เรย์โดยใช้ pgAdmin

ขั้นตอน 3) หากต้องการดูข้อมูลการติดต่อครั้งแรกของพนักงาน ให้พิมพ์คำสั่งต่อไปนี้ลงในตัวแก้ไขคำสั่ง แล้วคลิกปุ่ม Execute:

SELECT name, contact[1]
FROM Employees;

การสืบค้นข้อมูลอาร์เรย์โดยใช้ pgAdmin

ควรส่งคืนสิ่งต่อไปนี้:

การสืบค้นข้อมูลอาร์เรย์โดยใช้ pgAdmin

ขั้นตอน 4) หากต้องการรวมคำสั่ง SELECT เข้ากับเงื่อนไข WHERE ให้พิมพ์คำสั่งต่อไปนี้ในโปรแกรมแก้ไขแบบสอบถาม แล้วคลิกปุ่ม Execute:

SELECT
   name
FROM
   Employees
WHERE
   contact [ 2 ] = '(408)-567-78234';

การสืบค้นข้อมูลอาร์เรย์โดยใช้ pgAdmin

ควรส่งคืนสิ่งต่อไปนี้:

การสืบค้นข้อมูลอาร์เรย์โดยใช้ pgAdmin

การปรับเปลี่ยน PostgreSQL แถว

ขั้นตอน 1) หากต้องการอัปเดตข้อมูลผู้ติดต่อรายที่สองของผู้ใช้ที่มีรหัส 3 ให้รันคำสั่งต่อไปนี้:

UPDATE Employees
SET contact [ 2 ] = '(408)-589-89347'
WHERE
   id = 3;

ขั้นตอน 2) คลิกปุ่มดำเนินการ

การปรับเปลี่ยน PostgreSQL อาร์เรย์ใช้ pgAdmin

ขั้นตอน 3) พิมพ์คำสั่งต่อไปนี้ในโปรแกรมแก้ไขแบบสอบถามเพื่อตรวจสอบว่าการเปลี่ยนแปลงสำเร็จหรือไม่ จากนั้นคลิกปุ่ม Execute:

SELECT * FROM Employees;

การปรับเปลี่ยน PostgreSQL อาร์เรย์ใช้ pgAdmin

ควรส่งคืนสิ่งต่อไปนี้:

การปรับเปลี่ยน PostgreSQL อาร์เรย์ใช้ pgAdmin

การค้นหาใน PostgreSQL แถว

ขั้นตอน 1) พิมพ์แบบสอบถามต่อไปนี้ในตัวแก้ไขแบบสอบถาม:

SELECT
   name,
   contact
FROM
   Employees
WHERE
   '(408)-783-5731' = ANY (contact);

ขั้นตอน 2) คลิกปุ่มดำเนินการ

การค้นหาใน PostgreSQL อาร์เรย์ใช้ pgAdmin

ควรส่งคืนสิ่งต่อไปนี้:

การค้นหาใน PostgreSQL อาร์เรย์ใช้ pgAdmin

อาร์เรย์ขยาย

ขั้นตอน 1) พิมพ์แบบสอบถามต่อไปนี้ในตัวแก้ไขแบบสอบถาม:

SELECT
   name,
   unnest(contact)
FROM
   Employees;

ขั้นตอน 2) คลิกปุ่มดำเนินการ

การขยายอาร์เรย์โดยใช้ pgAdmin

ควรส่งคืนสิ่งต่อไปนี้:

การขยายอาร์เรย์โดยใช้ pgAdmin

ดาวน์โหลดฐานข้อมูลที่ใช้ในบทช่วยสอนนี้

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

ใช่แล้ว ผู้ช่วย AI สามารถเขียนคำสั่ง CREATE TABLE ที่มีคอลัมน์แบบอาร์เรย์ คำสั่ง INSERT โดยใช้ ARRAY หรือวงเล็บปีกกา และฟังก์ชันต่างๆ เช่น unnest() หรือ ANY() ได้ ทดสอบ SQL ที่สร้างขึ้นกับสคีมาของคุณก่อนใช้งานจริง

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

ใช้ฟังก์ชัน array_length(array, dimension) ตัวอย่างเช่น array_length(contact, 1) จะคืนค่าจำนวนองค์ประกอบในมิติแรกของอาร์เรย์ contact

ใช่แล้ว ใช้ฟังก์ชัน array_append(array, value) หรือตัวดำเนินการเชื่อมต่อ || ตัวอย่างเช่น UPDATE Employees SET contact = array_append(contact, '(408)-000-0000') จะเพิ่มองค์ประกอบใหม่เข้าไป

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