PostgreSQL Matrise: Funksjoner, Type, Eksempel

Hva er PostgreSQL Array?

In PostgreSQL, kan vi definere en kolonne som en rekke gyldige datatyper. Datatypen kan vรฆre innebygd, brukerdefinert eller opplistet type. Annet enn dette spiller arrays en viktig rolle i PostgreSQL.

Hver tilsvarende PostgreSQL datatypen kommer med en relevant matrisetype. For eksempel har heltallsdatatypen integer[] matrisetypen, karakterdatatypen har karakter[] matrisetypen, osv.

Opprette PostgreSQL arrays

I fรธlgende eksempel vil vi lage en tabell med navnet Ansatte med kontaktkolonnen definert som en tekstmatrise:

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

Kommandoen skal kjรธre vellykket.

Opprette PostgreSQL arrays

Sette PostgreSQL Matriseverdier

La oss nรฅ Sett verdier i tabellen ovenfor:

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

Innsettingen skal kjรธre vellykket.

Sette PostgreSQL Matriseverdier

Verdiene til den tredje kolonnen, det vil si kontakt, er satt inn som en matrise. Dette er oppnรฅdd ved bruk av ARRAY-konstruktรธren.

I dette eksemplet har vi satt dem innenfor firkantede parenteser []. Vi har to kontakter for den ansatte Alice John.

Det er fortsatt mulig for oss รฅ bruke bukseseler {} som vist nedenfor:

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

Kommandoen skal kjรธre vellykket.

Sette PostgreSQL Matriseverdier

Utsagnene ovenfor vil sette inn to rader i tabellen Ansatte. Nรฅr du bruker krรธllete klammeparenteser, er matrisen pakket inn i enkle anfรธrselstegn ('), mens tekstmatriseelementene er pakket inn i doble anfรธrselstegn (").

Spรธrre matrisedata

For รฅ spรธrre elementene i en matrise bruker vi SELECT-setningen.

For รฅ se innholdet i tabellen vรฅr for ansatte, kjรธrer vi fรธlgende kommando:

SELECT * FROM Employees;

Dette returnerer fรธlgende:

Spรธrre matrisedata

Elementene i array-kolonnen, det vil si kontakt, har blitt omsluttet av krรธllete klammeparenteser {}.

For รฅ fรฅ tilgang til selve array-elementene legger vi til et abonnent i hakeparenteser []. Det fรธrste elementet i en matrise er pรฅ posisjon 1.

For eksempel mรฅ vi fรฅ navn pรฅ ansatte og kun deres fรธrste kontakt for de ansatte med mer enn รฉn kontakt. Vi kan fรฅ tilgang til dette som kontakt[1].

La oss se dette:

SELECT name, contact[1]
FROM Employees;

Dette vil returnere fรธlgende:

Spรธrre matrisedata

Vi kan bruke SELECT-setningen sammen med WHERE-leddet for รฅ filtrere rader basert pรฅ array-kolonnen.

For รฅ se den ansatte med (408)-567-78234 som den andre kontakten, kan vi for eksempel kjรธre fรธlgende kommando:

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

Dette vil returnere fรธlgende:

Spรธrre matrisedata

modifisering PostgreSQL Array

Du kan oppdatere alle eller et enkelt element i en matrise.

Her er innholdet i tabellen Ansatte:

modifisering PostgreSQL Array

La oss oppdatere det andre telefonnummeret til den ansatte James Bush, hvis ID er 3:

modifisering PostgreSQL Array

Kjรธr fรธlgende kommando:

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

Kommandoen skal kjรธre vellykket:

modifisering PostgreSQL Array

La oss spรธrre i tabellen for รฅ sjekke om endringen var vellykket:

modifisering PostgreSQL Array

Endringen var vellykket.

Sรธker i en PostgreSQL Array

For รธyeblikket er tabellen vรฅr for ansatte som fรธlger:

Sรธker i en PostgreSQL Array

Anta at vi trenger รฅ vite hvem som eier kontakten (408)-783-5731 uavhengig av posisjonen i kontaktmatrisen, vi kan bruke ANY()-funksjonen som vist nedenfor:

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

Dette vil returnere fรธlgende:

Sรธker i en PostgreSQL Array

Utvide matriser

Vi kan dele verdiene til en matrise i rader. Denne prosessen er kjent som array-utvidelse.

I eksemplet med Employees-tabellen er det noen ansatte med to kontakter i kontaktarrayen. Vi kan dele disse opp i separate rader.

PostgreSQL gir funksjonen unnest() som kan brukes til dette.

For eksempel:

SELECT
   name,
   unnest(contact)
FROM
   Employees;

Dette vil returnere fรธlgende:

Utvide matriser

De ansatte Alice John og James Bush, har to kontakter. Vi kan dele opp i separate rader.

Bruker pgAdmin

Opprette PostgreSQL arrays

For รฅ oppnรฅ det samme gjennom pgAdmin, gjรธr dette:

Trinn 1) Logg pรฅ pgAdmin-kontoen din.

Trinn 2)

  1. Fra navigasjonslinjen til venstre - Klikk pรฅ rbaser.
  2. Klikk pรฅ Demo-knappen

Opprette PostgreSQL Arrays ved hjelp av pgAdmin

Trinn 3) Skriv inn sรธket i spรธrringsredigeringsprogrammet for รฅ opprette tabellen Ansatte:

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

Trinn 4) Klikk pรฅ Utfรธr-knappen.

Opprette PostgreSQL Arrays ved hjelp av pgAdmin

Sette PostgreSQL Matriseverdier

Trinn 1) Skriv inn fรธlgende spรธrring i spรธrringsredigeringsprogrammet:

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

Trinn 2) Klikk pรฅ Utfรธr-knappen:

Sette PostgreSQL Matriseverdier

Trinn 3)

For รฅ bruke krรธllete klammeparenteser i spรธrringen

Trinn 1) Skriv inn fรธlgende spรธrring i spรธrringsredigeringsprogrammet:

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

Trinn 2) Klikk pรฅ Utfรธr-knappen:

Sette PostgreSQL Matriseverdier

Spรธrre matrisedata

Trinn 1) For รฅ se innholdet i tabellen Ansatte, skriv inn fรธlgende spรธrring i spรธrringsredigeringsprogrammet:

SELECT * FROM Employees;

Trinn 2) Klikk pรฅ Utfรธr-knappen:

Spรธrre matrisedata ved hjelp av pgAdmin

Den skal returnere fรธlgende:

Spรธrre matrisedata ved hjelp av pgAdmin

Trinn 3) For รฅ se de fรธrste kontaktene til ansatte:

  1. Skriv inn fรธlgende spรธrring i spรธrringsredigeringsprogrammet:
    SELECT name, contact[1]
    FROM Employees;
    
  2. Klikk pรฅ Utfรธr-knappen.

Spรธrre matrisedata ved hjelp av pgAdmin

Den skal returnere fรธlgende:

Spรธrre matrisedata ved hjelp av pgAdmin

Trinn 4) Slik kombinerer du SELECT-setningen med WHERE-leddet:

  1. Skriv inn fรธlgende kommando i spรธrringsredigeringsprogrammet:
    SELECT
       name
    FROM
       Employees
    WHERE
       contact [ 2 ] = '(408)-567-78234';
    
  2. Klikk pรฅ Utfรธr-knappen.

Spรธrre matrisedata ved hjelp av pgAdmin

Den skal returnere fรธlgende:

Spรธrre matrisedata ved hjelp av pgAdmin

modifisering PostgreSQL Array

Trinn 1) For รฅ oppdatere den andre kontakten til brukeren med ID 3, kjรธr fรธlgende kommando:

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

Trinn 2) Klikk pรฅ Utfรธr-knappen.

modifisering PostgreSQL Array ved hjelp av pgAdmin

Trinn 3)

1. Skriv inn fรธlgende kommando i spรธrringsredigeringsprogrammet for รฅ sjekke om endringen var vellykket:

SELECT * FROM Employees;

2. Klikk pรฅ Utfรธr-knappen.

modifisering PostgreSQL Array ved hjelp av pgAdmin

Den skal returnere fรธlgende:

modifisering PostgreSQL Array ved hjelp av pgAdmin

Sรธker i en PostgreSQL Array

Trinn 1) Skriv inn fรธlgende spรธrring i spรธrringsredigeringsprogrammet:

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

Trinn 2) Klikk pรฅ Utfรธr-knappen.

Sรธker i en PostgreSQL Array ved hjelp av pgAdmin

Den skal returnere fรธlgende:

Sรธker i en PostgreSQL Array ved hjelp av pgAdmin

Utvide matriser

Trinn 1) Skriv inn fรธlgende spรธrring i spรธrringsredigeringsprogrammet:

SELECT
   name,
   unnest(contact)
FROM
   Employees;

Trinn 2) Klikk pรฅ Utfรธr-knappen.

Utvide matriser ved hjelp av pgAdmin

Den skal returnere fรธlgende:

Utvide matriser ved hjelp av pgAdmin

Sammendrag

  • PostgreSQL lar oss definere en tabellkolonne som en matrisetype.
  • Matrisen mรฅ vรฆre gyldig data-type slik som heltall, tegn eller brukerdefinerte typer.
  • For รฅ sette inn verdier i en matrisekolonne, bruker vi ARRAY-konstruktรธren.
  • Hvis det er mer enn ett element i samme rad i en matrisekolonne, er det fรธrste elementet i posisjon 1.
  • Hver verdi kan nรฅs ved รฅ sende et abonnent i hakeparenteser [].
  • Elementene i arrayet kan hentes ved hjelp av SELECT-setningen.
  • Verdiene til matrisekolonnen kan omsluttes av hakeparenteser [] eller krรธllete klammeparenteser {}.
  • Vi kan sรธke etter matrisekolonneverdier ved รฅ bruke ANY()-funksjonen.

Last ned databasen som brukes i denne opplรฆringen

Oppsummer dette innlegget med: