Oracle
 sql >> Base de données >  >> RDS >> Oracle

Qu'est-ce que les sous-requêtes dans Oracle

Sous-requêtes dans Oracle

(1) Une sous-requête ou une requête imbriquée est une requête dans une autre requête SQL et intégrée dans la clause WHERE. Une sous-requête est une requête dans une requête

(2) Une sous-requête est utilisée pour renvoyer des données qui seront utilisées dans la requête principale comme condition pour restreindre davantage les données à récupérer.

(3) Les sous-requêtes répondent aux requêtes comportant plusieurs parties. La requête parent répond à une partie et la sous-requête répond à une autre partie

(4)Les sous-requêtes peuvent être utilisées avec les instructions SELECT, INSERT, UPDATE et DELETE avec les opérateurs comme =, <,>,>=, <=, IN, BETWEEN etc.

(5) L'utilisation de sous-requêtes dans une clause FROM est connue sous le nom de vue en ligne .

(6) L'utilisation de sous-requêtes dans la clause WHERE est appelée une sous-requête imbriquée . Jusqu'à 255 requêtes imbriquées sont autorisées.

Quelques consignes pour les sous-requêtes Oracle

(1) Nous devons toujours mettre les sous-requêtes entre parenthèses

(2) Nous devons placer des sous-requêtes à droite de l'opérateur de comparaison

(3) Utilisez un opérateur à une seule ligne avec des sous-requêtes à une seule ligne et un opérateur à plusieurs lignes avec des sous-requêtes à plusieurs lignes

Syntaxe générale

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

Sous-requête à une seule ligne

Il renvoie une seule ligne de résultats et utilise un seul opérateur de ligne (le plus courant est l'opérateur égal (=)). Les autres opérateurs sont > ,<,>=  ,=<

Les sous-requêtes à ligne unique peuvent sélectionner des données de la même table ou d'une autre table

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

Sous-requête à plusieurs lignes

Il renvoie plusieurs lignes de résultats de la sous-requête, utilise l'opérateur IN. Dans la requête précédente, s'il y avait plusieurs services de recherche, la requête aurait échoué. Exemple de renvoi de plusieurs lignes dans la sous-requête

L'autre opérateur utilisé est any and all

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

Sous-requête corrélée

Une sous-requête corrélée est une sous-requête qui repose sur des colonnes de la requête parent. Une sous-requête corrélée est évaluée pour chaque ligne traitée par la requête parent. L'instruction parente peut être SELECT, UPDATE ou DELETE.

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

Basé sur les mêmes données de emp et dept, voici le résultat

Sous-requêtes scalaires

Il renvoie exactement une valeur d'une ligne, utilisée le plus souvent dans la clause VALUES d'une instruction INSERT, dans une clause ORDER BY ou WHERE et dans une clause 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 sous-requête s'exécute une fois pour chaque exécution de la requête principale. Une sous-requête à une seule ligne ne peut être utilisée qu'avec des opérateurs à une seule ligne

  Sous-requêtes à plusieurs colonnes

La requête peut avoir plusieurs colonnes dans la clause SELECT d'une sous-requête ou dans les instructions 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');

Sous-requêtes dans d'autres instructions DML

Les sous-requêtes peuvent être utilisées dans les instructions UPDATE, DELETE et 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 );

Articles connexes
comment écrire des requêtes sql :que sont les jointures Oracle avec des exemples (jointures Sql), différents types de jointures, jointure interne, jointure externe, jointure externe gauche, jointure externe droite, jointure croisée avec exemples
Jointures Oracle :Que sont les jointures Oracle avec des exemples (jointures SQL), différents types de jointures, jointure interne, jointure externe, jointure externe gauche, jointure externe droite, jointure croisée avec des exemples fonctions de date, différence de date oracle en années, différence de date oracle en jours, différence de date oracle en mois.
JSON dans oracle :consultez cet article sur l'utilisation de JSON dans oracle, comment créer une table contenant pour extraire, insérer les données JSON dans oracle
Tuto Oracle Sql :Listing de toutes les leçons du tuto sql permettant de maîtriser sql et d'utiliser dans Oracle, la gestion et la manipulation des données
https://livesql. oracle.com/apex/livesql/file/tutorial_GMLYIBY74FPBS888XO8F1R95I.html