PostgreSQL Niz: funkcije, vrsta, primjer

ล to je PostgreSQL Niz?

In PostgreSQL, moลพemo definirati stupac kao niz valjanih tipova podataka. Tip podataka moลพe biti ugraฤ‘en, korisniฤki definiran ili nabrojani tip. Osim toga, nizovi igraju vaลพnu ulogu u PostgreSQL.

Svaki odgovarajuฤ‡i PostgreSQL vrsta podataka dolazi s relevantnom vrstom polja. Na primjer, tip podataka integer ima tip niza integer[], tip podataka znakova ima tip niza character[], itd.

Stvaranje PostgreSQL nizovi

U sljedeฤ‡em primjeru stvorit ฤ‡emo tablicu pod nazivom Zaposlenici sa stupcem kontakta definiranim kao tekstualno polje:

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

Naredba bi se trebala uspjeลกno pokrenuti.

Stvaranje PostgreSQL nizovi

Umetanje PostgreSQL Vrijednosti polja

Pustite nas sada INSERT vrijednosti u gornju tablicu:

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

Umetanje bi se trebalo uspjeลกno pokrenuti.

Umetanje PostgreSQL Vrijednosti polja

Vrijednosti treฤ‡eg stupca, odnosno kontakta, umetnute su kao niz. To je postignuto koriลกtenjem konstruktora ARRAY.

U ovom primjeru smo ih zatvorili u uglate zagrade []. Imamo dva kontakta za zaposlenicu Alice John.

Joลก uvijek moลพemo koristiti vitiฤaste zagrade {} kao ลกto je prikazano u nastavku:

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

Naredba bi se trebala uspjeลกno izvesti.

Umetanje PostgreSQL Vrijednosti polja

Gornje izjave umetnut ฤ‡e dva retka u tablicu zaposlenika. Kada koristite vitiฤaste zagrade, niz je stavljen unutar jednostrukih navodnika ('), dok su stavke tekstualnog niza ovijene unutar dvostrukih navodnika (โ€œ).

Upit za podatke polja

Za upite elemenata niza koristimo naredbu SELECT.

Da bismo vidjeli sadrลพaj naลกe tablice Zaposlenici, pokreฤ‡emo sljedeฤ‡u naredbu:

SELECT * FROM Employees;

Ovo vraฤ‡a sljedeฤ‡e:

Upit za podatke polja

Elementi stupca niza, odnosno kontakt, stavljeni su u vitiฤaste zagrade {}.

Za pristup samim elementima niza, dodajemo indeks unutar uglatih zagrada []. Prvi element u nizu nalazi se na poziciji 1.

Na primjer, moramo dobiti imena zaposlenika i samo njihov prvi kontakt za one zaposlenike s viลกe od jednog kontakta. Ovome moลพemo pristupiti kao kontakt[1].

Da vidimo ovo:

SELECT name, contact[1]
FROM Employees;

Ovo ฤ‡e vratiti sljedeฤ‡e:

Upit za podatke polja

Moลพemo koristiti naredbu SELECT zajedno s klauzulom WHERE za filtriranje redaka na temelju stupca polja.

Na primjer, da bismo vidjeli zaposlenika s (408)-567-78234 kao drugi kontakt, moลพemo pokrenuti sljedeฤ‡u naredbu:

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

Ovo ฤ‡e vratiti sljedeฤ‡e:

Upit za podatke polja

Modificiranje PostgreSQL Poredak

Moลพete aลพurirati sve ili jedan element niza.

Evo sadrลพaja tablice zaposlenika:

Modificiranje PostgreSQL Poredak

Aลพurirajmo drugi telefonski broj zaposlenika Jamesa Busha, ฤiji je ID 3:

Modificiranje PostgreSQL Poredak

Pokrenite sljedeฤ‡u naredbu:

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

Naredba bi se trebala uspjeลกno izvesti:

Modificiranje PostgreSQL Poredak

Upitajmo tablicu da provjerimo je li promjena bila uspjeลกna:

Modificiranje PostgreSQL Poredak

Promjena je bila uspjeลกna.

Pretraลพivanje u a PostgreSQL Poredak

Trenutaฤno je tablica naลกih zaposlenika sljedeฤ‡a:

Pretraลพivanje u a PostgreSQL Poredak

Pretpostavimo da trebamo znati tko je vlasnik kontakta (408)-783-5731 bez obzira na poloลพaj u nizu kontakata, moลพemo koristiti funkciju ANY() kao ลกto je prikazano u nastavku:

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

Ovo ฤ‡e vratiti sljedeฤ‡e:

Pretraลพivanje u a PostgreSQL Poredak

Proลกirujuฤ‡i nizovi

Vrijednosti niza moลพemo podijeliti u retke. Ovaj proces je poznat kao proลกirenje polja.

U primjeru tablice Zaposlenici, postoje neki zaposlenici s dva kontakta u nizu kontakata. Moลพemo ih podijeliti u zasebne retke.

PostgreSQL pruลพa funkciju unnest() koja se moลพe koristiti za ovo.

Na primjer:

SELECT
   name,
   unnest(contact)
FROM
   Employees;

Ovo ฤ‡e vratiti sljedeฤ‡e:

Proลกirujuฤ‡i nizovi

Zaposlenici Alice John i James Bush, imaju dva kontakta. Moลพemo se podijeliti u zasebne redove.

Koristeฤ‡i pgAdmin

Stvaranje PostgreSQL nizovi

Da biste postigli isto putem pgAdmina, uฤinite ovo:

Korak 1) Prijavite se na svoj pgAdmin raฤun.

Korak 2)

  1. Na navigacijskoj traci s lijeve strane kliknite baze.
  2. Kliknite gumb Demo

Stvaranje PostgreSQL Nizovi pomoฤ‡u pgAdmin-a

Korak 3) Upiลกite upit u ureฤ‘ivaฤ upita za izradu tablice Zaposlenici:

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

Korak 4) Pritisnite gumb Izvrลกi.

Stvaranje PostgreSQL Nizovi pomoฤ‡u pgAdmin-a

Umetanje PostgreSQL Vrijednosti polja

Korak 1) Unesite sljedeฤ‡i upit u ureฤ‘ivaฤ upita:

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

Korak 2) Pritisnite gumb Izvrลกi:

Umetanje PostgreSQL Vrijednosti polja

Korak 3)

Za koriลกtenje vitiฤastih zagrada u upitu

Korak 1) Unesite sljedeฤ‡i upit u ureฤ‘ivaฤ upita:

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

Korak 2) Kliknite gumb Izvrลกi:

Umetanje PostgreSQL Vrijednosti polja

Upit za podatke polja

Korak 1) Da biste vidjeli sadrลพaj tablice Zaposlenici, upiลกite sljedeฤ‡i upit u ureฤ‘ivaฤ upita:

SELECT * FROM Employees;

Korak 2) Pritisnite gumb Izvrลกi:

Upit za podatke polja pomoฤ‡u pgAdmin-a

Trebao bi vratiti sljedeฤ‡e:

Upit za podatke polja pomoฤ‡u pgAdmin-a

Korak 3) Da vidite prve kontakte zaposlenika:

  1. Unesite sljedeฤ‡i upit u ureฤ‘ivaฤ upita:
    SELECT name, contact[1]
    FROM Employees;
    
  2. Pritisnite gumb Izvrลกi.

Upit za podatke polja pomoฤ‡u pgAdmin-a

Trebao bi vratiti sljedeฤ‡e:

Upit za podatke polja pomoฤ‡u pgAdmin-a

Korak 4) Za kombiniranje naredbe SELECT s klauzulom WHERE:

  1. Unesite sljedeฤ‡u naredbu u ureฤ‘ivaฤ upita:
    SELECT
       name
    FROM
       Employees
    WHERE
       contact [ 2 ] = '(408)-567-78234';
    
  2. Pritisnite gumb Izvrลกi.

Upit za podatke polja pomoฤ‡u pgAdmin-a

Trebao bi vratiti sljedeฤ‡e:

Upit za podatke polja pomoฤ‡u pgAdmin-a

Modificiranje PostgreSQL Poredak

Korak 1) Za aลพuriranje drugog kontakta korisnika s ID-om 3, pokrenite sljedeฤ‡u naredbu:

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

Korak 2) Pritisnite gumb Izvrลกi.

Modificiranje PostgreSQL Niz pomoฤ‡u pgAdmin-a

Korak 3)

1. Upiลกite sljedeฤ‡u naredbu u ureฤ‘ivaฤ upita kako biste provjerili je li promjena bila uspjeลกna:

SELECT * FROM Employees;

2. Pritisnite gumb Izvrลกi.

Modificiranje PostgreSQL Niz pomoฤ‡u pgAdmin-a

Trebao bi vratiti sljedeฤ‡e:

Modificiranje PostgreSQL Niz pomoฤ‡u pgAdmin-a

Pretraลพivanje u a PostgreSQL Poredak

Korak 1) Unesite sljedeฤ‡i upit u ureฤ‘ivaฤ upita:

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

Korak 2) Pritisnite gumb Izvrลกi.

Pretraลพivanje u a PostgreSQL Niz pomoฤ‡u pgAdmin-a

Trebao bi vratiti sljedeฤ‡e:

Pretraลพivanje u a PostgreSQL Niz pomoฤ‡u pgAdmin-a

Proลกirujuฤ‡i nizovi

Korak 1) Unesite sljedeฤ‡i upit u ureฤ‘ivaฤ upita:

SELECT
   name,
   unnest(contact)
FROM
   Employees;

Korak 2) Pritisnite gumb Izvrลกi.

Proลกirivanje nizova pomoฤ‡u pgAdmin-a

Trebao bi vratiti sljedeฤ‡e:

Proลกirivanje nizova pomoฤ‡u pgAdmin-a

Rezime

  • PostgreSQL omoguฤ‡uje nam da definiramo stupac tablice kao vrstu polja.
  • Niz mora biti valjan tip podataka kao ลกto su cijeli brojevi, znakovi ili korisniฤki definirani tipovi.
  • Za umetanje vrijednosti u stupac niza koristimo konstruktor NIZ.
  • Ako postoji viลกe od jednog elementa u istom retku stupca niza, prvi element je na poziciji 1.
  • Svakoj vrijednosti se moลพe pristupiti prosljeฤ‘ivanjem indeksa unutar uglatih zagrada [].
  • Elementi niza mogu se dohvatiti pomoฤ‡u naredbe SELECT.
  • Vrijednosti stupca polja mogu se staviti u uglate zagrade [] ili vitiฤaste zagrade {}.
  • Vrijednosti stupca niza moลพemo pretraลพivati โ€‹โ€‹pomoฤ‡u funkcije ANY().

Preuzmite bazu podataka koriลกtenu u ovom vodiฤu

Saลพmite ovu objavu uz: