0% ont trouvé ce document utile (0 vote)
46 vues6 pages

Comprendre les Jointures SQL

Ce document décrit différents types de jointures SQL, notamment les jointures internes, externes, complètes et croisées. Il contient des exemples d'utilisation de ces jointures sur plusieurs tables avec des requêtes SQL.

Transféré par

cic7106
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
46 vues6 pages

Comprendre les Jointures SQL

Ce document décrit différents types de jointures SQL, notamment les jointures internes, externes, complètes et croisées. Il contient des exemples d'utilisation de ces jointures sur plusieurs tables avec des requêtes SQL.

Transféré par

cic7106
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

********************** INNER JOIN ****************************************

USE [BDD]
go
-- creation de deux tables pour exemple

create table commande (Numerodecommande int,IDclient int)


go
create table client (nom varchar (200),prenom varchar (200), IDclient int, adresse
varchar(2000),ville varchar(200))

-- Insertion de valeur dans les tables

insert into commande values


('3712',1),
('4851',2),
('6712',3),
('3215',4),
('3218',5),
('3220',6),
('3221',7),
('3227',8),
('3238',9)

insert into client values


('Thuillier','Olivier',1,'7 Rue poirier','Dreux'),
('Thuillier','Luc',3,'78 avenue de paris','Paris'),
('Thuillier','Théodore',5,'15 Rue asterdam','Asterdam'),
('Thuillier','Zinédine',12,'7 Rue Prague','Prague'),
('Thuillier','Lucas',13,'7 Rue Vienne','Vienne')

-- Que donne les deux Select

select * from commande


go
select * from client

-- ok premiere question je veux les clients qui ont un numéro de commande

select [Link],[Link],[Link],[Link] from commande A

inner join client B

On [Link]=[Link]

--Je veux aussi le nom et prenom des personnes

select [Link], [Link],[Link],[Link] from commande A

inner join table_client B

on [Link] =[Link]

-- le INNER Join est complétement facultatif...

select [Link], [Link],[Link],[Link] from commande A


join client B

on [Link] =[Link]

-- Contrairement a une idée recue,il y aussi aucune incidence sur l'ordre des jointures
dans la jointure elle meme

select [Link], [Link],[Link],[Link] from commande A

join client B

on [Link] =[Link]

go

select [Link], [Link],[Link],[Link] from commande A -- On change l'ordre


de jointure des deux colonnes

join client B

on [Link] =[Link] -- On change l'ordre de jointure des deux colonnes

********************* LEFT/RIGHT JOIN ****************************************


USE [BDD]
go

-- On reprend les deux mêmes tables :

-- Que donne les deux Select

select * from commande


go
select * from client

-- Question: Quel client n'est pas rattaché a un IDCLIENT dans la table commande?

select [Link], [Link],[Link] from client B

left join commande A

on [Link] =[Link]

-- Ca ne marche pas et pourquoi pas avec le filtre IS NULL pour ramener que les valeurs
qui ne correspondent qu'a la table de gauche ?

select [Link],[Link],[Link] from client B

left join commande A

on [Link] =[Link]

where [Link] is NULL

-- La Ca fontionne

-- On voit parfois la valeur OUTER qui est facultatif

select [Link],[Link],[Link] from client B


left outer join commande A

on [Link] =[Link]

where [Link] is NULL

-- Question: On peut recommencer la meme operation avec le RIGHT JOIN en inversant les
tables

select [Link],[Link],[Link] from commande A

right join client B

on [Link] =[Link]

where [Link] is NULL

-- On voit parfois la valeur OUTER qui est facultatif

select [Link],[Link],[Link] from commande A

right outer join client B

on [Link] =[Link]

where [Link] is NULL

********************** FULL OUTER JOIN ***********************************


USE [BDD]
go

-- c'est parti pour la requete en FULL OUTER JOIN avec les deux SELECT en meme temps

select [Link],[Link] from commande A

full outer join table_client B

on [Link] =[Link]

select * from commande


go
select * from Table_client

-- On voit qu'il y a toutes les lignes de la table commande qui sont ramenés de 1 a 9
-- On voit les 2 NULL en bas car 12 et 13 n'est pas reference dans la table client (valeur
12 et 13)

-- Pour mieux comprendre changeons l'ordre de la jointure, en jouant avec les deux SELECT

select [Link],[Link] from table_client B

full outer join commande A

on [Link] =[Link]
select * from commande
go
select * from Table_client

-- On voit qu'il y a toutes les lignes de la table client (1,3,5,12,13)


-- On voit les 5 NULL qui correspondent a la table commande (2,4,6,8,9)

-- et si on rajouter le ISNULL pour le filtre

select * from commande


go
select * from Table_client

select * from commande A

full outer join table_client B

on [Link] =[Link]

where [Link] is null

-- La OUTER est il facultatif ?

select * from commande A

full outer join table_client B

on [Link] =[Link]

where [Link] is null

********************** CROSS JOIN ****************************************


********************************************************************************/
USE [BDD]
go
-- Que donne les deux Select

select * from commande


go
select * from Table_client

-- On voit qu'il y a comme colonne en commum l'IDclient

-- c'est parti pour la requete

select * from commande A

cross join table_client B

-- On voit qu'il y a 45 lignes, 9 lignes dans la table commande et 5 lignes dans la table
table_client
-- donc 9*5 = 45 lignes
-- on voit qu'en faisant un select * de la table commande que Thuillier olivier est
multiplié sur sur les 9 premieres lignes de la table table_client

-- Et si on change l'ordre de jointure ?


-- Que donne les deux Select

select * from commande


go
select * from Table_client

-- et la jointure

select * from table_client B

cross join commande A

-- On voit qu'il y a 45 lignes, 9 lignes dans la table commande et 5 lignes dans la table
table_client
-- donc 9*5 = lignes

USE [BDD]
go

-- Créons un troisiéme table

Create table carte_fidelité (Fidele char(3), IDCLIENT int)

-- Et insérons quelques valeurs

insert into carte_fidelité values


('OUI', 1),
('OUI', 2),
('NON', 3),
('OUI', 4),
('NON', 5),
('OUI', 6),
('NON', 7),
('OUI', 8),
('OUI', 9),
('NON', 10),
('OUI', 11),
('NON', 12)

-- Si on fait les trois SELECT ?

select * from commande


go
select * from client
go
select * from carte_fidelité

-- Question : je veux les clients qui ont bien un numéro de commande


-- mais aussi qui ont une carte de fidélité

-- c'est parti pour la requete sur la jointure sur plusieurs tables

select [Link] from commande A


inner join client B

on [Link]=[Link]

inner join carte_fidelité C

on [Link]=[Link]

where [Link]='OUI'

select * from commande


go
select * from client

-- On voit qu'il y a toutes les lignes de la table commande qui sont ramenés de 1 a 9
-- On voit les 2 NULL en bas car 12 et 13 n'est pas reference dans la table client (valeur
12 et 13)

-- si on essaye prend [Link] on aura logiquement 1,3,5,12,13

select [Link] from commande A

full outer join client B

on [Link] =[Link]

select * from commande


go
select * from client

-- Pour enlever les valeurs concordantes on doit rajouter le filtre isnull

select * from commande A

full outer join client B

on [Link] =[Link]

where [Link] is null

select * from commande


go
select * from client

-- Est ce que le OUTER join est facultatif ?

select * from commande A

full join client B

on [Link] =[Link]

where [Link] is null

Vous aimerez peut-être aussi