PostgreSQL Array: Funktioner, Type, Eksempel
Hvad er PostgreSQL Array?
In PostgreSQL, kan vi definere en kolonne som en række gyldige datatyper. Datatypen kan være indbygget, brugerdefineret eller opregnet type. Bortset fra dette spiller arrays en vigtig rolle i PostgreSQL.
Hver tilsvarende PostgreSQL datatypen leveres med en relevant matrixtype. For eksempel har heltalsdatatypen integer[] matrixtypen, karakterdatatypen har karakter[] matrixtypen osv.
Oprettelse af PostgreSQL Arrays
I det følgende eksempel vil vi oprette en tabel med navnet Medarbejdere med kontaktkolonnen defineret som et tekstarray:
CREATE TABLE Employees ( id int PRIMARY KEY, name VARCHAR (100), contact TEXT [] );
Kommandoen skal køre med succes.
Indsættelse PostgreSQL Array værdier
Lad os nu INSERT værdier i ovenstående tabel:
INSERT INTO Employees VALUES ( 1, 'Alice John', ARRAY [ '(408)-743-9045', '(408)-567-7834' ] );
Indsættelsen skal køre med succes.
Værdierne i den tredje kolonne, det vil sige kontakt, er blevet indsat som en matrix. Dette er opnået ved brug af ARRAY-konstruktøren.
I dette eksempel har vi sat dem i firkantede parenteser []. Vi har to kontakter til medarbejderen Alice John.
Det er stadig muligt for os at bruge krøllede seler {} som vist nedenfor:
INSERT INTO Employees VALUES ( 2, 'Kate Joel', '{"(408)-783-5731"}' ), ( 3, 'James Bush', '{"(408)-745-8965","(408)-567-78234"}' );
Kommandoen skal køre med succes.
Ovenstående udsagn vil indsætte to rækker i tabellen Medarbejdere. Når du bruger krøllede klammeparenteser, er arrayet pakket ind i enkelte anførselstegn ('), mens tekstarray-elementerne er pakket ind i dobbelte anførselstegn (").
Forespørgsel på matrixdata
For at forespørge på elementerne i et array bruger vi SELECT-sætningen.
For at se indholdet af vores medarbejdertabel kører vi følgende kommando:
SELECT * FROM Employees;
Dette returnerer følgende:
Elementerne i matrixkolonnen, det vil sige kontakt, er blevet omsluttet af krøllede klammeparenteser {}.
For at få adgang til selve array-elementerne tilføjer vi et subscript inden for firkantede parenteser []. Det første element i et array er på position 1.
For eksempel skal vi få navne på medarbejdere og kun deres første kontakt for de medarbejdere med mere end én kontakt. Vi kan få adgang til dette som kontakt[1].
Lad os se dette:
SELECT name, contact[1] FROM Employees;
Dette vil returnere følgende:
Vi kan bruge SELECT-sætningen sammen med WHERE-sætningen til at filtrere rækker baseret på array-kolonnen.
For for eksempel at se medarbejderen med (408)-567-78234 som den anden kontakt, kan vi køre følgende kommando:
SELECT name FROM Employees WHERE contact [ 2 ] = '(408)-567-78234';
Dette vil returnere følgende:
Ændring PostgreSQL Array
Du kan opdatere hele eller et enkelt element i et array.
Her er indholdet af tabellen Medarbejdere:
Lad os opdatere det andet telefonnummer på medarbejderen James Bush, hvis id er 3:
Kør følgende kommando:
UPDATE Employees SET contact [ 2 ] = '(408)-589-89347' WHERE id = 3;
Kommandoen skal køre med succes:
Lad os forespørge i tabellen for at kontrollere, om ændringen lykkedes:
Ændringen lykkedes.
Søger i en PostgreSQL Array
I øjeblikket ser vores tabel med medarbejdere ud som følger:
Antag, at vi har brug for at vide, hvem der ejer kontakten (408)-783-5731 uanset positionen i kontaktgruppen, kan vi bruge ANY()-funktionen som vist nedenfor:
SELECT name, contact FROM Employees WHERE '(408)-783-5731' = ANY (contact);
Dette vil returnere følgende:
Udvidelse af arrays
Vi kan opdele værdierne af en matrix i rækker. Denne proces er kendt som matrixudvidelse.
I eksemplet med tabellen Medarbejdere er der nogle medarbejdere med to kontakter i kontaktarrayet. Vi kan opdele disse i separate rækker.
PostgreSQL giver unnest()-funktionen, der kan bruges til dette.
For eksempel:
SELECT name, unnest(contact) FROM Employees;
Dette vil returnere følgende:
Medarbejderne Alice John og James Bush, har to kontakter. Vi kan opdele i separate rækker.
Bruger pgAdmin
Oprettelse af PostgreSQL Arrays
For at opnå det samme gennem pgAdmin, gør dette:
Trin 1) Log ind på din pgAdmin-konto.
Trin 2)
- Fra navigationslinjen til venstre - Klik på rbases.
- Klik på Demo-knappen
Trin 3) Indtast forespørgslen i forespørgselseditoren for at oprette tabellen Medarbejdere:
CREATE TABLE Employees ( id int PRIMARY KEY, name VARCHAR (100), contact TEXT [] );
Trin 4) Klik på knappen Udfør.
Indsættelse PostgreSQL Array værdier
Trin 1) Indtast følgende forespørgsel i forespørgselseditoren:
INSERT INTO Employees VALUES ( 1, 'Alice John', ARRAY [ '(408)-743-9045', '(408)-567-7834' ] );
Trin 2) Klik på knappen Udfør:
Trin 3)
For at bruge krøllede seler i forespørgslen
Trin 1) Indtast følgende forespørgsel i forespørgselseditoren:
INSERT INTO Employees VALUES ( 2, 'Kate Joel', '{"(408)-783-5731"}' ), ( 3, 'James Bush', '{"(408)-745-8965","(408)-567-78234"}' );
Trin 2) Klik på knappen Udfør:
Forespørgsel på matrixdata
Trin 1) For at se indholdet af tabellen Medarbejdere skal du skrive følgende forespørgsel i forespørgselseditoren:
SELECT * FROM Employees;
Trin 2) Klik på knappen Udfør:
Det skal returnere følgende:
Trin 3) For at se de første kontakter med medarbejdere:
- Indtast følgende forespørgsel i forespørgselseditoren:
SELECT name, contact[1] FROM Employees;
- Klik på knappen Udfør.
Det skal returnere følgende:
Trin 4) For at kombinere SELECT-sætningen med WHERE-sætningen:
- Indtast følgende kommando i forespørgselseditoren:
SELECT name FROM Employees WHERE contact [ 2 ] = '(408)-567-78234';
- Klik på knappen Udfør.
Det skal returnere følgende:
Ændring PostgreSQL Array
Trin 1) For at opdatere brugerens anden kontaktperson med id 3 skal du køre følgende kommando:
UPDATE Employees SET contact [ 2 ] = '(408)-589-89347' WHERE id = 3;
Trin 2) Klik på knappen Udfør.
Trin 3)
1. Indtast følgende kommando i forespørgselseditoren for at kontrollere, om ændringen lykkedes:
SELECT * FROM Employees;
2. Klik på knappen Udfør.
Det skal returnere følgende:
Søger i en PostgreSQL Array
Trin 1) Indtast følgende forespørgsel i forespørgselseditoren:
SELECT name, contact FROM Employees WHERE '(408)-783-5731' = ANY (contact);
Trin 2) Klik på knappen Udfør.
Det skal returnere følgende:
Udvidelse af arrays
Trin 1) Indtast følgende forespørgsel i forespørgselseditoren:
SELECT name, unnest(contact) FROM Employees;
Trin 2) Klik på knappen Udfør.
Det skal returnere følgende:
Resumé
- PostgreSQL giver os mulighed for at definere en tabelkolonne som en matrixtype.
- Arrayet skal være gyldigt datatype såsom heltal, tegn eller brugerdefinerede typer.
- For at indsætte værdier i en matrixkolonne bruger vi ARRAY-konstruktøren.
- Hvis der er mere end ét element i den samme række i en matrixkolonne, er det første element på position 1.
- Hver værdi kan tilgås ved at sende et sænket skrift inden for firkantede parenteser [].
- Elementerne i arrayet kan hentes ved hjælp af SELECT-sætningen.
- Værdierne for matrixkolonnen kan være omgivet af firkantede parenteser [] eller krøllede klammer {}.
- Vi kan søge efter matrixkolonneværdier ved hjælp af ANY()-funktionen.
Download databasen brugt i denne vejledning