Oracle
 sql >> Database >  >> RDS >> Oracle

Che cosa sono le sottoquery in Oracle

Subquery in Oracle

(1) Una sottoquery o una query nidificata è una query all'interno di un'altra query SQL e incorporata nella clausola WHERE. Una sottoquery è una query all'interno di una query

(2) Viene utilizzata una sottoquery per restituire i dati che verranno utilizzati nella query principale come condizione per limitare ulteriormente i dati da recuperare.

(3) Le sottoquery rispondono alle query che hanno più parti. La query principale risponde a una parte e la query secondaria risponde a un'altra parte

(4)Le sottoquery possono essere utilizzate con le istruzioni SELECT, INSERT, UPDATE e DELETE insieme agli operatori come =, <,>,>=, <=, IN, BETWEEN ecc.

(5)L'utilizzo di sottoquery in una clausola FROM è noto come visualizzazione inline .

(6) L'utilizzo di subquery nella clausola WHERE è chiamato subquery nidificato . Sono consentite fino a 255 query nidificate.

Alcune linee guida per le sottoquery Oracle

(1) Dobbiamo mettere sempre le sottoquery tra parentesi

(2) È necessario posizionare le sottoquery sul lato destro dell'operatore di confronto

(3) Utilizzare l'operatore a riga singola con sottoquery a riga singola e l'operatore a riga multipla con sottoquery a riga multipla

Sintassi generale

SELECT col1, col2
FROM   table1
WHERE  col1  OPERATOR
(SELECT col1
FROM table2
[WHERE])

Sottoquery a riga singola

Restituisce solo una riga di risultati e utilizza un singolo operatore di riga (il più comune è l'operatore uguale (=)). Gli altri operatori sono > ,<,>=  ,=<

Le sottoquery a riga singola possono selezionare dati dalla stessa tabella o da un'altra tabella

SELECT ENAME FROM EMP WHERE SAL = (SELECT MIN(SAL) FROM EMP);SELECT ENAME FROM EMP WHERE DEPTNO = (SELECT DEPTNO FROM DEPT WHERE DNAME = 'RESEARCH');

Subquery a più righe

Restituisce diverse righe di risultati dalla sottoquery, utilizza l'operatore IN. Nella query precedente, se esisteva più di un dipartimento di ricerca, la query non sarebbe riuscita. Esempio di restituzione di più righe nella sottoquery

L'altro operatore utilizzato è any e all

SELECT ENAME, DEPTNO FROM EMP
WHERE DEPTNO IN (SELECT DEPTNO FROM DEPT WHERE DNAME LIKE 'R%');

Subquery correlata

Una sottoquery correlata è una sottoquery che si basa sulle colonne della query padre. Viene valutata una sottoquery correlata per ogni riga elaborata dalla query padre. L'istruzione padre può essere SELECT, UPDATE o DELETE.

SELECT ENAME,SAL FROM EMP E1
WHERE SAL = (SELECT MAX(SAL)
FROM EMP E2 WHERE E1.DEPTNO = E2.DEPTNO);

Sulla base degli stessi dati di emp e dept, ecco il risultato

Subquery scalari

Restituisce esattamente un valore da una riga, utilizzato più spesso nella clausola VALUES di un'istruzione INSERT, nella clausola ORDER BY o WHERE e in una clausola SELECT:

SELECT ENAME,
DEPTNO, (SELECT MAX(SAL)
FROM EMP E2
WHERE E2.DEPTNO = E1.DEPTNO) HIGH_SAL
FROM EMP E1
WHERE ENAME LIKE 'B%';

La sottoquery viene eseguita una volta per ogni esecuzione della master query. Una sottoquery a riga singola può essere utilizzata solo con operatori a riga singola

  Subquery a più colonne

La query può avere  più di una colonna nella clausola SELECT di una sottoquery o nelle istruzioni UPDATE

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');

Subquery in altre istruzioni DML

Le sottoquery possono essere utilizzate nelle istruzioni UPDATE, DELETE e INSERT

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 );

Articoli correlati
Come scrivere query sql:cosa sono Oracle Join con esempi (Sql join), Diversi tipi di join, Inner Join, Outer join, Left external join, Right external join, Cross join con esempi
Oracle Joins :Cosa sono Oracle Join con esempi (Sql join), Diversi tipi di join, Inner Join, Outer join, left outer join, right external join, cross join con esempi
Funzioni di data in Oracle :Dai un'occhiata a questo post per Oracle funzioni di data, differenza di data di Oracle in anni, differenza di data di Oracle in giorni, differenza di data di Oracle in mesi.
JSON in Oracle:dai un'occhiata a questo post su come utilizzare JSON in Oracle, come creare una tabella contenente dati JSON, come per estrarre, inserire i dati JSON in Oracle
Oracle Sql tutorial:elenco di tutte le lezioni del tutorial sql che possono essere utilizzate per padroneggiare sql e utilizzare in Oracle, gestione e manipolazione dei dati
https://livesql. oracle.com/apex/livesql/file/tutorial_GMLYIBY74FPBS888XO8F1R95I.html