La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

5 Copyright © 2004, Oracle. Tous droits réservés. Afficher des données de plusieurs tables.

Présentations similaires


Présentation au sujet: "5 Copyright © 2004, Oracle. Tous droits réservés. Afficher des données de plusieurs tables."— Transcription de la présentation:

1 5 Copyright © 2004, Oracle. Tous droits réservés. Afficher des données de plusieurs tables

2 Copyright © 2004, Oracle. Tous droits réservés. Objectifs A la fin de ce chapitre, vous pourrez : écrire des instructions SELECT afin d'accéder aux données de plusieurs tables à l'aide d'équijointures et de non-équijointures joindre une table à elle-même à l'aide d'une auto- jointure afficher des données qui ne satisfont généralement pas à une condition de jointure, à l'aide de jointures externes générer un produit cartésien de toutes les lignes de plusieurs tables

3 Copyright © 2004, Oracle. Tous droits réservés. Obtenir des données de plusieurs tables EMPLOYEES DEPARTMENTS … …

4 Copyright © 2004, Oracle. Tous droits réservés. Types de jointure Les jointures conformes à la norme SQL:1999 sont les suivantes : Jointures croisées Jointures naturelles Clause USING Jointures externes complètes (gauche et droite) Conditions de jointure arbitraires pour les jointures externes

5 Copyright © 2004, Oracle. Tous droits réservés. Joindre des tables à l'aide de la syntaxe SQL : 1999 Utilisez une jointure pour interroger des données provenant de plusieurs tables : SELECTtable1.column, table2.column FROMtable1 [NATURAL JOIN table2] | [JOIN table2 USING (column_name)] | [JOIN table2 ON (table1.column_name = table2.column_name)]| [LEFT|RIGHT|FULL OUTER JOIN table2 ON (table1.column_name = table2.column_name)]| [CROSS JOIN table2];

6 Copyright © 2004, Oracle. Tous droits réservés. Créer des jointures naturelles La clause NATURAL JOIN est basée sur toutes les colonnes des deux tables portant le même nom. Elle sélectionne les lignes des deux tables dont les valeurs sont identiques dans toutes les colonnes qui correspondent. Si les colonnes portant le même nom présentent des types de données différents, une erreur est renvoyée.

7 Copyright © 2004, Oracle. Tous droits réservés. SELECT department_id, department_name, location_id, city FROM departments NATURAL JOIN locations ; Extraire des enregistrements à l'aide de jointures naturelles

8 Copyright © 2004, Oracle. Tous droits réservés. Créer des jointures avec la clause USING Si plusieurs colonnes portent le même nom, mais que les types de données ne correspondent pas, la clause NATURAL JOIN peut être modifiée avec la clause USING, laquelle permet de désigner les colonnes qui doivent être utilisées pour une équijointure. Utilisez la clause USING pour n'indiquer qu'une seule colonne lorsque plusieurs colonnes correspondent. N'utilisez pas de nom ou alias de table dans les colonnes référencées. Les clauses NATURAL JOIN et USING sont mutuellement exclusives.

9 Copyright © 2004, Oracle. Tous droits réservés. Joindre des noms de colonne EMPLOYEES DEPARTMENTS Clé étrangèreClé primaire … …

10 Copyright © 2004, Oracle. Tous droits réservés. SELECT employees.employee_id, employees.last_name, departments.location_id, department_id FROM employees JOIN departments USING (department_id) ; Extraire des enregistrements avec la clause USING …

11 Copyright © 2004, Oracle. Tous droits réservés. Différencier les noms de colonne Utilisez des préfixes qui précisent le nom de la table pour différencier les noms de colonne présents dans plusieurs tables. L'utilisation de préfixes désignant la table améliore les performances. Utilisez des alias de colonne pour distinguer les colonnes qui présentent des noms identiques, mais qui résident dans des tables différentes. N'utilisez pas d'alias sur les colonnes identifiées dans la clause USING et indiquées ailleurs dans l'instruction SQL.

12 Copyright © 2004, Oracle. Tous droits réservés. SELECT e.employee_id, e.last_name, d.location_id, department_id FROM employees e JOIN departments d USING (department_id) ; Utiliser des alias de table Utilisez des alias de table pour simplifier les interrogations. Utilisez des alias de table pour améliorer les performances.

13 Copyright © 2004, Oracle. Tous droits réservés. Créer des jointures avec la clause ON La condition de la jointure naturelle est une équijointure de toutes les colonnes portant le même nom. Utilisez la clause ON pour indiquer des conditions arbitraires ou pour désigner les colonnes à joindre. La condition de jointure est distincte des autres conditions de recherche. La clause ON facilite la compréhension du code.

14 Copyright © 2004, Oracle. Tous droits réservés. SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e JOIN departments d ON (e.department_id = d.department_id); Extraire des enregistrements avec la clause ON …

15 Copyright © 2004, Oracle. Tous droits réservés. Auto-jointures avec la clause ON MANAGER_ID dans la table WORKER est égal à EMPLOYEE_ID dans la table MANAGER. EMPLOYEES (WORKER)EMPLOYEES (MANAGER) … …

16 Copyright © 2004, Oracle. Tous droits réservés. Auto-jointures avec la clause ON SELECT e.last_name emp, m.last_name mgr FROM employees e JOIN employees m ON (e.manager_id = m.employee_id); …

17 Copyright © 2004, Oracle. Tous droits réservés. SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e JOIN departments d ON (e.department_id = d.department_id) AND e.manager_id = 149 ; Appliquer des conditions supplémentaires à une jointure

18 Copyright © 2004, Oracle. Tous droits réservés. SELECT employee_id, city, department_name FROM employees e JOIN departments d ON d.department_id = e.department_id JOIN locations l ON d.location_id = l.location_id; Créer des jointures à trois liens avec la clause ON …

19 Copyright © 2004, Oracle. Tous droits réservés. Non-équijointures EMPLOYEESJOB_GRADES Le salaire de la table EMPLOYEES doit être compris entre le salaire le plus faible et le salaire le plus élevé de la table JOB_GRADES. …

20 Copyright © 2004, Oracle. Tous droits réservés. SELECT e.last_name, e.salary, j.grade_level FROM employees e JOIN job_grades j ON e.salary BETWEEN j.lowest_sal AND j.highest_sal; Extraire des enregistrements à l'aide de non-équijointures …

21 Copyright © 2004, Oracle. Tous droits réservés. Jointures externes EMPLOYEESDEPARTMENTS Le département 190 ne compte aucun employé. …

22 Copyright © 2004, Oracle. Tous droits réservés. Comparaison des jointures INNER et OUTER Dans la syntaxe SQL : 1999, la jointure de deux tables qui renvoie uniquement les lignes qui correspondent est une jointure interne. Une jointure entre deux tables qui renvoie les résultats de la jointure interne, ainsi que les lignes de la table de gauche (ou droite) qui ne correspondent pas, est une jointure externe gauche (ou droite). Une jointure entre deux tables qui renvoie les résultats d'une jointure interne, ainsi que les résultats d'une jointure gauche et droite, est une jointure externe complète.

23 Copyright © 2004, Oracle. Tous droits réservés. SELECT e.last_name, e.department_id, d.department_name FROM employees e LEFT OUTER JOIN departments d ON (e.department_id = d.department_id) ; LEFT OUTER JOIN …

24 Copyright © 2004, Oracle. Tous droits réservés. SELECT e.last_name, e.department_id, d.department_name FROM employees e RIGHT OUTER JOIN departments d ON (e.department_id = d.department_id) ; RIGHT OUTER JOIN …

25 Copyright © 2004, Oracle. Tous droits réservés. SELECT e.last_name, d.department_id, d.department_name FROM employees e FULL OUTER JOIN departments d ON (e.department_id = d.department_id) ; FULL OUTER JOIN …

26 Copyright © 2004, Oracle. Tous droits réservés. Produits cartésiens Un produit cartésien est généré dans les cas suivants : –Une condition de jointure est omise –Une condition de jointure n'est pas valide –Toutes les lignes de la première table sont jointes à toutes les lignes de la seconde Pour éviter un produit cartésien, incluez toujours une condition de jointure valide.

27 Copyright © 2004, Oracle. Tous droits réservés. Générer un produit cartésien Produit cartésien : 20 x 8 = 160 lignes EMPLOYEES (20 lignes) DEPARTMENTS (8 lignes) … …

28 Copyright © 2004, Oracle. Tous droits réservés. SELECT last_name, department_name FROM employees CROSS JOIN departments ; Créer des jointures croisées La clause CROSS JOIN génère le produit cartésien de deux tables. …

29 Copyright © 2004, Oracle. Tous droits réservés. Synthèse Dans ce chapitre, vous avez appris à utiliser des jointures pour afficher des données de plusieurs tables avec des : équijointures non-équijointures jointures externes auto-jointures jointures croisées jointures naturelles jointures externes complètes (gauche et droite)

30 Copyright © 2004, Oracle. Tous droits réservés. Présentation de l'exercice 5 Cet exercice porte sur les points suivants : joindre des tables à l'aide d'une équijointure effectuer des jointures externes et des auto- jointures ajouter des conditions

31 Copyright © 2004, Oracle. Tous droits réservés.

32

33

34

35

36


Télécharger ppt "5 Copyright © 2004, Oracle. Tous droits réservés. Afficher des données de plusieurs tables."

Présentations similaires


Annonces Google