Vous êtes sur la page 1sur 36

TP: La Jointure sous Oracle

2 La Jointure Sous Oracle

 Une jointure met en relation deux tables sur la base d’une clause de jointure
(comparaison de colonnes).

 Généralement, cette comparaison fait intervenir une clé étrangère d’une table avec une
clé primaire d’une autre table (le modèle relationnel est basé sur les valeurs).
3 Types de jointure

Obtenir des resultats qui combinent les données de plusieurs tables

 INNER JOIN : Les jointures les plus communes.


 CROSS JOIN : le produit cartésien de 2 tables.
 LEFT JOIN (ou LEFT OUTER JOIN)
 RIGHT JOIN (ou RIGHT OUTER JOIN)
 FULL JOIN (ou FULL OUTER JOIN)
 SELF JOIN
 NATURAL JOIN
4 Lancement de SQLDeveloper

 Vérifier les service Oracle


 Lancer SQLDeveloper
 Connecter a votre database
5 Step 0: Creation des tableaux
Prerequisite SQL
 Créer deux tableaux
 Table utilisateur, Table commande

CREATE TABLE utilisateur CREATE TABLE commande

( (

ID INT PRIMARY KEY NOT NULL, CID INT PRIMARY KEY NOT NULL,

nom VARCHAR(100), Num_fac VARCHAR2(15),

ville VARCHAR(100) Prix VARCHAR2(20),

) Id_utilisateur INT NOT NULL


)
Commit;
6 Step 0: Creation des tableaux
7 Step 1:insertion des enregistrements
 Inserer les utilisateurs  Inserer les commandes
INSERT INTO utilisateur(id, nom, ville)
INSERT INTO commande (cid, num_fac, prix, id_utilisateur)
VALUES(10, 'Ahmed', 'Ouargla');
VALUES (200, 'F001', '500',11);
INSERT INTO utilisateur(id, nom, ville)
INSERT INTO commande (cid, num_fac, prix, id_utilisateur)
VALUES(11, 'Mourad', 'paris');
VALUES(201, 'F002', '320',12);
INSERT INTO utilisateur(id, nom, ville)
INSERT INTO commande (cid, num_fac, prix, id_utilisateur)
VALUES(12, 'Meriem', 'Madrid');
VALUES(202, 'F003', '456',15);
INSERT INTO utilisateur(id, nom, ville)
INSERT INTO commande (cid, num_fac, prix, id_utilisateur)
VALUES(13, 'Asma', 'Rabat');
VALUES(203, 'F004', '987',10);
INSERT INTO utilisateur(id, nom, ville)
INSERT INTO commande (cid, num_fac, prix, id_utilisateur)
VALUES(14, 'soumia', 'Ouargla');
VALUES(204, 'F005', '326',11);
8 Step 1:insertion des enregistrements

INSERT ALL
INTO t (col1, col2, col3) VALUES ('val1_1', 'val1_2', 'val1_3')
INTO t (col1, col2, col3) VALUES ('val2_1', 'val2_2', 'val2_3')
INTO t (col1, col2, col3) VALUES ('val3_1', 'val3_2', 'val3_3')
.
.
.
SELECT 1 FROM DUAL;

To insert multiple lines at once, use Select * from dual


9 Step 1:insertion des enregistrements
10 SQL CROSS JOIN

 Permet de retourner le produit cartesien.

SELECT * SELECT *
FROM table1, table2 FROM table1
CROSS JOIN table2

Application: Cross Join


SELECT *
SELECT *
FROM utilisateur,
FROM utilisateur
commande
CROSS JOIN
commande
11 SQL CROSS JOIN: Application
12 SQL INNER JOIN

 Retourne les enregistrements lorsqu'il y a au moins une ligne dans chaque colonne qui
correspond a la condition.

SELECT *
FROM table1
INNER JOIN table2 ON table1.id =
table2.fk_id

SELECT *
FROM table1
JOIN table2 ON table1.id = table2.fk_id

SELECT *
FROM table1, table 2
WHERE table1.id = table2.fk_id
13 SQL INNER JOIN
Afficher toutes les commandes avec le nom et ville de l'utilisateur correspondant

SELECT *
FROM utilisateur
INNER JOIN commande ON utilisateur.id=
commande.id_utilisateur
SELECT *
FROM utilisateur
JOIN commande ON utilisateur.id= commande.id_utilisateur

SELECT *
FROM utilisateur,commande
WHERE utilisateur.id= commande.id_utilisateur
14 SQL INNER JOIN: Application
15 SQL LEFT JOIN ou LEFT OUTER JOIN

SELECT *
FROM table1
LEFT JOIN table2 ON table1.id = table2.fk_id

SELECT *
FROM table1
LEFT OUTER JOIN table2 ON table1.id = table2.fk_id
16 SQL LEFT JOIN ou LEFT OUTER JOIN

Lister tous les utilisateurs avec leurs commandes et afficher egalement les utilisateurs qui
n'ont pas effectué d'achats

SELECT *
FROM utilisateur
LEFT JOIN commande ON utilisateur.id = commande.id_utilisateur
17 SQL LEFT JOIN : Application
18 SQL LEFT JOIN (if Null)

Lister les utilisateurs qui n'ont pas effectues d'achats

SELECT *
FROM utilisateur
LEFT JOIN commande ON utilisateur.id = commande.id_utilisateur
WHERE id_utilisateur IS NULL
19 SQL LEFT JOIN (if Null): Application
20 SQL RIGHT JOIN ou RIGHT OUTER
JOIN

Afficher toutes les commandes avec le nom et ville de l'utilisateur correspondant

Cas des utilisateurs supprimés

SELECT *
FROM table1
RIGHT JOIN table2 ON table1.id = table2.fk_id

SELECT *
FROM utilisateur
RIGHT JOIN commande ON utilisateur.id =commande.id_utilisateur
21 SQL RIGHT JOIN: Application
22 SQL RIGHT JOIN (If Null)

Lister les utilisateurs qui n'ont pas effectues d'achats

SELECT *
FROM utilisateur
RIGHT JOIN commande ON utilisateur.id = commande.id_utilisateur
WHERE id IS NULL
23 SQL RIGHT JOIN (If Null): Application
24 SQL FULL JOIN ou FULL OUTER JOIN

SELECT *
FROM table1
FULL JOIN table2 ON table1.id = table2.fk_id

Lister tous les utilisateurs ayant effectue ou non une vente,


et de lister toutes les ventes qui sont associées ou non a un utilisateur

SELECT id, nom, id_utilisateur, num_fac


FROM utilisateur
FULL JOIN commande ON utilisateur.id =
commande.id_utilisateur
25 SQL FULL JOIN: Application
26 Types de jointure

Obtenir des resultats qui combinent les données de plusieurs tables

 INNER JOIN : Les jointures les plus communes.


 CROSS JOIN : le produit cartésien de 2 tables.
 LEFT JOIN (ou LEFT OUTER JOIN)
 RIGHT JOIN (ou RIGHT OUTER JOIN)
 FULL JOIN (ou FULL OUTER JOIN)
 SELF JOIN
 NATURAL JOIN
27 SELF JOIN

 Joindre la table avec lui-meme


 A self join is a join that joins a table with itself. A self join is useful for comparing rows
within a table or querying hierarchical data.
 A self join uses other joins such as inner join and left join. In addition, it uses the 
table alias to assign the table different names in the same query.
 Note that referencing the same table more than once in a query without using table aliases
 cause an error.
28 SELF JOIN

- Drop table utilisateur;

CREATE TABLE utilisateur


Nom Nom Père Ville
(
ID INT PRIMARY KEY NOT NULL,
nom VARCHAR(100),
ID_pere INT,
ville VARCHAR(100)
)
29 SELF JOIN

INSERT INTO utilisateur(id, nom, id_pere,ville)


VALUES(10, 'Ahmed', '','Ouargla');
INSERT INTO utilisateur(id, nom, id_pere,ville)
VALUES(11, 'Mourad', '10','paris');
INSERT INTO utilisateur(id, nom, id_pere,ville)
VALUES(12, 'Meriem','10', 'Madrid');
INSERT INTO utilisateur(id, nom, id_pere,ville)
VALUES(13, 'Asma', '11','Rabat');
INSERT INTO utilisateur(id, nom, id_pere,ville)
VALUES(14, 'soumia', '11','Ouargla');
30 SELF JOIN: Application

SELECT
e.nom,
(m.nom) Nom_pere,
e.ville
FROM
utilisateur e
LEFT JOIN utilisateur m ON
m.id = e.id_pere
ORDER BY
Nom_pere;
31 NATURAL JOIN

 A variant on an INNER JOIN.


 The join columns are determined implicitly, based
on the column names.
 Any columns that share the same name between
the two tables are assumed to be join columns.
32 NATURAL JOIN

CREATE TABLE etudiant CREATE TABLE utilisateur


(
(
ID_etud INT PRIMARY KEY NOT NULL,
ID INT PRIMARY KEY NOT NULL,
nom VARCHAR(100),
nom VARCHAR(100),
universite VARCHAR(100)
ID_pere INT,
)
ville VARCHAR(100)

)
33 NATURAL JOIN

INSERT INTO etudiant(id_etud, nom, universite)


VALUES(20, 'Ahmed','univ Ouargla');
INSERT INTO etudiant(id_etud, nom, universite)
VALUES(21, 'Salim', 'univ paris');
INSERT INTO etudiant(id_etud, nom, universite)
VALUES(22, 'Noura', 'univ Madrid');
INSERT INTO etudiant(id_etud, nom, universite)
VALUES(23, 'Asma','univ Rabat');
INSERT INTO etudiant(id_etud, nom, universite)
VALUES(24, 'souad','univ Ouargla');
 
34 NATURAL JOIN : Application

We can’t use the attributs of the Natural Join


They are implicitly used
35
End TP Jointure
36 La table (pseudo-table DUAL)

La table DUAL est une table utilisable par tous (en lecture
seulement) et qui appartient à l’utilisateur
SYS.
un seul enregistrement avec la valeur «  X »
seule l’instruction SELECT est permise sur DUAL SELECT
expression FROM DUAL

Vous aimerez peut-être aussi