Underforespørgsler i Oracle
(1) En underforespørgsel eller indlejret forespørgsel er en forespørgsel i en anden SQL-forespørgsel og indlejret i WHERE-sætningen. En underforespørgsel er en forespørgsel i en forespørgsel
(2) En underforespørgsel bruges til at returnere data, der vil blive brugt i hovedforespørgslen som en betingelse for yderligere at begrænse de data, der skal hentes.
(3) Underforespørgsler besvarer forespørgsler, der har flere dele. Den overordnede forespørgsel besvarer en del, og underforespørgslen besvarer den anden del
(4)Underforespørgsler kan bruges med SELECT-, INSERT-, UPDATE- og DELETE-sætningerne sammen med operatorerne som =, <,>,>=, <=, IN, BETWEEN osv.
(5)Brug af underforespørgsler i en FROM-klausul er kendt som en inline-visning .
(6) Brug af underforespørgsler i WHERE-sætningen kaldes en indlejret underforespørgsel . Op til 255 indlejrede forespørgsler er tilladt.
Nogle retningslinjer for Oracle SubQueries
(1) Vi skal altid sætte underforespørgsler i parentes
(2) Vi skal placere underforespørgsler på højre side af sammenligningsoperatoren
(3) Brug enkelt række operator med enkelt række underforespørgsler og multiple række operator med flere række underforespørgsler
Generel syntaks
SELECT col1, col2 FROM table1 WHERE col1 OPERATOR (SELECT col1 FROM table2 [WHERE])
Enkelt række underforespørgsel
Det returnerer kun én række resultater og bruger en enkelt rækkeoperator (mest almindeligt er den lige operator (=)). De andre operatorer er > ,<,>= ,=<
Enkeltrækkeunderforespørgsler kan vælge data fra den samme tabel eller fra en anden tabel
SELECT ENAME FROM EMP WHERE SAL = (SELECT MIN(SAL) FROM EMP);SELECT ENAME FROM EMP WHERE DEPTNO = (SELECT DEPTNO FROM DEPT WHERE DNAME = 'RESEARCH');
Underforespørgsel med flere rækker
Det returnerer flere rækker med resultater fra underforespørgslen, bruger IN-operatoren. I den forrige forespørgsel, hvis der var mere end én forskningsafdeling, ville forespørgslen have mislykkedes. Eksempel på returnering af mere end én række i underforespørgslen
Den anden operator, der bruges, er enhver og alle
SELECT ENAME, DEPTNO FROM EMP WHERE DEPTNO IN (SELECT DEPTNO FROM DEPT WHERE DNAME LIKE 'R%');
Korreleret underforespørgsel
En korreleret underforespørgsel er en underforespørgsel, der er afhængig af kolonner fra den overordnede forespørgsel. En korreleret underforespørgsel evalueres for hver række, der behandles af den overordnede forespørgsel. Den overordnede sætning kan være en SELECT, UPDATE eller DELETE.
SELECT ENAME,SAL FROM EMP E1 WHERE SAL = (SELECT MAX(SAL) FROM EMP E2 WHERE E1.DEPTNO = E2.DEPTNO);
Baseret på de samme data for emp og dept, er her resultatet
Skalære underforespørgsler
Det returnerer præcis én værdi fra én række, som oftest bruges i VALUES-udtrykket i en INSERT-sætning, i og ORDER BY eller WHERE-udtrykket og i et SELECT-udtryk:
SELECT ENAME, DEPTNO, (SELECT MAX(SAL) FROM EMP E2 WHERE E2.DEPTNO = E1.DEPTNO) HIGH_SAL FROM EMP E1 WHERE ENAME LIKE 'B%';
Underforespørgslen udføres én gang for hver udførelse af masterforespørgslen. En enkelt-række-underforespørgsel kan kun bruges med enkeltrække-operatorer
Underforespørgsler med flere kolonner
Forespørgslen kan have mere end én kolonne i SELECT-sætningen i en underforespørgsel eller i UPDATE-sætninger
SELECT CITY,CITY_CODE,CITY_DESCRIPTION FROM LOCATIONS WHERE (LOCATION_ID, COUNTRY_ID) IN (SELECT LOCATION_ID, COUNTRY_ID FROM LOCATIONS WHERE STATE_PROVINCE = 'NEWYORK');
Underforespørgsler i andre DML-erklæringer
Underforespørgsler kan bruges i UPDATE-, DELETE- og INSERT-sætninger
Update Statement UPDATE EMP SET SALARY = (SELECT SALARY FROM EMP WHERE EMPLOYEE_ID = 112408) WHERE EMPLOYEE_ID = 193711; Insert Statement INSERT INTO DEPT (DEPT_ID, DEPT_NAME) VALUES ((SELECT MAX(DEPT_ID) FROM DEPT), 'NEW DEPT'); Delete Statement DELETE FROM CUSTOMERS WHERE AGE IN (SELECT AGE FROM CUST_BACK WHERE AGE > 40 );
Relaterede artikler
hvordan skriver man sql-forespørgsler :Hvad er Oracle Joins med eksempler (Sql-joins), Forskellige typer join-forbindelser, Inner Join,Outer Join,venstre ydre joinforbindelse,højre ydre joinforbindelse,krydsforbindelse med eksempler
Oracle Joins :Hvad er Oracle Joins med eksempler (Sql joins), Forskellige typer joins , Inner Join, Outer join,venstre ydre joinforbindelse, højre ydre joinforbindelse,krydsforbindelse med eksempler
Datofunktioner i oracle :Tjek dette indlæg for oracle datofunktioner, oracle-datoforskel i år,oracle-datoforskel i dage, oracle-datoforskel i måneder.
JSON i oracle:Tjek dette indlæg om, hvordan man bruger JSON i oracle,hvordan man opretter tabel, der indeholder JSON-data, hvordan for at udtrække, indsæt JSON-dataene i Oracle
Oracle Sql tutorial:Liste over alle sql tutorial lektioner, som kan bruges til at mestre sql og bruge i Oracle, data management og manipulation
https://livesql. oracle.com/apex/livesql/file/tutorial_GMLYIBY74FPBS888XO8F1R95I.html