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