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

Cours SQL. Base de données exemple pour le cours (1/2) Client (noClient, nom, prénom, ddn, rue, CP, ville) Produit (noProduit, libellé, prixUnitaire,

Présentations similaires


Présentation au sujet: "Cours SQL. Base de données exemple pour le cours (1/2) Client (noClient, nom, prénom, ddn, rue, CP, ville) Produit (noProduit, libellé, prixUnitaire,"— Transcription de la présentation:

1 Cours SQL

2 Base de données exemple pour le cours (1/2) Client (noClient, nom, prénom, ddn, rue, CP, ville) Produit (noProduit, libellé, prixUnitaire, noFournisseur) Fournisseur (noFournisseur, raisonSociale) Commande (noClient, noProduit, dateCommande, quantité) Clés primaires Clés étrangères

3 Client noClient nom prénom ddn rue CP ville Produit noProduit libellé pu noFournisseur Commande noClient noProduit dateCommande quantité Fournisseur noFournisseur raisonSociale Base de données exemple pour le cours (2/2)

4 Syntaxe générale de la commande SELECT SELECT *|{[ALL|DISTINCT] expression [nomColonne] [,expression [nomColonne]]… } FROMrelation [alias] [,relation [alias] …] [WHERE condition] [GROUP BY nomColonne [,nomColonne]…] [HAVINGcondition] [ORDER BY nomColonne [ASC|DESC] [,nomColonne [ASC|DESC]…]

5 SQL et la casse des caractères (majuscule/minuscule) Il ny a pas de différence entre des noms (ou identifiants) écrits en majuscules ou en minuscules Il ny a pas de différence entre des noms (ou identifiants) écrits en majuscules ou en minuscules ex. noms dattributs, de tables, de contraintes… ex. noms dattributs, de tables, de contraintes… Seul cas où la casse est prise en compte : la comparaison de chaînes de caractères Seul cas où la casse est prise en compte : la comparaison de chaînes de caractères SELECT * FROM Client WHERE nom = Dupont Select * From CLIENT where NOM = Dupont

6 Trouver les noClient et dateCommande de toutes les Commandes Trouver les noClient et dateCommande de toutes les Commandes Projection d'une relation et la clause DISTINCT SELECTnoClient, dateCommande FROMCommande noClientdateCommande 10004/05/ /4/ /1/ /2/ /1/ /1/2004 Commande SQL équivalente

7 Trouver les noClient et dateCommande de toutes les Commandes Trouver les noClient et dateCommande de toutes les Commandes La clause DISTINCT SELECTDISTINCT noClient, dateCommande FROMCommande R1=Commande[noClient, datecommande]) Expression algébrique équivalente noClientdateCommande 10004/05/ /4/ /1/ /2/ /1/2004

8 Restriction dune relation sur une condition Sélectionner les Articles dont le prix est inférieur à 20 et le numéro est supérieur à 30 Sélectionner les Articles dont le prix est inférieur à 20 et le numéro est supérieur à 30 SELECT * FROM Article WHERE prixUnitaire 30 noArticlelibelléprixUnitaire 31Brosse12 40Tableau Visseuse19.99 R1=Article[prixUnitaire 30 ] Exp. algéb. équivalente

9 Restriction : syntaxe d'une condition SELECT * FROM nom-relation WHEREcondition Syntaxe de condition Syntaxe de condition - conditionSimple | NOT (condition) | condition {AND|OR} condition Syntaxe de conditionSimple Syntaxe de conditionSimple expression {= | | =|<>|!=} expression | expression [NOT]BETWEEN expression AND expression| expression IS [NOT] NULL expression [NOT] IN listeConstantes| expression [NOT]LIKE patron

10 Restriction : Exemples Produits dont le prix est compris entre 50 et 100 Produits dont le prix est compris entre 50 et 100 SELECT * FROM Produit WHERE prixUnitaire >= 50 AND prixUnitaire = 50 AND prixUnitaire <= 100 SELECT * FROM Produit WHERE prixUnitaire BETWEEN 50 AND 100 Produits dont le prix est inférieur à 50 ou supérieur à 100 Produits dont le prix est inférieur à 50 ou supérieur à 100 SELECT * FROM Produit WHERE prixUnitaire 100

11 Restriction : Opérateurs IS NULL et LIKE Commandes en quantité indéterminée (null) Commandes en quantité indéterminée (null) SELECT * FROM Commande WHERE quantité IS NULL Clients dont le nom commence par B, se termine par B et contient au moins 3 caractères Clients dont le nom commence par B, se termine par B et contient au moins 3 caractères SELECT * FROMClient WHEREnom LIKE B%B LIKE recherche des chaînes de caractères correspondant à un patron où : % : désigne une suite de zéro à n caractères quelconques _ : désigne un et un seul caractère quelconque

12 Restriction : Opérateur IN Clients dont le nom est Dupont, Durant ou Martin Clients dont le nom est Dupont, Durant ou Martin SELECT * FROM Client WHERE nom IN (Dupond, Durant, Martin) Clients dont le nom n'est pas dans l'ensemble {Dupont, Durant, Martin} Clients dont le nom n'est pas dans l'ensemble {Dupont, Durant, Martin} SELECT * FROM Client WHERE nom NOT IN (Dupond, Durant, Martin)

13 Restriction et projection Produire les noClient et dateCommande des Commandes dont la date est postérieure au 01/01/2004 Produire les noClient et dateCommande des Commandes dont la date est postérieure au 01/01/2004 SELECTnoClient, dateCommande FROM Commande WHEREdateCommande > 01/01/2004 noClientdateCommande 1005/1/ /2/ /1/2004 Exp. Algébr. équivalente {noClient, dateCommande} ( dateCommande>01/01/2004 ( Commande))

14 Produit cartésien SELECT* FROM relation, relation Ex. Produire toutes les combinaisons possibles de Client et de Commande SELECT * FROMClient, Commande Client X Commande Exp. Algébr. équivalente

15 Jointure SELECTattribut1 [,attribut2, …] FROMrelation1,relation2 [,relation3,…] WHEREcondition Cette commande SELECT combine produit cartésien, restriction et projection Cette commande SELECT combine produit cartésien, restriction et projection Exp. Algébr. équivalente {attribut1, attribut2…} ( condition ( (relation1 x relation2) x relation3)…) N.B. Nécessité de préfixer le nom dun attribut par sa relation en cas dambiguïté

16 Jointure : exemple de requête ex. Liste des commandes avec le nom du client SELECTnom, Client.noClient, noProduit,dateCommande,quantité FROMCommande, Client WHEREClient.noClient = Commande.noClient CommandeClient nom,Client.noClient… Arbre algébrique canonique correspondant à lexpression SQL (SGBDR) x Client.noClient = Commande.noClient restriction projection

17 Jointure : autre exemple de requête ex. Produits commandés en quantité supérieure à 100 et dont le prix dépasse Afficher les numéros de produit, leur libellé, leur prix unitaire ainsi que la date de la commande. SELECTProduit.noProduit, libellé, prixUnitaire, date FROMProduit, Commande WHEREquantité > 100 AND prixUnitaire >1000 AND Produit.noProduit = Commande.noProduit Arbre algébrique canonique Commande Produit Produit.noProduit,libellé… x quantité > 100 AND prixUnitaire >1000 AND Produit.noProduit = Commande.noProduit

18 Jointure : utilisation d'alias Utilisation dalias pour alléger lécriture d'une requête incluant des jointures ex. Liste des commandes avec le nom et le numéro du client SELECT C2.noClient, nom, date, quantité FROMCommande C1, Client C2 WHEREC1.noClient = C2.noClient Commande alias C1 Commande alias C1 Client alias C2 Client alias C2

19 Opérations ensemblistes (UNION, INTERSECT, EXCEPT) Trouver les noms et prénoms des employés qui sont aussi des passagers Trouver les noms et prénoms des employés qui sont aussi des passagers noEmployénomEmpprénomEmp 10HenryJohn 15ConradJames 35JenquaJessica 46LeconteJean noPassagernomPassprénomPass4HarryPeter 78ConradJames 9LandRobert 466LeconteJean Employé Passager (SELECT nomEmp as nom, prénomEmp as prénom FROMEmployé) INTERSECT (SELECT nomPass as nom, prénomPass as prénom FROM Passager)nomprénomConradJames LeconteJean

20 Expression de calcul sur les colonnes dans la liste de projection Liste des noArticle avec le prixUnitaire avant et après inclusion dune taxe de 15%. Liste des noArticle avec le prixUnitaire avant et après inclusion dune taxe de 15%. SELECT noArticle, prixUnitaire, prixUnitaire*1.15 as prixTTC FROMArticle

21 Expression de calcul sur les colonnes dans la condition (du WHERE) Une condition peut comporter une expression de calcul Une condition peut comporter une expression de calcul ex:Liste des noArticle dont le prix toutes taxes comprises (TTC) dépasse 20 SELECT noArticle FROMArticle WHERE prixUnitaire*1.15 > 40 noArticle SELECT * FROMCommande WHERE dateCommande = CURRENT_DATE n Une expression peut aussi faire appel à des fonctions ex: Liste des commandes de la journée

22 Fonctions dagrégation Une fonction d'agrégation opère sur un groupe de valeurs dattributs et produit une valeur résultat unique (extension de lalgèbre relationnelle) SELECTfctAgrégation FROMrelation(s) [WHERE condition] fctAgrégation opère sur les lignes de la relation résultat : COUNT(*) : retourne le nombre de lignes de la relation résultat COUNT(*) : retourne le nombre de lignes de la relation résultat COUNT([distinct]expr) : nombre de valeurs non NULL (distinctes) de expr COUNT([distinct]expr) : nombre de valeurs non NULL (distinctes) de expr MAX(n) : valeur maximum de n MAX(n) : valeur maximum de n MIN(n) : valeur minimum de n MIN(n) : valeur minimum de n SUM(n) : somme des valeurs de n (ignore les valeurs NULL) SUM(n) : somme des valeurs de n (ignore les valeurs NULL) AVG(n) : valeur moyenne de n (ignore les valeurs NULL) AVG(n) : valeur moyenne de n (ignore les valeurs NULL) Où n est une expression numérique et expr une expression quelconque

23 Fonctions dagrégation Nombre total darticles et prix unitaire moyen SELECT COUNT(*) AS nbArticles, AVG (prixUnitaire) AS prixMoyen FROMArticle nbArticlesprixMoyen Nombre de prixUnitaires non null différents SELECT COUNT(distinct prixUnitaire) AS nbPrix FROMArticlenbPrix8

24 Fonctions dagrégation : Contraintes dutilisation Une fonction dagrégation doit être utilisée dans une clause SELECT sans résultats individuels Une fonction dagrégation doit être utilisée dans une clause SELECT sans résultats individuels SELECT noProduit, max(prixUnitaire) FROM Produit Requête invalide puisque plusieurs noProduit et un seul maximum. Une fonction dagrégation peut être utilisée dans une sous- requête Une fonction dagrégation peut être utilisée dans une sous- requête sélection de résultats individuels dans la requête englobante sélection de résultats individuels dans la requête englobante SELECT noProduit, libellé FROM Produit WHERE prixUnitaire = (SELECTmax (prixUnitaire) FROM Produit) FROM Produit) Faux !!

25 Partition de relations (GROUP BY) ex. Nombre de produits commandés par client SELECT noClient, COUNT(*) FROM Commande GROUP BY noClient 1) Les commandes sont groupées par numéro de client 2) pour chaque groupe, afficher le numéro du client concerné par le groupe et le nombre de commandes. N.B. : chaque expression du SELECT doit avoir une valeur unique par groupe.

26 Partition de relations (GROUP BY) ex. Nombre de produits commandés par client SELECT noClient, COUNT(*) FROM Commande GROUP BY noClient noProduit dateComma nde noClien t 45/1/ /1/ /5/ /8/ /8/ /9/ totalProdui ts

27 ex. Quantité totale de produits commandés par client en dehors du produit F565 SELECT noClient, SUM(quantité) FROM Commande WHERE noProduit <> F565 GROUP BY noClient 1) Les tuples de Commande ne vérifiant pas la condition sont exclus 2) Les commandes restantes sont groupées par numéro de client 3) pour chaque groupe, afficher le numéro du client concerné par le groupe et la somme des quantités. Une clause HAVING permet de restreindre les groupes Partition de relations (GROUP BY)

28 ex. Quantité moyenne commandée par produit pour les produits ayant fait lobjet de plus de 3 commandes. Ignorer les commandes concernant le client C47. SELECT noProduit, AVG(quantité) FROM Commande WHERE noClient != C47 GROUP BY noProduit HAVINGCOUNT(*) > 3 1) Les tuples de Commande ne vérifiant pas la condition WHERE sont exclus 2) Les commandes restantes sont groupées par numéro de produit 3) pour chaque groupe, compter le nombre déléments et éliminer les groupes à moins de 3 éléments. 4) pour les groupes restants, afficher le numéro de produit et la quantité moyenne. N.B. : La clause HAVING ne sutilise quavec un GROUP BY.

29 Partition de relations (GROUP BY) ex. Nombre de produits commandés par client et par date SELECT noClient, dateCommmande, COUNT(noProduit) AS nbProduits FROM Commande GROUP BY noClient, dateCommande noProdu it dateComma nde noClient 45/1/ /1/ /5/ /8/ /8/ /9/ noClie nt dateComma nde nbProduit s 105/1/ /5/ /8/ /9/20031 n Il est possible de partitionner sur plusieurs colonnes (attributs)

30 Tri du résultat dune requête (ORDER BY) Possibilité de trier les résultats dune requête par rapport à une ou plusieurs de ses colonnes Possibilité de trier les résultats dune requête par rapport à une ou plusieurs de ses colonnes SELECT colonne(s) SELECT colonne(s) FROM relation(s) [WHERE condition] FROM relation(s) [WHERE condition] ORDER BY colonne [ASC|DESC], [,colonne ASC|DESC]..] ORDER BY colonne [ASC|DESC], [,colonne ASC|DESC]..]Où ASC : ordre ascendant (par défaut) DESC : ordre descendant ex. liste des commandes par ordre croissant du numéro de client et par ordre chronologique inverse de la date SELECT* FROM Commande ORDER BYnoClient, dateCommande desc

31 Requêtes imbriquées Le résultat dune requête peut être utilisé dans une condition de la clause WHERE dune commande SELECT Le résultat dune requête peut être utilisé dans une condition de la clause WHERE dune commande SELECT - sous-requête /requête imbriquée SELECTcolonne(s) FROMrelation(s) WHERE expression [NOT]IN (sous-requête) | {EXISTS | NOT EXISTS} (sous-requête)

32 Requêtes imbriquées : opérateur IN / NOT IN (test dappartenance à un ensemble) Nom des clients ayant passé commande le 24/10/2000 SELECTnom FROMClient WHERE noClient IN (SELECT noClient FROMCommande WHEREdateCommande=24/10/2000)

33 Requêtes imbriquées : opérateur EXISTS / NOT EXISTS (test densemble vide) Clients ayant passé au moins une commande SELECT* FROMClient C1 WHEREEXISTS (SELECT * FROM Commande C2 WHERE C1.noClient=C2.noClient) Clients nayant passé aucune commande SELECT* FROMClient C1 WHERE NOT EXISTS (SELECT * FROMCommande C2 WHERE C1.noClient=C2.noClient)

34 Quelques règles de nommage … Nom dune colonne dans la relation résultat : - par défaut, nom de lattribut ou de lexpression dont elle est issue : SELECT * FROMProduit SELECT AVG(prixUnitaire)FROM Produit - renommage possible : SELECT noProduit AS "Numéro produit" FROMProduit noProdu it libellé prixUnitair e AVG(prixUnitaire) Numéro produit


Télécharger ppt "Cours SQL. Base de données exemple pour le cours (1/2) Client (noClient, nom, prénom, ddn, rue, CP, ville) Produit (noProduit, libellé, prixUnitaire,"

Présentations similaires


Annonces Google