C Copyright © 2004, Oracle. Tous droits réservés. Syntaxe des jointures Oracle
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 utiliser des jointures externes pour afficher les données qui ne satisfont généralement pas à une condition de jointure joindre une table à elle-même à l'aide d'une auto-jointure
Copyright © 2004, Oracle. Tous droits réservés. Obtenir des données de plusieurs tables EMPLOYEES DEPARTMENTS … …
Copyright © 2004, Oracle. Tous droits réservés. Produits cartésiens Un produit cartésien est constitué 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 deuxième table Pour éviter un produit cartésien, incluez toujours une condition de jointure valide dans une clause WHERE.
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) … …
Copyright © 2004, Oracle. Tous droits réservés. Equijointure Non-équijointure Jointure externe Auto-jointure Types de jointure Jointure croisée Jointure naturelle Clause USING Jointure externe complète (gauche et droite) Condition de jointure arbitraire pour la jointure externe Jointures conformes à la norme SQL:1999 Jointures propriétaires Oracle (versions 8 i et antérieures)
Copyright © 2004, Oracle. Tous droits réservés. Joindre des tables à l'aide de la syntaxe Oracle Utilisez une jointure pour interroger des données provenant de plusieurs tables : Ecrivez la condition de jointure dans la clause WHERE. Préfixez le nom de la colonne avec le nom de la table lorsque le même nom de colonne apparaît dans plusieurs tables. SELECTtable1.column, table2.column FROMtable1, table2 WHEREtable1.column1 = table2.column2;
Copyright © 2004, Oracle. Tous droits réservés. Equijointures EMPLOYEES DEPARTMENTS Clé étrangèreClé primaire … …
Copyright © 2004, Oracle. Tous droits réservés. SELECT employees.employee_id, employees.last_name, employees.department_id, departments.department_id, departments.location_id FROM employees, departments WHERE employees.department_id = departments.department_id; Extraire des enregistrements à l'aide d'équijointures …
Copyright © 2004, Oracle. Tous droits réservés. Conditions de recherche supplémentaires avec l'opérateur AND EMPLOYEESDEPARTMENTS … …
Copyright © 2004, Oracle. Tous droits réservés. Qualifier les noms de colonne ambigus 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.
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, departments d WHERE e.department_id = d.department_id; Utiliser des alias de table Utilisez des alias de table pour simplifier les interrogations. L'utilisation de préfixes désignant la table améliore les performances.
Copyright © 2004, Oracle. Tous droits réservés. Joindre plus de deux tables EMPLOYEESLOCATIONSDEPARTMENTS … Pour joindre n tables, un minimum de n-1 conditions de jointure est nécessaire. Par exemple, pour joindre trois tables, un minimum de deux jointures est nécessaire.
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. …
Copyright © 2004, Oracle. Tous droits réservés. Extraire des enregistrements à l'aide de non-équijointures SELECT e.last_name, e.salary, j.grade_level FROM employees e, job_grades j WHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal; …
Copyright © 2004, Oracle. Tous droits réservés. Jointures externes EMPLOYEESDEPARTMENTS Le département 190 ne compte aucun employé. …
Copyright © 2004, Oracle. Tous droits réservés. Syntaxe des jointures externes Vous utilisez une jointure externe pour voir les lignes qui ne satisfont pas à la condition de jointure. L'opérateur de jointure externe est le signe plus (+). SELECTtable1.column, table2.column FROMtable1, table2 WHEREtable1.column(+) = table2.column; SELECTtable1.column, table2.column FROMtable1, table2 WHEREtable1.column = table2.column(+);
Copyright © 2004, Oracle. Tous droits réservés. SELECT e.last_name, e.department_id, d.department_name FROM employees e, departments d WHERE e.department_id(+) = d.department_id ; Utiliser des jointures externes …
Copyright © 2004, Oracle. Tous droits réservés. Auto-jointures EMPLOYEES (WORKER)EMPLOYEES (MANAGER) MANAGER_ID dans la table WORKER est égal à EMPLOYEE_ID dans la table MANAGER. … …
Copyright © 2004, Oracle. Tous droits réservés. Joindre une table à elle-même SELECT worker.last_name || ' works for ' || manager.last_name FROM employees worker, employees manager WHERE worker.manager_id = manager.employee_id ; …
Copyright © 2004, Oracle. Tous droits réservés. Synthèse Dans cette annexe, vous avez appris à utiliser des jointures pour afficher des données de plusieurs tables à l'aide de la syntaxe propriétaire Oracle pour les versions 8 i et antérieures.
Copyright © 2004, Oracle. Tous droits réservés. Présentation de l'exercice C Cet exercice porte sur l'écriture d'interrogations pour joindre des tables à l'aide de la syntaxe oracle.
Copyright © 2004, Oracle. Tous droits réservés.