SQL IGI

108
Le langage SQL (Structured Query Language) LST IGI Novembre 2011 (Institute) 01/11/2011 1 / 100

description

SQL

Transcript of SQL IGI

Page 1: SQL IGI

Le langage SQL (Structured Query Language)

LST IGI

Novembre 2011

(Institute) 01/11/2011 1 / 100

Page 2: SQL IGI

SQL est un langage relationnel, il manipule donc des tables (i.e. desrelations, c’est-à-dire des ensembles) par l’intermédiaire de requêtes quiproduisent également des tables.Nous pouvons distinguer cinq catégories des instructions, qui permettent :1. la définition des éléments d’une base de données (tables, colonnes,clefs, index, contraintes, . . .),2. la manipulation des données (insertion, suppression, modification,extraction, . . .),3. la gestion des droits d’accès aux données (acquisition et révocation desdroits),4. la gestion des transactions,5. et enfin le SQL intégré.

(Institute) 01/11/2011 2 / 100

Page 3: SQL IGI

Langage de définition de données

Le langage de définition de données (LDD, ou Data Definition Language,soit DDL en anglais) est un langage orienté au niveau de la structure de labase de données. Le LDD permet de créer, modifier, supprimer des objets.Il permet également de définir le domaine des données (nombre, chaîne decaractères, date, booléen, . . .) et d’ajouter des contraintes de valeur surles données. Il permet enfin d’autoriser ou d’interdire l’accès aux donnéeset d’activer ou de désactiver l’audit pour un utilisateur donné.Les instructions du LDD sont : CREATE, ALTER, DROP, AUDIT,NOAUDIT, ANALYZE, RENAME, TRUNCATE.

(Institute) 01/11/2011 3 / 100

Page 4: SQL IGI

Langage de manipulation de données

Le langage de manipulation de données (LMD, ou Data ManipulationLanguage, soit DML en anglais) est l’ensemble des commandes concernantla manipulation des données dans une base de données. Le LMD permetl’ajout, la suppression et la modification de lignes, la visualisation ducontenu des tables et leur verrouillage.Les instructions du LMD sont : INSERT, UPDATE, DELETE, SELECT,EXPLAIN, PLAN, LOCK TABLE.

(Institute) 01/11/2011 4 / 100

Page 5: SQL IGI

Langage de protections d’accès

Le langage de protections d’accès (ou Data Control Language, soit DCLen anglais) s’occupe de gérer les droits d’accès aux tables.Les instructions du DCL sont : GRANT, REVOKE.

(Institute) 01/11/2011 5 / 100

Page 6: SQL IGI

Langage de contrôle de transaction

Le langage de contrôle de transaction (ou Transaction Control Language,soit TCL en anglais) gère les modifications faites par le LMD, c’est-à-direles caractéristiques des transactions et la validation et l’annulation desmodifications.Les instructions du TCL sont : COMMIT, SAVEPOINT, ROLLBACK,SET TRANSACTION

(Institute) 01/11/2011 6 / 100

Page 7: SQL IGI

SQL intégré

Le SQL intégré (Embedded SQL) permet d’utiliser SQL dans un langagede troisième génération (C, Java, etc.) :—déclaration d’objets ou d’instructions ;— exécution d’instructions ;—gestion des variables et des curseurs ;— traitement des erreurs.Les instructions du SQL intégré sont : DECLARE, TYPE, DESCRIBE,VAR, CONNECT, PREPARE, EXECUTE, OPEN, FETCH, CLOSE,WHENEVER.

(Institute) 01/11/2011 7 / 100

Page 8: SQL IGI

SQL inclut des opérations permettant de réduire le nombre de donnéesmanipulées verticalement et/ou horizontalement. La projection permet laréduction verticale par diminution du nombre d’attributs manipulés. Lasélection permet la réduction horizontale par diminution du nombre den-uplets manipulés. La projection et la sélection sont deux élémentsessentiels pour l’optimisation de l’exécution des requêtes.Le langage SQL se décline sous la forme de deux sous-ensembles : lelangage de définition de données ou LDD et le langage de manipulation dedonnées ou LMD.Le LDD permet de définir et de manipuler les relations au sein de la basede données.Le LMD permet d’accéder, d’insérer, modifier et de supprimer des donnéesdans la base.

(Institute) 01/11/2011 8 / 100

Page 9: SQL IGI

Le Langage de Définition de Données : manipulation des relationsLes attributsChaque domaine identifié par un attribut possède un type. Quatre typessont principalement utilisés :char(n) : chaîne de caractères de longueur fixe n.Par exemple : le code postal est codé sur 5 caractères, un numéro detéléphone est composé de 10 chiffres.varchar2(n) : chaîne de caractères de longueur variable d’au maximum n ;number(n, m) : numérique à n chiffres dont m décimales ;date : représente les dates et les heures.Le système Oracle offre d’autres types. En particulier, il offre des typespermettant de stocker des données binaires (images, textes utilisant descaractères nationaux, ...).

(Institute) 01/11/2011 9 / 100

Page 10: SQL IGI

Création d’une relationPour créer une relation, il existe une seule instruction :create table Nom_Relation (nom_attribut_1 type1 [default valeur1],nom_attribut_2 type2 [default valeur2],...) ;

(Institute) 01/11/2011 10 / 100

Page 11: SQL IGI

Exemple : créer une relation « Personne » . Une personne est caractériséepar son nom, son prénom, son adresse, sa date de naissance et son codepostal.create table Personne (nom varchar2(20),prenom varchar2(20),adresse varchar2(100),code_postal char(5),date_naissance date);

(Institute) 01/11/2011 11 / 100

Page 12: SQL IGI

Exemple : créer une relation « Voiture » . Une voiture est caractérisée parsa marque, sa couleur, son numéro d’immatriculation et son prix.create table Voiture (marque varchar2(10),couleur varchar2(10),immatriculation char(8),prix number(9,2));

(Institute) 01/11/2011 12 / 100

Page 13: SQL IGI

Les contraintes d’intégrité

1 pour nommer une contrainte : CONSTRAINT2 définir une valeur par défaut : DEFAULT3 préciser que la saisie est obligatoire : NOT NULL4 vérifier qu’une valeur saisie pour un champ n’existe pas déjà dans latable : UNIQUE

5 test sur un champ : CHECK (CHECK (condition) : équivaut à lapropriété "ValideSi")

Exemple :CREATE TABLE Clients(Nom char(30) NOT NULL,Prenom char(30) NOT NULL,Age integer, check (Age < 100),Email char(50) NOT NULL, check (Email LIKE "%@%")

)

(Institute) 01/11/2011 13 / 100

Page 14: SQL IGI

Définition des clés

clé primaire : PRIMARY KEYPRIMARY KEY (colonne1, colonne2, ...)clé étrangère : FOREIGN KEY...REFERENCES...FOREIGN KEY (colonne1, colonne2, ...)REFERENCES NomTableEtrangere(colonne1,colonne2,...)

(Institute) 01/11/2011 14 / 100

Page 15: SQL IGI

suppression d’éléments : DROP (VIEW, INDEX, TABLE)DROP TABLE NomTable(supprime les données et la structure de la table)Isuppression de données uniquement : TRUNCATETRUNCATE TABLE NomTableIrenommer une table : RENAMERENAME TABLE AncienNom TO NouveauNom

(Institute) 01/11/2011 15 / 100

Page 16: SQL IGI

Modification d’une relationLa création d’une relation par CREATE TABLE n’en rend pas définitivesles spécifications. Il est possible d’en modifier la définition par la suite, àtout momentpar la commande ALTER TABLE.- ajouter/supprimer un attribut- créer/supprimer une clé primaire- ajouter une contrainte d’unicité (interdire les doublons)- changer la valeur par défaut d’un attribut- changer totalement la définition d’un attribut- changer le nom de la relation- ajouter/supprimer un index

(Institute) 01/11/2011 16 / 100

Page 17: SQL IGI

Ajout d’attributs :alter table nom_relationadd (nom_attribut_1 type1 [default valeur1],nom_attribut_2 type2 [default valeur2], ...) ;Modification d’attributs :alter table nom_relationmodify (nom_attribut_1 type1 [default valeur1],nom_attribut_2 type2 [default valeur2], ...) ;

(Institute) 01/11/2011 17 / 100

Page 18: SQL IGI

Ajouter un attributSyntaxe :ALTER TABLE relation ADD definition [ FIRST | AFTER attribut]Ajoutons l’attribut fax qui est une chaîne représentant un nombre de 10chiffres:ALTER TABLE Personnes ADD fax DECIMAL(10,0)Nous aurions pu forcer la place où doit apparaître cet attribut. Pour lemettre en tête de la liste des attributs de la relation, il faut ajouter l’optionFIRST en fin de commande. Pour le mettre après l’attribut ‘téléphone’, ilaurait fallu ajouter AFTER ‘téléphone’.

(Institute) 01/11/2011 18 / 100

Page 19: SQL IGI

Exemple : ajouter à la relation « Voiture » l’attribut « prop » contenantle nom du propriétaire de la voiturealter table Voiture add ( prop varchar2(20)) ;Exemple : modifier l’attribut « code_postal » de la relation « Personne »pour que par défaut la valeur du code postal soit 31000.alter table Personne modify (code_postal char(5) default ’3100’);Destruction d’une relationLa commande permettant de détruire une relation est :drop table nom_relationSupprimer un attributSyntaxe :ALTER TABLE relation DROP attributExemple :ALTER TABLE Personnes DROP ’prénom’

(Institute) 01/11/2011 19 / 100

Page 20: SQL IGI

Supprimer un attributLa suppression d’un attribut peut incidemment provoquer des erreurs surles contraintes clé primaire (PRIMARY KEY) et unique (UNIQUE).CREATE TABLE Personne (id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,nom VARCHAR(40),‘prénom’VARCHAR(40),adresse TINYTEXT,‘téléphone’DECIMAL(10,0),UNIQUE(nom,’prénom’))

(Institute) 01/11/2011 20 / 100

Page 21: SQL IGI

(Institute) 01/11/2011 21 / 100

Page 22: SQL IGI

Modification des contraintes

ajouter de nouvelles contraintesALTER TABLE NomTableADD CONSTRAINT NomContraintesupprimer des contraintesALTER TABLE NomTableDROP CONSTRAINT NomContrainteactiver ou désactiver toutes les contraintesALTER TABLE NomTableCHECK CONSTRAINT NomContrainteALTER TABLE NomTableNOCHECK CONSTRAINT ALL

(Institute) 01/11/2011 22 / 100

Page 23: SQL IGI

Créer une clé primaireLa création d’une clé primaire n’est possible qu’en l’absence de cléprimaire dans la relation.Syntaxe :ALTER TABLE relation ADD PRIMARY KEY (attribut)Exemple :ALTER TABLE Personnes ADD PRIMARY KEY (nom,’prénom’)

(Institute) 01/11/2011 23 / 100

Page 24: SQL IGI

Supprimer une clé primaireComme une clé primaire est unique, il n’y a aucune ambiguïté lors de lasuppression.Syntaxe :ALTER TABLE relation DROP PRIMARY KEYExemple :ALTER TABLE Personnes ADD PRIMARY KEY

(Institute) 01/11/2011 24 / 100

Page 25: SQL IGI

Ajout d’une contrainte d’unicitéIl est possible (facultatif) de donner un nom à la contrainte. Cettecontrainte peut s’appliquer à plusieurs attributs.Si les valeurs déjà présentes dans la relation sont en contradiction aveccette nouvelle contrainte, alors cette dernière ne sera pas appliquée et uneerreur sera générée.Syntaxe :ALTER TABLE relation ADD UNIQUE [contrainte] (attributs)Exemple pour interdire tout doublon sur l’attribut fax de la relationPersonnes :ALTER TABLE Personnes ADD UNIQUE u_fax (fax)

(Institute) 01/11/2011 25 / 100

Page 26: SQL IGI

Changer la valeur par défaut d’un attributPour changer ou supprimer la valeur par défaut d’un attribut.Attention aux types qui n’acceptent pas de valeur par défaut (les famillesBLOB et TEXT).Syntaxe :ALTER TABLE relation ALTER attribut { SET DEFAULT valeur|DROP DEFAULT }Changer sa valeur par défaut :ALTER TABLE Personnes ALTER ‘téléphone’SET DEFAULT‘9999999999’Supprimer sa valeur par défaut :ALTER TABLE Personnes ALTER ‘téléphone’DROP DEFAULTLe changement ou la suppression n’affecte en rien les enregistrements quiont eu recours à cette valeur lors de leur insertion.

(Institute) 01/11/2011 26 / 100

Page 27: SQL IGI

Changer la définition d’un attributPour changer la définition de l’attribut sans le renommer :ALTER TABLE relation MODIFY attribut definition_relativeExemple 1 :ALTER TABLE Personnes MODIFY fax VARCHAR(14)Pour changer sa définition en le renommant :ALTER TABLE relation CHANGE attribut definition_absolueExemple 2 :ALTER TABLE Personnes CHANGE fax num_fax VARCHAR(14)Attention, si le nouveau type appliqué à l’attribut est incompatible avec lesvaleurs des enregistrements déjà présents dans la relation, alors elles risques

(Institute) 01/11/2011 27 / 100

Page 28: SQL IGI

Changer le nom de la relationSyntaxe :ALTER TABLE relation RENAME nouveau_nomExemple :ALTER TABLE Personnes RENAME CarnetCela consiste à renommer la table, et donc le fichier qui la stocke.

(Institute) 01/11/2011 28 / 100

Page 29: SQL IGI

Ajouter un indexUne table ne peut comporter que 32 indexs.Et un index ne peut porter que sur 16 attributs maximum à la fois.Syntaxe :ALTER TABLE relation ADD INDEX index (attributs)Exemple :ALTER TABLE Personnes ADD INDEX nom_complet(nom,prénom)Dans cet exemple, on a ajouté à la relation Personnes un index que l’onnomme nom_complet et qui s’applique aux deux attributs nom et‘prénom’. Ainsi, les recherches et les tris sur les attributs nom et ‘prénom’seront grandement améliorés. Car un index apporte les changementssous-jacents permettant d’optimiser les performances du serveur de basede données.

(Institute) 01/11/2011 29 / 100

Page 30: SQL IGI

Création de vues

Une vue est une table virtuelle évaluée à chaque consultation (les donnéesne sont pas stockée dans une table de la BD). Une vue est définie par uneclause SELECT.

obtenir des informations synthétiques

éviter de divulguer certaines informations

assurer l’indépendance du schéma externe

(Institute) 01/11/2011 30 / 100

Page 31: SQL IGI

Création de vues

Une vue est une table virtuelle évaluée à chaque consultation (les donnéesne sont pas stockée dans une table de la BD). Une vue est définie par uneclause SELECT.

obtenir des informations synthétiques

éviter de divulguer certaines informations

assurer l’indépendance du schéma externe

(Institute) 01/11/2011 30 / 100

Page 32: SQL IGI

Création de vues

Une vue est une table virtuelle évaluée à chaque consultation (les donnéesne sont pas stockée dans une table de la BD). Une vue est définie par uneclause SELECT.

obtenir des informations synthétiques

éviter de divulguer certaines informations

assurer l’indépendance du schéma externe

(Institute) 01/11/2011 30 / 100

Page 33: SQL IGI

La syntaxe pour définir une vue est la suivante :

CREATE VIEW NomVue(NomColonne1,...)AS SELECT NomColonne1,..FROM NomTableWHERE ConditionExemple :CREATE VIEW EtudiantsSrc(Nom,Prenom)AS SELECT Nom,PrenomFROM EtudiantsWHERE n_formation=12

(Institute) 01/11/2011 31 / 100

Page 34: SQL IGI

Le Langage de Manipulation de Données : manipulation desdonnéesInsertion de donnéesAjouter un enregistrement à une relation revient à ajouter une ligne à latable. Pour cela, pour chacun des attributs, il faudra en préciser la valeur.Si certaines valeurs sont omises, alors les valeurs par défauts définie les dela création de la relation seront utilisées.L’insertion de données se fait par l’instruction :insert into nom_relation (nom_att1, nom_att2, ... , nom_attn)values(val_att1, val_att2, ..., val_attn) ;Le nom des attributs est optionnel si on fournit une valeur à chaqueattribut de la relation « nom_relation » .

(Institute) 01/11/2011 32 / 100

Page 35: SQL IGI

La valeur « null »La valeur « null » est une valeur spécifique en SQL qui est commune àtous les types.Elle représente un attribut sans valeur connue et est manipulée avec desopérateurs spécifiques.Exemple : insérer dans la relation Personne les n-uples suivants :Alaoui Omar 12, rue des Lilas 31000 12/12/1941Chokri Ali 11/11/1960insert into Personnevalues (’Alaoui’, ’Omar’, ’12, rue des Lilas’, ’31000’, ’12/12/1941’) ;insert into Personne values (’Chokri’, ’Ali’, null, null, ’11/11/1960)

(Institute) 01/11/2011 33 / 100

Page 36: SQL IGI

Ajouter un enregistrementSyntaxe d’une « insertion standard » :INSERT INTO relation VALUES(liste exhaustive et ordonnée desvaleurs)Exemple :CREATE TABLE Ballon (taille INT NOT NULL,couleur VARCHAR(40))INSERT INTO Ballon VALUES(20, ‘rouge’) okINSERT INTO Ballon VALUES(‘rouge’, 20) fauxINSERT INTO Ballon VALUES(‘rouge’) faux

(Institute) 01/11/2011 34 / 100

Page 37: SQL IGI

Modifier un enregistrementPour modifier un ou des enregistrement(s) d’une relation, il faut préciserun critère de sélection des enregistrement à modifier (clause WHERE), ilfaut aussi dire quels sont les attributs dont on va modifier la valeur etquelles sont ces nouvelles valeurs (clause SET).Syntaxe :UPDATE [ LOW_PRORITY ] relation SET attribut=valeur, . . . [WHERE condition ] [ LIMIT a ]Exemple :UPDATE Personnes SET téléphone=’0156281469’WHEREnom=‘Chokri’AND prénom = ‘Mohamed’Cet exemple modifie le numéro de téléphone de Chokri Mohamed.LOW_PRORITY est une option un peu spéciale qui permet de n’appliquerla ou les modification(s) qu’une fois que plus personne n’est en train delire dans la relation.

(Institute) 01/11/2011 35 / 100

Page 38: SQL IGI

Modifier un enregistrementIl est possible de modifier les valeurs d’autant d’attributs que la relation encontient.Exemple pour modifier plusieurs attributs :UPDATE Personnes SET téléphone=’0156281469’, fax=‘0156281812’WHERE id = 102Pour appliquer la modification à tous les enregistrements de la relation, ilsuffi t de ne pas mettre de clause WHERE.LIMIT a permet de n’appliquer la commande qu’aux a premiersenregistrements satisfaisant la condition définie par WHERE.

(Institute) 01/11/2011 36 / 100

Page 39: SQL IGI

Supprimer un enregistrementAttention, la suppression est définitive !Syntaxe :DELETE [ LOW_PRIORITY ] FROM relation [ WHERE condition] [ LIMIT a ]Exemple :DELETE FROM Personnes WHERE nom=‘Chokri’ANDprénom=‘Mohamed’Pour vider une table de tous ces éléments, ne pas mettre de clauseWHERE. Cela efface et recrée la table, au lieu de supprimer un à unchacun des tuples de la table (ce qui serait très long).

(Institute) 01/11/2011 37 / 100

Page 40: SQL IGI

Sélectionner des enregistrementsPour extraire de votre base de données des informations, comme la listedes personnes de votre carnet d’adresse qui vivent à Rabat.Syntaxe générale :SELECT [ DISTINCT ] attributs[ INTO OUTFILE fichier ][ FROM relation ][ WHERE condition ][ GROUP BY attributs ][ HAVING condition ][ ORDER BY attributs [ ASC | DESC ]][ LIMIT [a,] b ]Exemple :SELECT nom,prénom FROM Personnes WHERE adresse LIKE ’%Rabat%’

(Institute) 01/11/2011 38 / 100

Page 41: SQL IGI

(Institute) 01/11/2011 39 / 100

Page 42: SQL IGI

Les conditions peuvent faire appel aux opérateurs suivants :opérateurs logiques : AND, OR, NOTcomparateurs de chaînes : IN, BETWEEN, LIKEopérateurs arithmétiques : +;-; /;%comparateurs arithmétiques : =; ; <; >; <= ;>=;<>

(Institute) 01/11/2011 40 / 100

Page 43: SQL IGI

Restriction sur une comparaison de chaînesLe prédicat LIKE permet de faire des restrictions sur des chaînesle caractère % remplace une séquence (éventuellement vide) de caractèresle caractère _ remplace un caractèreles caractères [—] définissent un intervalle de caractères (par exemple[A —E])Exemple :SELECT *FROM VehiculesWHERE Marque LIKE "_e%"

(Institute) 01/11/2011 41 / 100

Page 44: SQL IGI

Restriction sur un ensembleLes prédicats BETWEEN et IN vérifient

qu’une valeur se trouve dans un intervalle

qu’une valeur appartient à une liste de valeurs

ExempleSELECT *FROM VehiculesWHERE Compteur BETWEEN 10000 AND 30000SELECT *FROM VehiculesWHERE Marque IN ("Peugeot","Nissan")

(Institute) 01/11/2011 42 / 100

Page 45: SQL IGI

Restriction sur un ensembleLes prédicats BETWEEN et IN vérifient

qu’une valeur se trouve dans un intervalle

qu’une valeur appartient à une liste de valeurs

ExempleSELECT *FROM VehiculesWHERE Compteur BETWEEN 10000 AND 30000SELECT *FROM VehiculesWHERE Marque IN ("Peugeot","Nissan")

(Institute) 01/11/2011 42 / 100

Page 46: SQL IGI

Procédons par étapes :Pour sélectionner tous les enregistrements d’une relation :SELECT * FROM relationPour sélectionner toutes les valeurs d’un seul attribut :SELECT attribut FROM relationPour éliminer les doublons :SELECT DISTINCT attribut FROM relationPour trier les valeurs en ordre croissant :SELECT DISTINCT attribut FROM relation ORDER BY attribut ASCPour se limiter aux num premiers résultats :SELECT DISTINCT attribut FROM relation ORDER BY attribut ASCLIMIT numPour ne sélectionner que ceux qui satisfont à une condition :SELECT DISTINCT attribut FROM relation WHERE conditionORDER BY attribut ASC LIMIT num

(Institute) 01/11/2011 43 / 100

Page 47: SQL IGI

EXISTS / NOT EXISTSSELECT. . .WHERE [NOT] EXISTS (sous_requête);EXISTS : La sous-requête devra retourner au moins une valeur pour que lacondition soit vraie.NOT EXISTS : La sous-requête ne devra retourner aucune valeur pour quela condition soit vraie.Exemple : on veut la liste des classes pour lesquelles il n’y a personne decollé.SELECT DISTINCT classeFROM élèveWHERE NOT EXISTS (SELECT *FROM collesWHERE élève.classe = colle.classe);

(Institute) 01/11/2011 44 / 100

Page 48: SQL IGI

Fonctions d’agrégationsSUM () : donne le total d’un champ de tous les enregistrementssatisfaisant la condition de la requête. Le champ doit bien sur être de typenumériqueAVG () : donne la moyenne d’un champ de tous les enregistrementssatisfaisant la condition de la requêteMAX () : donne la valeur la plus élevée d’un champ de tous lesenregistrements satisfaisant la condition de la requêteMIN () : donne la valeur la plus petite d’un champ de tous lesenregistrements satisfaisant la condition de la requête.COUNT (*) Renvoie le nombre d’enregistrements satisfaisant la requête.

(Institute) 01/11/2011 45 / 100

Page 49: SQL IGI

COUNTPermet de compter le nombre de lignes.- COUNT(*) : compte le nombre de lignes ;- COUNT(colonne) : compte le nombre de valeurs dans une colonne ;- COUNT(DISTINCT colonne) : compte les valeurs distinctes dans unecolonne en éliminant lesvaleurs nulles.Exemple

le nombre de produits dont le libellé commence par la lettre ’P’.SELECT COUNT (*)FROM ProduitsWHERE libelle LIKE ’P*’;

(Institute) 01/11/2011 46 / 100

Page 50: SQL IGI

Regroupements—Group By <Attribut1> , . . . , <Attributp>Groupe en une seule ligne toutes les lignes pour lesquelles les attributs deregroupement ont la même valeurRestriction sur les regroupements—Having <prédicat> : sert à préciser quels groupes doivent êtresélectionnés.—Se place après la clause Group ByClause qui permet de grouper les lignes par type.Exemple : affi chage du salaire moyen de chaque catégorie d’employés.SELECT categ, AVG(salaire)FROM employéGROUP BY categ;

(Institute) 01/11/2011 47 / 100

Page 51: SQL IGI

Fonctions à utiliser dans les GROUP BYMIN(x), MAX(x), AVG(x), SUM(x)Calculent respectivement le minimum, le maximum, la moyenne et lasomme des valeurs de l’attribut X.COUNT([DISTINCT]x,y,. . . )Décompte des tuples du résultat par projection sur le ou les attributsspécifiés (ou tous avec ‘*’). L’option DISTINCT élimine les doublons.

(Institute) 01/11/2011 48 / 100

Page 52: SQL IGI

Exemple1. SELECT DISTINCT modelFROM voitureGROUP BY modelHAVING COUNT(couleur) > 10Ici on affi che le palmarès des models de voitures qui proposent un choix deplus de 10 couleurs.2. Affi chage de tous les clients.SELECT COUNT(*)FROM client

(Institute) 01/11/2011 49 / 100

Page 53: SQL IGI

3. Classement des produits par la valeur totale vendueSELECT DISTINCT produit.nom, SUM(vente.qt * produit.prix) AS totalFROM produit, venteWHERE produit.id = vente.produit_idxGROUP BY produit.nomORDER BY total

4. la liste des vendeurs, avec pour chaque vendeur le nombre de ventesqu’il a fait :SELECT num_vendeur,COUNT (*)FROM CommandesGROUP BY num_vendeur;.

(Institute) 01/11/2011 50 / 100

Page 54: SQL IGI

La gestion utilisateursPlusieurs personnes peuvent travailler simultanément sur la même BD,mais elles n’ont pas les mêmes besoin. L’administrateur de la BD définitles permissions qu’il accorde aux utilisateurs :- accorder des droits : GRANT- retirer des droits : REVOKELe créateur de la table obtient tous les droits(INSERT,DELETE,UPDATE,: : : )la liste d’utilisateurs peut être PUBLICla liste des permissions peut être ALL

(Institute) 01/11/2011 51 / 100

Page 55: SQL IGI

Accorder des droits

accorder des droits : GRANT...ON...TO...utilisateur ayant des droits peut accorder ces mêmes droits à d’autresutilisateurs : WITH GRANT OPTION (donc plusieursutilisateurs peuvent accorder des droits au même utilisateur...)Exemple :GRANT UPDATE(Nom,Prenom)ON EtudiantsTO Mohamed,Omar,AliWITH GRANT OPTION;

(Institute) 01/11/2011 52 / 100

Page 56: SQL IGI

Retirer des droits

retirer des droits : REVOKE...ON...FROM...supprimer le droit d’un utilisateur à accorder des permissions à un autreutilisateur : GRANT OPTION FOR

REVOKE[GRANT OPTION FOR] ListePermissionsON ListeObjetsFROM ListeUtilisateurs;

(Institute) 01/11/2011 53 / 100

Page 57: SQL IGI

L’algèbre relationnelle regroupe toutes les opérations possibles sur lesrelations. Voici la liste des opérations possibles :Projection : on ne sélectionne qu’un ou plusieurs attributs d’une relation(on ignore les autres). Par exemple n’affi cher que les colonnes nom etprénom de la table Personnes.Jointure : on fabrique une nouvelle relation à partir de 2 ou plusieursautres en prenant comme pivot 1 ou plusieurs attributs. Par exemple, onconcatène la table du carnet d’adresse et celle des inscrits à la bibliothèqueen fonction du nom de famille (c’es typiquement du recoupement defichiers).Sélection : on sélectionne tous les tuples ou bien seulement une partie enfonction de critères de sélection qui portent sur les valeurs des attributs.Par exemple n’affi cher que les lignes de la table Personnes qui vérifient lacondition suivante : le nom ne commence pas par la lettre ‘C’.

(Institute) 01/11/2011 54 / 100

Page 58: SQL IGI

Projection

(Institute) 01/11/2011 55 / 100

Page 59: SQL IGI

Exemple du carnet d’adresse :CREATE TABLE Personne (nom VARCHAR(40),‘prénom’VARCHAR(40),adresse TINYTEXT,‘téléphone’DECIMAL(10,0))Notre carnet d’adresse est stocké dans un tableau (appelé Relation) denom Personne qui comporte les colonnes (dites aussi attributs) suivantes :nom (chaîne de 40 caractères maximum), prénom (idem), adresse (textede longueur variable mais inférieure à 255 caractères) et téléphone (chaînede 10 caractères). Chacune des personnes à ajouter au carnet d’adresseoccupera une ligne de cette table. Une ligne est dite enregistrement dansle jargon des bases de données.

(Institute) 01/11/2011 56 / 100

Page 60: SQL IGI

Jointure

(Institute) 01/11/2011 56 / 100

Page 61: SQL IGI

Selection

(Institute) 01/11/2011 57 / 100

Page 62: SQL IGI

Les 5 opérations fondamentales sont les suivantes :

L’union, qui rajoute des lignes.

Le produit cartésien, qui rajoute des colonnes et des lignes

La différence, qui enlève des lignes.

La sélection, qui enlève des lignes.

La projection, qui enlève des colonnes.

(Institute) 01/11/2011 58 / 100

Page 63: SQL IGI

Les 5 opérations fondamentales sont les suivantes :

L’union, qui rajoute des lignes.

Le produit cartésien, qui rajoute des colonnes et des lignes

La différence, qui enlève des lignes.

La sélection, qui enlève des lignes.

La projection, qui enlève des colonnes.

(Institute) 01/11/2011 58 / 100

Page 64: SQL IGI

Les 5 opérations fondamentales sont les suivantes :

L’union, qui rajoute des lignes.

Le produit cartésien, qui rajoute des colonnes et des lignes

La différence, qui enlève des lignes.

La sélection, qui enlève des lignes.

La projection, qui enlève des colonnes.

(Institute) 01/11/2011 58 / 100

Page 65: SQL IGI

Les 5 opérations fondamentales sont les suivantes :

L’union, qui rajoute des lignes.

Le produit cartésien, qui rajoute des colonnes et des lignes

La différence, qui enlève des lignes.

La sélection, qui enlève des lignes.

La projection, qui enlève des colonnes.

(Institute) 01/11/2011 58 / 100

Page 66: SQL IGI

Les 5 opérations fondamentales sont les suivantes :

L’union, qui rajoute des lignes.

Le produit cartésien, qui rajoute des colonnes et des lignes

La différence, qui enlève des lignes.

La sélection, qui enlève des lignes.

La projection, qui enlève des colonnes.

(Institute) 01/11/2011 58 / 100

Page 67: SQL IGI

Opération PROJECTIONla projection permet de ne conserver que les attributs (colonnes)intéressants ; c’est un découpage vertical de la table.Certains attributs et tous les enregistrements.La projection : πM (R). La projection πM (R) produit, à partir d’une tableR, une sous-table dont les attributs sont définis dans M.Formalisme : R = PROJECTION (R1, liste des attributs)

(Institute) 01/11/2011 59 / 100

Page 68: SQL IGI

Soit la relation Employé:

(Institute) 01/11/2011 60 / 100

Page 69: SQL IGI

(Institute) 01/11/2011 61 / 100

Page 70: SQL IGI

(Institute) 01/11/2011 62 / 100

Page 71: SQL IGI

Exemples :CHAMPIGNONS

Espèce Catégorie ConditionnementRosé des prés Conserve BocalRosé des prés Sec VerrineCoulemelle Frais BoîteRosé des prés Sec Sachet plastique

(Institute) 01/11/2011 63 / 100

Page 72: SQL IGI

R1 = PROJECTION (CHAMPIGNONS, Espèce)EspèceRosé des présCoulemelleR2 = PROJECTION (CHAMPIGNONS, Espèce, Catégorie)Espèce CatégorieRosés des prés ConserveRosé des prés SecCoulemelle Frais

(Institute) 01/11/2011 64 / 100

Page 73: SQL IGI

SELECT DISTINCT liste d’attributs FROM table ;SELECT liste d’attributs FROM table ;Exemples :SELECT DISTINCT Espèce FROM Champignons ;SELECT DISTINCT Espèce, Catégorie FROM Champignons ;La clause DISTINCT permet d’éliminer les doublons.

(Institute) 01/11/2011 65 / 100

Page 74: SQL IGI

Opération JOINTURELa jointure (join), est possible seulement sur 2 tables possédant undomaine commun. La jointure consiste à juxtaposer les tuples dont lavaleur d’un attribut est identique dans lesdeux tables. On constate que souvent, la jointure porte sur des clésétrangère et primaire liées.SELECT Personnes.nom, nblivresFROM Personnes, BibliothèqueWHERE Personnes.nom = Bibliothèque.nomqui permet de concaténer deux relation en prenant un attribut commepivot. Il est possible de concaténer deux relation sur plusieurs attributs àla fois, ou même de concaténer X relation sur Y attributs.Les requêtes utilisant très souvent les jointures, il a été créé une syntaxespéciale plus rapide : JOIN que la méthode vue plus haut : avec la clauseWHERE.

(Institute) 01/11/2011 66 / 100

Page 75: SQL IGI

Ainsi la jointure précédente peut s’écrire aussi :SELECT Personnes.nom, nblivresFROM Personnes INNER JOIN BibliothèqueUSING (nom)ce qui signifie que les deux relations Personnes et Bibliothèque sontconcaténée (INNER JOIN) en utilisant (USING) l’attribut nom.

(Institute) 01/11/2011 67 / 100

Page 76: SQL IGI

Formalisme : R = JOINTURE (R1, R2, condition d’égalité entre attributs)

R = JOINTURE (PRODUIT, DETAIL_COMMANDE,Produit.CodePrd=Détail_Commande.CodePrd)

(Institute) 01/11/2011 68 / 100

Page 77: SQL IGI

En SQL, il est possible d’enchaîner plusieurs jointures dans la mêmeinstruction SELECT.

En SQL de base :SELECT * FROM table1, table2, table3, ...WHERE table1.attribut1=table2.attribut1 ANDtable2.attribut2=table3.attribut2 AND ...;

(Institute) 01/11/2011 69 / 100

Page 78: SQL IGI

Exemple :SELECT * FROM Produit, Détail_CommandeWHERE Produit.CodePrd=Détail_Commande.CodePrd ;ou en utilisant des alias pour les noms des tables :SELECT * FROM Produit A, Détail_Commande BWHERE A.CodePrd=B.CodePrd ;Avec la clause JOIN à partir du SQL2SELECT *FROM table1 JOIN table2 ON table1.attribut1=table2.attribut1 JOINtable3 ONtable2.attribut2=table3.attribut3... ;

(Institute) 01/11/2011 70 / 100

Page 79: SQL IGI

(Institute) 01/11/2011 71 / 100

Page 80: SQL IGI

Les aliasIl est possible d’utiliser des alias (pour simplifier) pour nommer une tabledifféremment dans la requête.Par exemple :SELECT F.titre, C.libellé-catégorieFROM FILM F, CATÉGORIE CWHERE F.code-catégorie = C.code-catégorie;

(Institute) 01/11/2011 72 / 100

Page 81: SQL IGI

Opération SELECTIONla sélection réalise un découpage horizontal de la table en ne conservantque les tuples satisfaisant une condition définie sur les valeurs d’unattribut.La sélection : σF(R). La sélection σF (R), où F exprime un prédicat surune relation R, permet de ne conserver dans la relation R que les tuplesdont les attributs vérifient une condition spécifiée par F.Formalisme : R = SELECTION (R1, condition)

(Institute) 01/11/2011 73 / 100

Page 82: SQL IGI

Soit la relation Employé:

(Institute) 01/11/2011 74 / 100

Page 83: SQL IGI

(Institute) 01/11/2011 75 / 100

Page 84: SQL IGI

(Institute) 01/11/2011 76 / 100

Page 85: SQL IGI

(Institute) 01/11/2011 77 / 100

Page 86: SQL IGI

R3 = SELECTION (CHAMPIGNONS, Catégorie = "Sec")Espèce Catégorie ConditionnementRosé des prés Sec VerrineRosé des prés Sec Sachet plastiqueIl permet de ne retenir que les n-uplets répondant à une conditionexprimée à l’aide des opérateurs arithmétiques ( =, >, <, >=, <=, <>)ou logiques de base (ET, OU, NON). .

(Institute) 01/11/2011 78 / 100

Page 87: SQL IGI

Opérations ensemblistesLe produit cartésien :SELECT *FROM NomTable1,NomTable2WHERE ...Les deux tables sur lesquelles on travaille doivent avoir le même schéma !- l’union : UNION (pour conserver les doublons : UNION ALL)SELECT Nom,PrenomFROM Table_EmployesUNIONSELECT Nom,PrenomFROM Table_Clients- l’intersection : INTERSECT- la différence ensembliste : MINUS

(Institute) 01/11/2011 79 / 100

Page 88: SQL IGI

Opération UNIONFormalisme : R = UNION (R1, R2)

(Institute) 01/11/2011 80 / 100

Page 89: SQL IGI

Exemple :E1 : Enseignants élus au CA

N◦ Enseignant nom_enseignant1 Mohamed3 Leila4 Otmane5 Khalid

(Institute) 01/11/2011 81 / 100

Page 90: SQL IGI

E2 : Enseignants représentants syndicauxN◦ Enseignant nom_enseignant1 Mohamed4 Otmane6 Omar

(Institute) 01/11/2011 82 / 100

Page 91: SQL IGI

On désire obtenir l’ensemble des enseignants élus au CA ou représentantssyndicaux.R1 = UNION (E1, E2)

N◦ Enseignant Nom Enseignant1 Mohamed3 Leila4 Otmane5 Khalid6 Omar

(Institute) 01/11/2011 83 / 100

Page 92: SQL IGI

SELECT liste d’attributs FROM table1UNIONSELECT liste d’attributs FROM table 2 ;Exemple :SELECT n◦enseignant, NomEnseignant FROM E1UNIONSELECT n◦enseignant, NomEnseignant FROM E2 ;

(Institute) 01/11/2011 84 / 100

Page 93: SQL IGI

Opération INTERSECTIONFormalisme : R = INTERSECTION (R1, R2)On désire connaître les enseignants du CA qui sont des représentantssyndicaux.R2 = INTERSECTION (E1, E2)N◦ Enseignant Nom Enseignant1 Mohamed4 Otmane

(Institute) 01/11/2011 85 / 100

Page 94: SQL IGI

En SQL de base :SELECT attribut1, attribut2, ... FROM table1WHERE attribut1 IN (SELECT attribut1 FROM table2) ;ou avec SQL2 :SELECT attribut1, attribut2, ... FROM table1INTERSECTSELECT attribut1, attribut2, ... FROM table2 ;Exemple :SELECT n◦enseignant, NomEnseignant FROM E1WHERE n◦enseignant IN (SELECT n◦enseignant FROM E2) ;ouSELECT n◦enseignant, NomEnseignant FROM E1INTERSECTSELECT n◦enseignant, NomEnseignant FROM E2 ;

(Institute) 01/11/2011 86 / 100

Page 95: SQL IGI

Opération DIFFERENCEFormalisme : R = DIFFERENCE (R1, R2)On désire obtenir la liste des enseignants du CA qui ne sont pas desreprésentants syndicaux.R3 = DIFFERENCE (E1, E2)N◦ Enseignant Nom Enseignant3 Leila5 Khalid

(Institute) 01/11/2011 87 / 100

Page 96: SQL IGI

Opération DIFFERENCEEn SQL de base :SELECT attribut1, attribut2, ... FROM table1WHERE attribut1 NOT IN (SELECT attribut1 FROM table2) ;ou avec SQL2 :SELECT attribut1, attribut2, ... FROM table1EXCEPTSELECT attribut1, attribut2, ... FROM table2 ;

(Institute) 01/11/2011 88 / 100

Page 97: SQL IGI

Opération PRODUIT CARTESIENle produit cartésien réalise la juxtaposition ou concaténation de tous lestuples d’une table avec tous les tuples d’une autre table. Si les 2 tablesont M et N tuples le résultat aura M * Ntuples.Formalisme : R = PRODUIT (R1, R2)

(Institute) 01/11/2011 89 / 100

Page 98: SQL IGI

(Institute) 01/11/2011 90 / 100

Page 99: SQL IGI

Exemple :Etudiantsn◦étudiant nom101 Mohamed102 AliEpreuveslibellé épreuve coeffi cientInformatique 3Mathématiques 4Gestion financière 5

(Institute) 01/11/2011 91 / 100

Page 100: SQL IGI

Examen = PRODUIT (Etudiants, Epreuves)n◦étudiant nom libellé épreuve coeffi cient101 Mohamed Informatique 3101 Mohamed Mathématiques 4101 Mohamed Gestion financière 5102 Ali Informatique 3102 Ali Mathématiques 4102 Ali Gestion financière 5La relation résultat possède les attributs de chacune des relations d’origineet ses nuplets sont formés par la concaténation de chaque n-uplet de lapremière relationavec l’ensemble des n-uplets de la deuxième.

(Institute) 01/11/2011 92 / 100

Page 101: SQL IGI

Opérateur et fonctions de chaînes

- Opérateur de concaténation : ||- chaîne CONCAT(chaîne1,chaîne2) : concaténation ;- chaîne SUBSTR(chaîne,m[,n]) : partie commençant au caractère m etayant une longueur de n ;- chaîne INITCAP(chaîne) : première lettre de chaque mot en majuscule ettoutes les autres en minuscule ;- chaîne LOWER(chaîne), UPPER(chaîne) : toutes lettres en minuscules,majuscules ;- chaîne LPAD(chaîne,long,[char]), RPAD(chaîne,n,[char]) : complète outronque chaîne pour qu’elle ait comme longueur « long » en ajoutantéventuellement à gauche (droite) le caractère (ou la chaîne de caractères)char (par défaut, un espace) ;

(Institute) 01/11/2011 93 / 100

Page 102: SQL IGI

- chaîne LTRIM(chaîne[,ens]), RTRIM(chaîne[,ens]) : supprime de chaînetous les caractères qui sont dans ens à gauche (à droite). Arrêt : premiercaractère qui n’est pas dans ens (par défaut, ens = espace) ;- chaîne REPLACE(chaine, avant, apres) : remplacements ;- chaîne TRANSLATE(chaîne, avant, apres) : remplace chaque caractèrede chaîne présent dans avant par le caractère situé à la même positiondans apres. Si avant contient plus de caractères que apres, suppression descaractères correspondants ;- int INSTR(chaîne, sous-chaîne, debut, occ) : position du premiercaractère de chaîne correspondant à l’occurence occ de sous-chaîne encommençant la recherche à la position début ;- int LENGTH(chaîne) : longueur de chaîne ;

(Institute) 01/11/2011 94 / 100

Page 103: SQL IGI

Opérateurs et fonctions sur les datesOpérateurs de date :- date +/- nombre : est une date obtenue en ajoutant le nombre de joursnombre à la date date ;- date2 - date1 : est le nombre de jours entre les deux dates ;Fonctions de dates :- SYSDATE : date et l’heure courantes du système d’exploitation hôte ;- DATE NEXT_DAY(date, nom_du_jour) : date du prochain jour de lasemaine dont le nom est nom_de_jour ;- DATE LAST_DAY(d) : date du dernier jour du mois de d ;- DATE ADD_MONTHS(d, n) : ajoute n mois à date. Si le mois obtenua moins de jours que le jour de d, le jour obtenu est le dernier du mois.

(Institute) 01/11/2011 95 / 100

Page 104: SQL IGI

- number MONTHS_BETWEEN(date2, date1) : nombre de mois entredate2 et date1, si date2 est après date1 le résultat est positif, sinon lerésultat est négatif. Si les jours date2 et date1 sont les mêmes, ou si cesont les derniers jours du mois, le résultat est un entier. La partiefractionnaire est calculée en considérant chaque jour comme 1/31ème demois- DATE ROUND(date[,précision]) : d arrondie à l’unité spécifiée dansprécision. L’unité de précision est indiquée en utilisant un des masques demise en forme de la date. On peut ainsi arrondir une date à l’année, aumois, à la minute,... Par défaut la précision est le jour ;- DATE TRUNC(d[,précision]) : d tronquée à l’unité spécifiée dansprécision. Les paramètres sont analogues à ceux de la fonction ROUND.

(Institute) 01/11/2011 96 / 100

Page 105: SQL IGI

Fonctions de conversion- ASCII(chaine) : nombre correspondant au code ascii du premiercaractère de chaine ;- CHR(nombre) : caractère dont nombre est le code ascii ;- TO_NUMBER(chaîne) : convertit chaîne en sa valeur numérique ;- TO_CHAR(nombre,format) : conversion de nombre chaîne en fonctionde la chaîne format :- 9 représente un chiffre (non représenté si non significatif) ;- 0 représente un chiffre (représenté même si non significatif) ;- . : point décimal apparent ;- V : position du point décimal non apparent ;- , : une virgule apparaîtra à cet endroit ;- $ : un $ précédera le premier chiffre significatif ;- B : le nombre sera représenté par des blancs s’il vaut 0 ;

(Institute) 01/11/2011 97 / 100

Page 106: SQL IGI

Syntaxe générale de la commande SELECTVoici la syntaxe générale d’une commande SELECT :SELECT [ ALL | DISTINCT ] { * | expression [ AS nom_affi ché ] }[, ...]FROM nom_table [ [ AS ] alias ] [, ...][ WHERE prédicat ][ GROUP BY expression [, ...] ][ HAVING condition [, ...] ][ {UNION | INTERSECT | EXCEPT [ALL]} requête ][ ORDER BY expression [ ASC | DESC ] [, ...] ]

(Institute) 01/11/2011 98 / 100

Page 107: SQL IGI

En fait l’ordre SQL SELECT est composé de 7 clauses dont 5 sontoptionnelles :SELECT : Cette clause permet de spécifier les attributs que l’on désire voirapparaître dans le résultat de la requête.FROM : Cette clause spécifie les tables sur lesquelles porte la requête.WHERE : Cette clause permet de filtrer les n-uplets en imposant unecondition à remplir pour qu’ils soient présents dans le résultat de larequête.GROUP BY : Cette clause permet de définir des groupes.HAVING : Cette clause permet de spécifier un filtre (condition deregroupement des n-uplets) portant sur les résultats.UNION, INTERSECT et EXCEPT : Cette clause permet d’effectuer desopérations ensemblistes entre plusieurs résultats de requête (i.e. entreplusieurs SELECT).ORDER BY : Cette clause permet de trier les n-uplets du résultat.

(Institute) 01/11/2011 99 / 100

Page 108: SQL IGI

L’opérateur étoile (*)Le caractère étoile (*) permet de récupérer automatiquement tous lesattributs de la table générée parla clause FROM de la requête.Pour affi cher la table employee on peut utiliser la requête :SELECT * FROM employee

(Institute) 01/11/2011 100 / 100