Le langage SQL

Preview:

DESCRIPTION

Le langage SQL. Opérations sur les requêtes. MCD : Modèle conceptuel de données. Fournir. Situer. Commander. Habiter. VILLES. CLIENTS. PRODUITS. FOURNISSEURS. 1,n. 1,n. Fournisseur Nom. Villes Nbh. Produit Libelle Prix Couleur Origine Stock. Client Nom. Quantite. Quantite. - PowerPoint PPT Presentation

Citation preview

Opérations sur les requêtes

MCD : Modèle conceptuel de données

PRODUITS

ProduitLibellePrixCouleurOrigineStock

CLIENTS

ClientNom

VILLES

VillesNbh

FOURNISSEURSFournisseur

Nom

Commander

Quantite

Habiter

Situer

Fournir

Quantite

1,n

1,11,n

1,n

1,n

1,n

1,1

1,n

Descriptif des tablesPRODUITS (Produit , Libelle , Prix , Couleur , Origine , Stock)

CLIENTS (Client , Nom , #Ville)

FOURNISSEURS (Founisseur , Nom , #Ville)

VILLES (Ville , Nbh)

Commander (#Client, #Produit , Quantite)

Fournir (#Founisseur, #Produit, Quantite)

La divisionQuestion

Comment afficher les numéros des clients qui ont commandé tous les produits ?

Réponse Il suffit de compter les lignes de commandes passées par

chaque client et ne retenir que ceux dont ce nombre est égal au nombre de produits.

SELECT ClientFROM CommanderGROUP BY ClientHAVING Count(DISTINCT PRODUIT) =(

SELECT Count(*) FROM PRODUITS)

Nombre de lignes de commandes par client.

Nombre de lignes de la table PRODUITS

L’UnionSELECT Colonne1, Colonne2, …, ColonneN

FROM [Table 1]

WHERE [Condition1]

UNION [ALL] (ne supprime pas les doublons)

SELECT Colonne1’, Colonne2’, …, ColonneN’

FROM [Table 1’]

WHERE [Condition2]

Le mot clé « ALL » permet de spécifier que l’on désire voir les doublons apparaitre. S’il est absent les doublons n’apparaitront pas dans le résultat de la requête.

L’Union : ExempleQuestion

Comment afficher les libellés des produits commandés par les clients numéro « 7 » ou numéro « 12 » ?

RéponseIl faut effectuer une union entre les deux ensembles

(union compatible).

L’Union : Résultat sans doublons

SELECT LibelleFROM PRODUITS A INNER JOIN Commander B ON A.Produit = B.ProduitWHERE Client = 7UNIONSELECT LibelleFROM PRODUITS A INNER JOIN Commander B ON A.produit = B.produitWHERE Client = 12

Requête A

Requête B

L’Union : Résultat avec doublons

SELECT LibelleFROM PRODUITS A INNER JOIN Commander B ON A.Produit = B.ProduitWHERE Client = 7UNION ALLSELECT LibelleFROM PRODUITS A INNER JOIN Commander B ON A.produit = B.produitWHERE Client = 12

Requête A

Requête B

On garde les

doublons

L’Union : Résultats

Libelle

Cerise

Pomme

Libelle

Pomme

Mangue

Ananas

Libelle

Cerise

Pomme

Mangue

Ananas

Libelle

Cerise

Pomme

Pomme

Mangue

Ananas

Requête A Requête B

UNION

Sans doublons [ALL] : Avec doublons

L’IntersectionSELECT Colonne1, Colonne2, …, ColonneN

FROM [Table 1]

WHERE [Condition1]

INTERSECT

SELECT Colonne1’, Colonne2’, …, ColonneN’

FROM [Table 1’]

WHERE [Condition2]

L’Intersection : ExempleQuestion

Comment afficher les numéros des clients ayant commandé des produits de couleur inconnue et des produits de couleur « rouge ».

RéponseRéaliser l’intersection entre les deux ensembles.

L’Intersection : Exemple [2]

SELECT ClientFROM Commander A INNER JOIN PRODUITS B ON A.Produit = B.ProduitWHERE Couleur is nullINTERSECTSELECT ClientFROM Commander A INNER JOIN PRODUITS B ON A.Produit = B.ProduitWHERE Couleur = ‘rouge’

Requête A

Requête B

L’Intersection : Résultats

Client

1

5

5

6

9

9

10

11

12

Client

5

5

7

9

9

10

10

Client

5

9

10

Requête A

Requête B

INTERSECT

La DifférenceSELECT Colonne1, Colonne2, …, ColonneN

FROM [Table 1]

WHERE [Condition1]

MINUS

SELECT Colonne1’, Colonne2’, …, ColonneN’

FROM [Table 1’]

WHERE [Condition2]

La Différence : ExempleQuestion

Comment trouver les numéros des clients qui n’ont qui n’ont jamais passer de commande ?

RéponseÔter les numéros des clients ayant commandé quelque

chose de la liste des numéros de tous les clients.

SELECT Client FROM CLIENTSMINUSSELECT DISTINCT Client FROM Commander

Le qualificateur ALLLe qualificateur « ALL » permet de vérifier une relation entre un élément et un ensemble d’éléments de même type.

SELECT Colonne1, Colonne2, …, ColonneN

FROM [Table1]

WHERE [Condition1]

AND Colonne1 ALL (

SELECT Colonne1

FROM [Table2]

WHERE [Condition2]

)

Ou signifie : >, <, >=, <=, <>.

Le qualificateur ALL : ExempleQuestion

Trouver les libellés des produits moins chers que tous les produits de couleur « rouge ».

RéponseConstruire un ensemble constitué des prix des produits

de couleur « rouge ».Afficher les libellés et les prix des produits moins chers

que tous les éléments de l’ensemble précédemment constitué.

Le qualificateur ALL : RésultatSELECT Libelle, PrixFROM PRODUITSWHERE Couleur != ‘rouge’AND Prix < ALL (

SELECT Prix FROM PRODUITS WHERE Couleur = ‘rouge’

)

Prix

2,1

3,2

Libelle Prix

Ananas 1.5

Coing 0,75

Orange 1,3

Prune 1,3

Le qualificateur ANYIl s’agit de vérifier une relation entre un élément et au moins l’un des éléments d’un ensemble de même type.

SELECT Colonne1, Colonne2, …, ColonneN

FROM [Table1]

WHERE [Condition1]

AND Colonne1 ANY (

SELECT Colonne1

FROM [Table2]

WHERE [Condition2]

)

Ou signifie : >, <, >=, <=, <>.

Le qualificateur ANY : ExempleQuestion

Trouver les libellés des produits plus chers qu’un produit de couleur « rouge ».

RéponseConstruire un ensemble constitué des prix des produits

de couleur « rouge ».Afficher les libellés et les prix des produits plus chers

qu’un des éléments de l’ensemble précédemment constitué.

Le qualificateur ANY : RésultatSELECT Libelle, PrixFROM PRODUITSWHERE Couleur != ‘rouge’AND Prix > ANY (

SELECT Prix FROM PRODUITS WHERE Couleur = ‘rouge’

)

Prix

2,1

3,2

Libelle Prix

Figue 2,52

Date 3,15

Kaki 3,11

Litchi 2,5

L’opérateur EXISTSPermet de savoir si un « SELECT » produit au moins une ligne « VRAI » ou ne produit aucune ligne « FAUX ».

SELECT Colonne1, Colonne2, …, ColonneN

FROM [Table1]

WHERE EXISTS (

SELECT Colonne1

FROM [Table2]

WHERE [Condition2]

)

L’opérateur EXISTS : ExempleQuestion

Trouver les numéros et les noms des clients ayant commandé au moins un produit

RéponseIls s’agit des clients pour lesquels il existe au moins un

enregistrement dans la table « Commander ».

L’opérateur EXISTS : RésultatSELECT Client, NomFROM CLIENTSWHERE EXISTS (

SELECT Client FROM Commander)

Client Nom

1 Maynard

2 Gorgeret

4 Bedin

5 Corgier

6 Goujon

Le client numéro 3 n’a passé aucune commande.

Recommended