En subquery eller Indre spørring eller Nøstet spørring er en spørring i en annen PostgreSQL spørring og integrert i WHERE-leddet
er en delspørring brukes til å returnere data som vil bli brukt i hovedspørringen som en betingelse for ytterligere å begrense dataene som skal hentes
subqueries kan brukes med SELECT, INSERT, UPDATE og DELETE-setninger sammen med operatørene som =, <, >, >. =, < =, IN, etc.
Det er noen regler som subqueries må følge.
subqueries må vedlegges i parentes
En subquery kan bare ha én kolonne i SELECT-leddet, med mindre flere kolonner er i hovedspørringen for subquery å sammenligne sine utvalgte kolonner.
En ORDER BY kan ikke brukes i en delspørring, selv om hovedspørringen kan bruke en ORDER BY. GROUP BY kan brukes til å utføre samme funksjon som ORDER BY i en subquery.
subqueries som returnerer mer enn én rad kan bare brukes med flere verdi operatører, som for eksempel IN, eksisterer, ikke i, NOE /NOEN, ALL operatør
MELLOM Operatøren kan ikke brukes med en delspørring.; imidlertid MELLOM kan brukes innenfor subquery
delspørringer med SELECT erklæringen.
subqueries er mest brukt med SELECT-setningen. Den grunnleggende syntaks er som følger:
VELG Kolonnen [, kolonne] Fra table1 [, table2] HVOR kolonne OPERATØR (VELG kolonne [, kolonne] Fra table1 [, table2] [Hvor])
Eksempel:
Tenk COMPANY bordet er å ha følgende poster:
id | Navn | alder | adressere | lønn ---- + ------- + ----- + ----------- + -------- 1 | Paul | 32 | California | 20000 2 | Allen | 25 | Texas | 15000 3 | Teddy | 23 | Norge | 20000 4 | Mark | 25 | Rich-Mond | 65000 5 | David | 27 | Texas | 85000 6 | Kim | 22 | Sør-Hall | 45000 7 | James | 24 | Houston | 10000 (7 p)
Nå, la oss sjekke følgende sub-spørring med SELECT-setning:
testdb = # SELECT * FROM selskap hvor ID IN (SELECT ID FRA selskap hvor LØNN > 45000);
Dette ville produsere følgende resultat:
id | Navn | alder | adressere | lønn ---- + ------- + ----- + ------------- + -------- 4 | Mark | 25 | Rich-Mond | 65000 5 | David | 27 | Texas | 85000 (2 p)
delspørringer med INSERT-setningen:
subqueries også kan brukes med INSERT-setninger. INSERT-setningen bruker dataene som returneres fra subquery å sette inn i en annen tabell. De utvalgte data i subquery kan endres med noen av karakter, dato eller antall funksjoner
Den grunnleggende syntaks er som følger:.
INSERT INTO table_name [(COLUMN1 [, COLUMN2])] SELECT [* | COLUMN1 [, COLUMN2] Fra table1 [, table2] [HVOR VERDI OPERATØR]
Eksempel:
Tenk et bord COMPANY_BKP med lignende struktur som COMPANY bord og kan bli laget med samme CREATE TABLE hjelp COMPANY_BKP som tabellnavn. Nå å kopiere komplett COMPANY bord i COMPANY_BKP, er syntaksen:
testdb = # INSERT INTO COMPANY_BKP SELECT * FROM selskap hvor ID IN (SELECT ID fra bedrift);
delspørringer med oppdateringen Statement:
< p> subquery kan brukes i forbindelse med oppdateringen uttalelse. Enten én eller flere kolonner i en tabell kan oppdateres når du bruker en delspørring med UPDATE statement
Den grunnleggende syntaks er som følger:.
UPDATE tableSET kolonne = new_value [HVOR OPERATØR [value] (VELG COLUMN_NAME Fra TABLE_NAME) [HVOR)]
Eksempel:
Forutsatt, har vi COMPANY_BKP bord tilgjengelig som er backup av COMPANY tabellen
Følgende eksempel oppdateringer LØNN med 0,50 ganger i COMPANY bordet for alle. kundene, hvis alder er større enn eller lik 27:
testdb = # UPDATE selskapet satt LØNN = LØNN * 0,50 der alder IN (SELECT alder fra COMPANY_BKP der alder > = 27);
Dette vil påvirke to- rader og endelig COMPANY bord ville ha følgende poster:
id | Navn | alder | adressere | lønn ---- + ------- + ----- + ------------- + -------- 2 | Allen | 25 | Texas | 15000 3 | Teddy | 23 | Norge | 20000 4 | Mark | 25 | Rich-Mond | 65000 6 | Kim | 22 | Sør-Hall | 45000 7 | James | 24 | Houston | 10000 1 | Paul | 32 | California | 10000 5 | David | 27 | Texas | 42500 (7 p)
delspørringer med DELETE erklæringen.
subquery kan brukes i forbindelse med DELETE utsagn som med eventuelle andre uttalelser som er nevnt ovenfor
Den grunnleggende syntaks er som følger:
DELETE FROM TABLE_NAME [HVOR OPERATØR [value] (VELG COLUMN_NAME Fra TABLE_NAME) [HVOR)]
Eksempel:.
Forutsatt, har vi COMPANY_BKP bord tilgjengelig som er backup av COMPANY table
Etter eksempel sletter poster fra COMPANY bord for alle kunder, hvis alder er større enn eller lik 27:
testdb = # DELETE fra selskap der alder IN (SELECT alder fra COMPANY_BKP der alder> 27);
Dette vil påvirke to rader og endelig COMPANY bord ville ha følgende poster:
id | Navn | alder | adressere | lønn ---- + ------- + ----- + ------------- + -------- 2 | Allen | 25 | Texas | 15000 3 | Teddy | 23 | Norge | 20000 4 | Mark | 25 | Rich-Mond | 65000 6 | Kim | 22 | Sør-Hall | 45000 7 | James | 24 | Houston | 10000 5 | David | 27 | Texas | 42500 (6 p)