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: