Copyright © Oracle Corporation, 1997. Tous droits réservés.
88
Sous-Interrogations Multi-colonne
www.TelechargerCours.com
8-2 Copyright © Oracle Corporation, 1997. Tous droits réservés.
Objectifs
A la fin de ce chapitre, vous saurez :A la fin d...
8-3 Copyright © Oracle Corporation, 1997. Tous droits réservés.
Sous-Interrogations Multi-colonne
Requête principale
MANAG...
8-4 Copyright © Oracle Corporation, 1997. Tous droits réservés.
syntaxe
SELECT column, column, ….
FROM table
WHERE (column...
8-5 Copyright © Oracle Corporation, 1997. Tous droits réservés.
Utilisation des Sous-
Interrogations Multi-colonne
Affiche...
8-6 Copyright © Oracle Corporation, 1997. Tous droits réservés.
Comparaison de Colonnes
Par groupe de colonnes
SAL COMM
16...
8-7 Copyright © Oracle Corporation, 1997. Tous droits réservés.
Sous-Interrogation avec
Comparaison Colonne par Colonne
SQ...
8-8 Copyright © Oracle Corporation, 1997. Tous droits réservés.
Modification de la Table EMP
• Supposons que le salaire et...
8-9 Copyright © Oracle Corporation, 1997. Tous droits réservés.
Comparaison par Groupe de
Colonne
SQL> SELECT ename, deptn...
8-10 Copyright © Oracle Corporation, 1997. Tous droits réservés.
SQL> SELECT ename,deptno, sal, comm
2 FROM emp
3 WHERE sa...
8-11 Copyright © Oracle Corporation, 1997. Tous droits réservés.
Valeurs NULL dans une Sous-
Interrogation
SQL> SELECT emp...
8-12 Copyright © Oracle Corporation, 1997. Tous droits réservés.
Utilisation d'une Sous-intérogation
dans la Clause FROM
S...
8-13 Copyright © Oracle Corporation, 1997. Tous droits réservés.
Résumé
• Une sous-interrogation multi-colonne
ramène plus...
Upcoming SlideShare
Loading in...5
×

Sous-Interrogations Multi-colonne | SQL Oracle

609

Published on

Sous-Interrogations Multi-colonne | SQL Oracle. Telecharger cours dba oracle gratuit

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
609
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
53
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • Objectifs Au cours de ce chapitre, vous allez apprendre à écrire des sous-interrogations multi-colonne et des sous-interrogations dans la clause FROM d'un ordre SELECT.
  • Sous-Interrogations Multi-colonne Jusqu'à maintenant, vous avez écrit des sous-interrogations mono-ligne et multi-ligne dans lesquelles une seule colonne était comparée via la clause WHERE ou HAVING de l'ordre SELECT principal. Si vous voulez comparer plusieurs colonnes, vous devez écrire une clause WHERE composée utilisant des opérateurs logiques. Les sous-interrogations multi-colonne vous permettent de combiner plusieurs conditions WHERE dans une même clause WHERE. Syntaxe SELECT column, column , ... FROM table WHERE ( column, column , ...) IN (SELECT column, column , ... FROM table WHERE condition );
  • Utilisation des Sous-Interrogations Multi-colonne La sous-interrogation ci-dessus, qui ramène plusieurs colonnes, est un exemple de sous-interrogation multi-colonne. Elle compare la colonne SAL et la colonne COMM. Elle affiche le nom, le numéro de département, le salaire et la commission de tout employé dont le salaire et la commission correspondent à la fois aux salaire et commission d'un des employés du département 30. L'ordre SQL ci-dessus donnera les résultats suivants : ENAME DEPTNO SAL COMM ---------- --------- --------- --------- JAMES 30 950 WARD 30 1250 500 MARTIN 30 1250 1400 TURNER 30 1500 0 ALLEN 30 1600 300 BLAKE 30 2850 6 rows selected.
  • Utilisation des Sous-Interrogations Multi-colonne La sous-interrogation ci-dessus, qui ramène plusieurs colonnes, est un exemple de sous-interrogation multi-colonne. Elle compare la colonne SAL et la colonne COMM. Elle affiche le nom, le numéro de département, le salaire et la commission de tout employé dont le salaire et la commission correspondent à la fois aux salaire et commission d'un des employés du département 30. L'ordre SQL ci-dessus donnera les résultats suivants : ENAME DEPTNO SAL COMM ---------- --------- --------- --------- JAMES 30 950 WARD 30 1250 500 MARTIN 30 1250 1400 TURNER 30 1500 0 ALLEN 30 1600 300 BLAKE 30 2850 6 rows selected.
  • Comparaisons " par Groupe de Colonnes" versus "Colonne par Colone" Dans une sous-interrogation multi-colonne, les comparaisons peuvent être effectuées "par groupe de colonnes" ou "colonne par colonne". Dans l'exemple de la diapositive précédente, la comparaison exécutée dans la clause WHERE est faite par groupe de colonnes: chaque ligne rapportée par l'ordre SELECT doit comporter à la fois le même salaire et la même commission qu'un employé du département 30. Pour effectuer une comparaison par groupe de colonnes, utilisez une clause WHERE avec seule condition faisant intervenir les différentes colonnes. Pour effectuer une comparaison colonne par colonne (produit cartésien), utilisez une clause WHERE avec de multiples conditions, chaque condition faisant intervenir une colonne.
  • Sous-Interrogation Effectuant une Comparaison Colonne par Colonne L'exemple ci-dessus effectue une comparaison colonne par colonne. Il affiche le nom, le numéro de département, le salaire et la commission de tout employé dont le salaire et la commission correspondent au salaire et à la commission d'un employé du département 30. L'ordre SQL ci-dessus donnera le résultat suivant : Le résultat des deux dernières requêtes est identique bien que les conditions de comparaison diffèrent. Cela s'explique par la nature des données présentes dans la table EMP. ENAME DEPTNO SAL COMM ---------- --------- --------- --------- JAMES 30 950 BLAKE 30 2850 TURNER 30 1500 0 ALLEN 30 1600 300 WARD 30 1250 500 MARTIN 30 1250 1400 6 rows selected.
  • Exemple Supposons que le salaire et la commission de l'employé Clark soient modifiés de telle sorte qu'il ait le même salaire qu'un employé du département 30 et la même commission qu'un autre employé du département 30. Le salaire de Clark est désormais égal à celui de Turner ($1500) et sa commission est la même que celle d'Allen ($300). Nous allons maintenant exécuter une comparaison par groupe de colonnes puis colonne par colonne pour voir combien de lignes sont ramenées dans chaque cas. Remarque : la syntaxe à utiliser pour mettre à jour les données d'une table sera traitée au cours du chapitre 9.
  • Sous-Interrogation avec Comparaison par Groupe de Colonnes Les résultats de la sous-interrogation avec comparaison par groupe de colonnes ne changent pas et ramènent toujours six lignes.
  • Sous-Interrogation avec Comparaison Colonne par Colonne Le résultat de la sous-interrogation avec comparaison colonne par colonne inclut l'employé Clark puisque maintenant, son salaire est le même que celui de Turner et sa commission identique à celle d'Allen.
  • Présence d'une Valeur NULL dans les Résultats d'une Sous-Interrogation L'ordre SQL ci-dessus tente d'afficher tous les employés n'ayant pas de subordonné. L'ordre SQL ne ramène aucune ligne alors que logiquement, il aurait dû en renvoyer huit. En fait, l'une des valeurs ramenées par la sous-interrogation étant une valeur NULL, la requête principale ne renvoie aucune ligne. En effet, quand dans une interrogation, on utilise un opérateur de comparaison (=,>, <,...) pour comparer une valeur à NULL, cette interrogation retourne zéro ligne. NULL ne peut être testé qu'avec les opérateurs IS NULL et IS NOT NULL. C'est pourquoi, chaque fois que les résultats d'une sous-interrogation risquent de contenir des valeurs NULL, vous ne devez pas utiliser l'opérateur NOT IN. L'opérateur NOT IN est l'équivalent de !=ALL. En revanche, la présence d'une valeur NULL dans le résultat d'une sous-interrogation ne posera pas de problème si vous utilisez l'opérateur IN. Celui-ci est l'équivalent de =ANY. Par exemple, pour afficher les employés qui ont des subordonnés, utilisez l'ordre SQL suivant : SQL> SELECT employee.ename 2 FROM emp employee 3 WHERE employee.empno IN (SELECT manager.mgr 4 FROM emp manager); ENAME ---------- KING … 6 rows selected.
  • Utilisation d'une Sous-Interrogation dans la Clause FROM Vous pouvez utiliser une sous-interrogation dans la clause FROM d'un ordre SELECT. Cette méthode présente de nombreuses similitudes avec le mode d'utilisation des vues. L'exemple ci-dessus affiche le nom, le salaire, le numéro de département et le salaire moyen du département pour tous les employés gagnant plus que le salaire moyen de leur département.
  • Sous-Interrogations Multi-colonne | SQL Oracle

    1. 1. Copyright © Oracle Corporation, 1997. Tous droits réservés. 88 Sous-Interrogations Multi-colonne www.TelechargerCours.com
    2. 2. 8-2 Copyright © Oracle Corporation, 1997. Tous droits réservés. Objectifs A la fin de ce chapitre, vous saurez :A la fin de ce chapitre, vous saurez : • Ecrire une sous-interrogation multi- colonne • Décrire et expliquer le comportement des sous-interrogations lorsqu'elles trouvent des valeurs NULL • Ecrire une sous-interrogation dans une clause FROM www.TelechargerCours.com
    3. 3. 8-3 Copyright © Oracle Corporation, 1997. Tous droits réservés. Sous-Interrogations Multi-colonne Requête principale MANAGER 10 sous-interrogation SALESMAN 30 MANAGER 10 CLERK 20 La requêteLa requête principaleprincipale comparecompare MANAGER 10MANAGER 10 Valeurs d'une sous-interrogationValeurs d'une sous-interrogation multi-ligne et multi-colonnemulti-ligne et multi-colonne SALESMANSALESMAN 3030 MANAGERMANAGER 1010 CLERKCLERK 2020 auxaux www.TelechargerCours.com
    4. 4. 8-4 Copyright © Oracle Corporation, 1997. Tous droits réservés. syntaxe SELECT column, column, …. FROM table WHERE (column, column, ….) IN (SELECT column, column, …. FROM table WHERE condition); www.TelechargerCours.com
    5. 5. 8-5 Copyright © Oracle Corporation, 1997. Tous droits réservés. Utilisation des Sous- Interrogations Multi-colonne Afficher le nom, le numéro de département, leAfficher le nom, le numéro de département, le salaire et la commission de tout employé dont lesalaire et la commission de tout employé dont le salaire et la commission correspondentsalaire et la commission correspondent à la foisà la fois aux salaire et commission d'un des employé duaux salaire et commission d'un des employé du département 30.département 30. SQL> SELECT ename, deptno, sal, comm FROM emp WHERE (sal, NVL(comm,-1)) IN (SELECT sal, NVL(comm,-1) FROM emp WHERE deptno = 30);
    6. 6. 8-6 Copyright © Oracle Corporation, 1997. Tous droits réservés. Comparaison de Colonnes Par groupe de colonnes SAL COMM 1600 300 1250 500 1250 1400 2850 1500 0 950 Colonne par colonne SAL COMM 1600 300 1250 500 1250 1400 2850 1500 0 950 www.TelechargerCours.com
    7. 7. 8-7 Copyright © Oracle Corporation, 1997. Tous droits réservés. Sous-Interrogation avec Comparaison Colonne par Colonne SQL> SELECT ename, deptno, sal, comm 2 FROM emp 3 WHERE sal IN (SELECT sal 4 FROM emp 5 WHERE deptno = 30) 6 AND 7 NVL(comm,-1) IN (SELECT NVL(comm,-1) 8 FROM emp 9 WHERE deptno = 30); Afficher le nom, le n° de département, le salaireAfficher le nom, le n° de département, le salaire et la commission de tout employé dont leet la commission de tout employé dont le salaire et la commission correspondent ausalaire et la commission correspondent au salaire et à la commission d'un des employéssalaire et à la commission d'un des employés du département 30.du département 30.
    8. 8. 8-8 Copyright © Oracle Corporation, 1997. Tous droits réservés. Modification de la Table EMP • Supposons que le salaire et la commission de l'employé Clark soient modifiés. • Le salaire passe à $1500 et la commission à $300. ENAME SAL COMM ---------- --------- --------- ... CLARK 1500 300 ... ALLEN 1600 300 TURNER 1500 0 ... 14 rows selected. www.TelechargerCours.com
    9. 9. 8-9 Copyright © Oracle Corporation, 1997. Tous droits réservés. Comparaison par Groupe de Colonne SQL> SELECT ename, deptno, sal, comm 2 FROM emp 3 WHERE (sal, NVL(comm,-1)) IN 4 (SELECT sal, NVL(comm,-1) 5 FROM emp 6 WHERE deptno = 30); ENAME DEPTNO SAL COMM ---------- --------- --------- --------- JAMES 30 950 WARD 30 1250 500 MARTIN 30 1250 1400 TURNER 30 1500 0 ALLEN 30 1600 300 BLAKE 30 2850 6 rows selected. ENAME DEPTNO SAL COMM ---------- --------- --------- --------- JAMES 30 950 WARD 30 1250 500 MARTIN 30 1250 1400 TURNER 30 1500 0 ALLEN 30 1600 300 BLAKE 30 2850 6 rows selected.
    10. 10. 8-10 Copyright © Oracle Corporation, 1997. Tous droits réservés. SQL> SELECT ename,deptno, sal, comm 2 FROM emp 3 WHERE sal IN (SELECT sal 4 FROM emp 5 WHERE deptno = 30) 6 AND 7 NVL(comm,-1) IN (SELECT NVL(comm,-1) 8 FROM emp 9 WHERE deptno = 30); Comparaison Colonne par Colonne ENAME DEPTNO SAL COMM ---------- --------- --------- --------- JAMES 30 950 BLAKE 30 2850 TURNER 30 1500 0 CLARK 10 1500 300 ... 7 rows selected.
    11. 11. 8-11 Copyright © Oracle Corporation, 1997. Tous droits réservés. Valeurs NULL dans une Sous- Interrogation SQL> SELECT employee.ename 2 FROM emp employee 3 WHERE employee.empno NOT IN (SELECT manager.mgr FROM emp manager); no rows selected.no rows selected. www.TelechargerCours.com
    12. 12. 8-12 Copyright © Oracle Corporation, 1997. Tous droits réservés. Utilisation d'une Sous-intérogation dans la Clause FROM SQL> SELECT a.ename, a.sal, a.deptno, b.salavg 2 FROM emp a, (SELECT deptno, avg(sal) salavg 3 FROM emp 4 GROUP BY deptno) b 5 WHERE a.deptno = b.deptno 6 AND a.sal > b.salavg;
    13. 13. 8-13 Copyright © Oracle Corporation, 1997. Tous droits réservés. Résumé • Une sous-interrogation multi-colonne ramène plus d'une colonne. • Dans une sous-interrogation multi- colonne, les comparaisons de colonnes peuvent être effectuées par groupe de colonne ou colonne par colonne. • Une sous-interrogation multi-colonne peut également s'utiliser dans la clause FROM d'un ordre SELECT. www.TelechargerCours.com
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×