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