SQL Requêtes simples BD4 A.D., S.B., F.C. Licence MIASHS, Master ISIFAR, Paris-Diderot Janvier-Février 2016 BD4 (Licence MIASHS, Master ISIFAR, Paris-Diderot) SQL 1/25 Janvier-Février 2016 1 / 25 BD4 (Licence MIASHS, Master ISIFAR, Paris-Diderot) SQL 2/25 Janvier-Février 2016 2 / 25
Outline 1 2 Requêtes mono-relation 3 4 Conclusion BD4 (Licence MIASHS, Master ISIFAR, Paris-Diderot) SQL 3/25 Janvier-Février 2016 3 / 25 BD4 (Licence MIASHS, Master ISIFAR, Paris-Diderot) SQL 4/25 Janvier-Février 2016 4 / 25
SQL - SQL : Structured Query Language Langage permettant : interrogation des données (requêtes) définitions des données et des contraintes structurelles sur celles-ci. manipulation des données (insertion, suppression, mise à jour) définition des vues et des index administration des bases de données Plusieurs fois normalisés par l ISO: SQL-86, SQL-89, SQL-92, SQL-99. BD4 (Licence MIASHS, Master ISIFAR, Paris-Diderot) SQL 5/25 Janvier-Février 2016 5 / 25 Dans ce premier cours : SQL comme Langage de manipulation de données (LMD). Une instruction SQL permet de combiner : restriction (sélection), projection, renommage,... SELECT < liste attribut > FROM < table > WHERE < condition >; correspond à : π <listeattribut> (σ <condition> (< table >)) BD4 (Licence MIASHS, Master ISIFAR, Paris-Diderot) SQL 6/25 Janvier-Février 2016 6 / 25
Syntaxe - requêtes simples SELECT [ DISTINCT ] * ou < liste attribut > FROM < liste de tables > [ WHERE < condition >] * : sélection de tous les attributs. [...] : condition facultative. DISTINCT : supprime les doublons. Base de données exemple : Employe ( NoEmpl, NomE, Annee, TelE, Nodept ) Fournisseur ( NomF, VilleF, AdresseF ) Piece ( NomP, Prix, Couleur ) BD4 (Licence MIASHS, Master ISIFAR, Paris-Diderot) SQL 7/25 Janvier-Février 2016 7 / 25 Syntaxe - requêtes simples SELECT NomF, VilleF FROM Fournisseur ; Equivalent à : π NomF,VilleF (Fournisseur) SELECT * FROM Fournisseur ; Equivalent à : Fournisseur SELECT * FROM Fournisseur WHERE VilleF = ' Paris '; Equivalent à : σ VilleF= Paris (Fournisseur) BD4 (Licence MIASHS, Master ISIFAR, Paris-Diderot) SQL 8/25 Janvier-Février 2016 8 / 25
Requêtes mono-relation Requêtes mono-relation BD4 (Licence MIASHS, Master ISIFAR, Paris-Diderot) SQL 9/25 Janvier-Février 2016 9 / 25 Structure de base Requêtes mono-relation La structure de base d une requête s appuie sur les trois mots clés suivants : SELECT correspond à l opérateur de projection sur la liste d attributs demandée il peut aussi être suivi de fonctions d attributs FROM indique la ou les relations concernées WHERE précise une condition et correspond à l opération de restriction/sélection en algèbre relationnelle. BD4 (Licence MIASHS, Master ISIFAR, Paris-Diderot) SQL 10/25 Janvier-Février 2016 10 / 25
Syntaxe de la Condition Requêtes mono-relation Une condition se construit à l aide des opérations suivantes : Comparaison avec opérateurs : =, <>, >,<, >=, <= SELECT * FROM Employe WHERE NomE <> ' Durand ' Combinaison de conditions à l aide des opérateurs : AND, OR, NOT SELECT DISTINCT NomF FROM Fournisseur WHERE ( VilleF = ' Londres ') OR ( VilleF = ' Paris '); Attention aux priorités dans l évaluation des expressions logiques. BD4 (Licence MIASHS, Master ISIFAR, Paris-Diderot) SQL 11/25 Janvier-Février 2016 11 / 25 Syntaxe de la Condition Requêtes mono-relation Test BETWEEN permettant de vérifier si la valeur d un attribut est comprise entre deux constantes SELECT NomE FROM Employe WHERE Annee BETWEEN ' 22/ 06/ 03 ' AND ' 25/09/03 '; Test à NULL signifiant que la valeur est inconnue SELECT * FROM Employe WHERE TelE IS NULL ; BD4 (Licence MIASHS, Master ISIFAR, Paris-Diderot) SQL 12/25 Janvier-Février 2016 12 / 25
Requêtes mono-relation Syntaxe Condition Test d appartenance IN qui permet de vérifier si la valeur d un attribut appartient à une liste de constantes, SELECT * FROM Fournisseur WHERE VilleF IN ( ' Paris ', ' Londres '); Test LIKE permettant de vérifier si un attribut de type chaîne de caractères contient une ou plusieurs sous-chaînes; _ : remplace n importe quel caractère % : remplace n importe quel chaîne de caractère. SELECT VilleF FROM Fournisseur WHERE VilleF LIKE ' Saint % '; BD4 (Licence MIASHS, Master ISIFAR, Paris-Diderot) SQL 13/25 Janvier-Février 2016 13 / 25 BD4 (Licence MIASHS, Master ISIFAR, Paris-Diderot) SQL 14/25 Janvier-Février 2016 14 / 25
Exemples jusqu à présent : une seule relation en jeu. On peut : utiliser plusieurs tables dans la clause FROM Construire des conditions complexes impliquant plusieurs tables (conditions "séparées" ou jointure). Produit cartésien. SELECT * FROM Employe, Piece WHERE Employe. Annee = '06 ' AND Piece. NomP = 'xx '; σ Annee= 06 NomP= xx (Employe Piece) BD4 (Licence MIASHS, Master ISIFAR, Paris-Diderot) SQL 15/25 Janvier-Février 2016 15 / 25 Pour lever les ambiguités Nom des attributs préfixé par nom des tables dans la condition Renommage des tables possible dans la clause FROM Retour sur exemple précédent : SELECT * FROM Employe E, Piece P WHERE E. Annee = '06 ' AND P. NomP = 'xx '; BD4 (Licence MIASHS, Master ISIFAR, Paris-Diderot) SQL 16/25 Janvier-Février 2016 16 / 25
Jointure Jointures définissables en faisant porter une comparaison (=, <,,...) sur des attributs de deux tables différentes On ajoute une table Livraison à notre base : Employee ( NoEmpl, NomE, Annee, TelE, Nodept ) Fournisseur ( NomF, VilleF, AdresseF ) Piece ( NomP, Prix, Couleur ) Livraison ( NumLiv, NomP, NomF, DateLiv, Quantite ) Attention : schéma simpliste... BD4 (Licence MIASHS, Master ISIFAR, Paris-Diderot) SQL 17/25 Janvier-Février 2016 17 / 25 Jointure Villes des fournisseurs qui ont effectué des livraisons et dates des livraisons SELECT VilleF, DateLiv FROM Fournisseur, Livraison WHERE Fournisseur. NomF = Livraison. NomF Equivalent (à renommage près...) : π F.NomF,DateLiv (Fournisseur F.NomF=L.NomF Livraison) BD4 (Licence MIASHS, Master ISIFAR, Paris-Diderot) SQL 18/25 Janvier-Février 2016 18 / 25
Jointure Villes des fournisseurs qui ont effectué des livraisons de la piece xx et dates des livraisons SELECT VilleF, DateLiv FROM Fournisseur F, Livraison L WHERE F. NomF = L. NomF AND F. NomP = 'xx ' Villes des fournisseurs qui ont effectué des livraisons de la piece xx, prix unitaire de cette pièce et dates des livraisons SELECT F. VilleF, L. DateLiv, P. Prix FROM Fournisseur F, Livraison L, Piece P WHERE F. NomF = L. NomF AND F. NomP = 'xx ' AND P. NomP = 'xx ' BD4 (Licence MIASHS, Master ISIFAR, Paris-Diderot) SQL 19/25 Janvier-Février 2016 19 / 25 Expression en calcul relationnel Villes des fournisseurs qui ont effectué des livraisons de la piece xx, prix unitaire de cette pièce et dates des livraisons SELECT F. VilleF, L. DateLiv, P. Prix FROM Fournisseur F, Livraison L, Piece P WHERE F. NomF = L. NomF AND F. NomP = 'xx ' AND P. NomP = 'xx ' BD4 (Licence MIASHS, Master ISIFAR, Paris-Diderot) SQL 20/25 Janvier-Février 2016 20 / 25
Jointure naturelle La norme SQL-92 prévoit (si besoin) d utiliser une syntaxe particulière pour la jointure naturelle. Noms et num. de liv. des fournisseurs de Paris qui ont livré : SELECT DISTINCT NomF, NumLiv FROM Fournisseur NATURAL JOIN Livraison WHERE VilleF = ' Paris '; Ville des fournisseurs qui ont livré des pièces rouges : SELECT DISTINCT VilleF FROM Fournisseur NATURAL JOIN Livraison NATURAL JOIN Piece WHERE Couleur = ' rouge '; BD4 (Licence MIASHS, Master ISIFAR, Paris-Diderot) SQL 21/25 Janvier-Février 2016 21 / 25 Equi-jointure Equi-jointure en spécifiant les attributs de jointure (qui ne sont mis qu une seule fois dans le résultat) SELECT DISTINCT VilleF FROM Fournisseur NATURAL JOIN Livraison NATURAL JOIN Piece WHERE Couleur = ' rouge '; Equi-jointure en spécifiant le critère de jointure SELECT DISTINCT NomF, NumLiv FROM Fournisseur F JOIN Livraison L ON F. NomF = L. NomF WHERE VilleF = ' Paris ' BD4 (Licence MIASHS, Master ISIFAR, Paris-Diderot) SQL 22/25 Janvier-Février 2016 22 / 25
Jointure externe LEFT OUTER JOIN (resp. RIGHT OUTER JOIN) : on garde les tuples de la table de gauche (resp. droite) qui n ont pas de complément dans l autre table. FULL OUTER JOIN : on garde les tuples de chacune des tables qui n ont pas de complément. On complète les valeurs non renseignées par NULL SELECT DISTINCT NomF, NumLiv FROM Fournisseur F LEFT OUTER JOIN Livraison L ON F. NomF = L. NomF WHERE VilleF = ' Paris ' BD4 (Licence MIASHS, Master ISIFAR, Paris-Diderot) SQL 23/25 Janvier-Février 2016 23 / 25 Conclusion Conclusion BD4 (Licence MIASHS, Master ISIFAR, Paris-Diderot) SQL 24/25 Janvier-Février 2016 24 / 25
Conclusion Conclusion Première approche de SQL : sélection, projection, jointure,... Toutes les requêtes précédentes : sans négation! Reste à considérer comme LMD : requêtes ensemblistes, requêtes imbriquées, négation, agrégats (somme, moyenne, partitionnement, etc). Voir SQL comme un Langage de Définition de Données (LDD). BD4 (Licence MIASHS, Master ISIFAR, Paris-Diderot) SQL 25/25 Janvier-Février 2016 25 / 25