Chap 3 : structered query language

  • View
    181

  • Download
    1

Embed Size (px)

Text of Chap 3 : structered query language

  • Ramzi Trabelsi*Chapitre III : Le langage de commande SQL2014-2015

  • 2014-2015*Pour faire des interrogations sur les donnes de ma base :

    QBE (Query By Exemple) SQL (Structured Query Langage), ...

    SQL : standard de fait (norme ANSI) il permet :

    - la cration, interrogation et manipulation des donnes d'une base - dclarer les relations, crer les occurrences - faire toute opration dfinie par l'algbre relationnelle.Le Langage SQL

  • 2014-2015*Langage de Dfinition de Donnes CREATE, ALTER, DROP,

    RENAME, TRUNCATE

    Langage de Manipulation de Donnes INSERT, UPDATE, DELETE

    Langage d'Interrogation des Donnes SELECT

    Langage de Contrle des Donnes GRANT, DENY, REVOKE

    Le Langage SQLQuatre grandes familles de commandes

  • 2014-2015*LE LANGAGE SQL : Dfinition des donnes

    1 Cration de table: CREATE TABLE

    2 Modification de la table : ALTER TABLE

  • Modlisation plusieurs niveaux*

    RelModle conceptuelIndpendant du modle de donnesIndpendant du SGBDModle logiqueDpendant du modle de donnesIndpendant du SGBDCodasylRelationnelObjetXMLModle PhysiqueDpendant du modle de donnesDpendant du SGBDOracle MySQL MS.ACESS SQL SERVER

  • 2014-2015*1,11,N1,10,NMCD

  • 2014-2015*1,10,NMLD

  • Etude de cas2014-2015*MPD

  • Cration de tableCREATE TABLE nom_de_la_table ( colonne1 type_donnees [Contrainte], colonne2 type_donnees, colonne3 type_donnees, colonne4 type_donnees )

    Type_donnes : VARCHAR(taille) INTEGER NUMERIC(ouDECIMALouDEC) DATEContrainte : NOT NULL , PRIMARY KEY, FORIGN KEY, UNIQUE2014-2015*

  • Cration de tablesCREATE TABLE Etudiants(CodeEt VARCHAR(50) PRIMARY KEY,NomEt VARCHAR(50) NOT NULL,PrenomEt VARCHAR(50) NOT NULL,VilleEt VARCHAR(50) );2014-2015*

  • Cration de tables CREATE TABLE Epreuves ( CodeEp VARCHAR(10), NomEp VARCHAR(50) UNIQUE, CoefEp NUMERIC NOT NULL);

    ALTER TABLE Epreuves ADD CONSTRAINT PK_CodeEp PRIMARY KEY(CodeEp) ;2014-2015*

  • Cration de tables CREATE TABLE Etudiants( CodeEt VARCHAR(10) PRIMARY KEY, NomEp VARCHAR(50) NOT NULL, NomEt VARCHAR(50) NOT NULL, VilleEt VARCHAR(50));

    2014-2015*

  • Cration de tables CREATE TABLE Etudiants( CodeEt VARCHAR(10), NomEp VARCHAR(50) NOT NULL, NomEt VARCHAR(50) NOT NULL, VilleEt VARCHAR(50));

    ALTER TABLE Etudiants ADD CONSTRAINT PK_CodeEt PRIMARY KEY(CodeEp) ;

    2014-2015*

  • Cration de tables CREATE TABLE Notes( CodeNt VARCHAR(10) PRIMARY KEY NoteNt NUMERIC, CodeEp VARCHAR(10) FOREIGN KEY REFERENCES Epreuves(CodeEp), CodeEt VARCHAR(10) FOREIGN KEY REFERENCES Etudiants(CodeEt));2014-2015*

  • Cration de tables CREATE TABLE Notes( CodeNt VARCHAR(10) PRIMARY KEY NoteNt NUMERIC, CodeEp VARCHAR(10) , CodeEt VARCHAR(10), Etudiants(CodeEt));ALTER TABLE Etudiants ADD CONSTRAINT FK_CodeEp CodeEp FOREIGN KEY REFERENCES Epreuves(CodeEp);ALTER TABLE Etudiants ADD CONSTRAINT FK_CodeEt CodeEp FOREIGN KEY REFERENCES Etudiants(CodeEt);

    2014-2015*

  • Cration de tables CREATE TABLE Notes( CodeNt VARCHAR(10) PRIMARY KEY NoteNt NUMERIC, CodeEp VARCHAR(10) , CodeEt VARCHAR(10), Etudiants(CodeEt));ALTER TABLE Etudiants ADD CONSTRAINT PK_CodeNt PRIMARY KEY(CodeNt);ALTER TABLE Etudiants ADD CONSTRAINT FK_CodeEp CodeEp FOREIGN KEY REFERENCES Epreuves(CodeEp);ALTER TABLE Etudiants ADD CONSTRAINT FK_CodeEt CodeEp FOREIGN KEY REFERENCES Etudiants(CodeEt);

    2014-2015*

  • 2014-2015*LE LANGAGE SQL : modification des donnes

    1 Insertion dans la base : Insert

    2 Suppression dans la base : Delete

    3 Modification dans la base : Update

  • 2014-2015* Pour insrer une ligne dans une table on utilise la commande SQL INSERT

    Le Langage SQL : Mise--jour des donnes

  • 2014-2015*LE LANGAGE SQL : Interrogation des donnes

    1 Interrogation de la base : LID

    2 Les jointures

    3 Les sous-interrogations et fonctions de groupe

  • 2014-2015*SELECT Slection des colonnes interroger.

    FROMChoix des tables partir desquelles on fait la slection.WHERE Slection des lignes (application d'un filtre).Le Langage SQL : Interrogation des donnes

  • 2014-2015*Slectionner des colonnes spcifiques Choix des colonnes par la clause SELECT.

    SELECT ID, Espce, Nom FROM Animaux;

    ID Espce Nom -- ------ --- 1 Chien Bidou 2 Chat Groucha 3 Yeti Georges 4 Elephant Dumbo 5 Girafe Flip Flap

    Modules M244 - M245*

  • 2014-2015*

    AgentIdAgent...

    FournisseurIdFourS...

    FournitureIdFourT...

    CollectiviteIdCollect...

    ServiceIdService...

    CommanderIdCom

    Dpendre

    Rattacher1,11,n1,11,n0,n1,n0,nAutre exemple de BD

    Modules M244 - M245*

  • 2014-2015*

    Fournisseur

    IdFourS FNom FAdresse FType

    Commande

    IdCom Agent_Id FourT_Id FourS_Id DateC DateL Prix Quantite

    Service

    IdService SNom Collect_Id

    Agents

    IdAgent ANom APrenom DateE Fonction Responsable Salaire

    Service_Id

    Collectivit IdCollect CDesignation

    Fourniture

    IdFourT FDesignation Quantite_StockCommissionAutre exemple de BD

  • 2014-2015*Expressions Arithmtiques

  • 2014-2015*Il est possible de limiter le nombre de lignes rapportes en utilisant la clause WHERE :

    permet d'exprimer une condition.

    SELECT ANom, Fonction, SalaireFROM AgentWHERE Service_Id = 10;

    Slection des Lignes

  • 2014-2015*SELECT ANom, APrenom, Fonction, SalaireFROMAgentWHERE DateE BETWEEN #08-AOU-93# AND #08- AOU-99#;

    Oprateurs de comparaison On utilise l'oprateur BETWEEN pour tester l'appartenance un intervalle.

    format des dates par dfaut

  • 2014-2015*SELECT UPPER(ANom), CONCAT(ANom, APrenom), SalaireFROM AgentWHERE LOWER(Fonction) = directeur;

    Fonctions Mono-Ligne LOWERconvertit en minuscule UPPERconvertit en majuscule INITCAPconvertit linitiale en capitale CONCATconcatne des valeurs SUBSTRretourne une sous-chane LENGTHretourne un nombre de caractres

    ROUND(col,n) arrondit une valeur n dcimales spcif. TRUNC (col,n) tronque une valeur n dcimales spcif. MOD(m,n) retourne le reste de la division de m par n

  • 2015-2016*SELECT *FROM Notes, Etudiants Les jointures

    WHERE CodeEt=CodeEtWHERE Notes.CodeEt=Etudiants.CodeEtFROM Notes N, Etudiants EWHERE N.CodeEt=E.CodeEt SELECT N.CodeNt, N.NoteNt, E.NomEt, E.PrenomEtFROM Notes N, Etudiants EWHERE N.CodeEt=E.CodeEt ANDN.CodeNt=N0045

  • 2014-2015* Une jointure est utilise pour rechercher les donnes dans plusieurs tables.

    Les lignes sont relies grce aux valeurs communes contenues dans les cls primaires et trangres.

    La condition de jointure sexprime dans le WHERE.

    Les jointuresSELECT Ag.ANom , Ag.Service_Id , Se.IdServiceFROM Agent Ag, Service SeWHERE Ag.Service_Id = Se.IdService ;

  • 2014-2015*Les Sous-Interrogations Il est possible d'imbriquer une, ou plusieurs, interrogation (SELECT) dans une autre.

    On parle alors de sous-interrogation.

    Elle est excute avant la requte principale ; son rsultat est utilis par la requte

    principale.

    Elle permet de rechercher des donnes bases sur un critre inconnu.

    SELECT ANom, FonctionFROM AgentWHERE Service_Id = ( SELECT Service_Id FROMAgent WHERE ANom = 'Dupont' ) ;

  • 2014-2015*SELECT ANom, Salaire, Service_IdFROM AgentWHERE Salaire = ( SELECT MIN (Salaire) FROM Agent );

    Rponses Multi-Lignes (1/2)

  • 2014-2015*Rponses Multi-Lignes (2/2) Autre exemple

    SELECT Service_Id, AVG(Salaire)FROMAgentGROUP BY Service_Id HAVINGAVG(Salaire) > ( SELECT AVG(Salaire) FROM Agent WHERE Service_Id = 10 );

    Salaire moyen par service, dont le salaire moyen est suprieur celui du service 10.

  • Syntaxe SelectSELECT codeEp,AVG(NoteNt)FROM Table1, Table2WHERE JoitureAND Autres_fGroup By (codeEp)HAVING AVG(NoteNt) >12ORDER BY AVG(NoteNt) DESC2014-2015*

  • Groupement2014-2015*SELECT Categorie,SUM(Qte) as S_Qte FROM ProduitWHERE Couleur=RougeGROUP BY CategorieHAVING SUM(Qte)>100ORDER BY SUM(Qte) DESC

  • Le nom , prnom et note DS de tous les tudiants

    2014-2015*1

    SELECT NomEt , PrenomEt, NoteNt as Notes_DSFROM Etudiants E , Notes NWHERE E.CodeEt = N.CodeEtAND CodeEp=DS;

  • Le nom , prnom et note DS de tous les tudiants ayant une note entre 8 et 122014-2015*2SELECT NomEt , PrenomEt, NoteNt as Notes_DSFROM Etudiants E , Notes NWHERE E.CodeEt = N.CodeEtAND CodeEp=DSAND NoteNt BETWEEN 8 AND 12;

  • Le nombre des tudiants ayant une note entre 8 et 12 en DS2014-2015*3SELECT Count(*)FROM Etudiants E , Notes NWHERE E.CodeEt = N.CodeEtAND CodeEp=DSAND NoteNt BETWEEN 8 AND 12;

  • Max et Min des notes de DS2014-2015*4SELECT Max(NoteNt),Min(NoteNt)FROM Notes WHERE CodeEp=DS

  • Le nom , prnom et note DS de tous les tudiants ayant une note suprieure la moyenne des DS2014-2015*5SELECT NomEt , PrenomEt, NoteNt as Notes_DSFROM Etudiants E , Notes NWHERE E.CodeEt = N.CodeEtAND CodeEp='DS'AND NoteNt >SELECT AVG(NoteNT)FROM NotesWHERE CodeEp= 'DS'Calcul de la moyenne des notes DS

  • Le nom , prnom et Examen tris de la note la plus petite la plus grande

    2014-2015*6SELECT NomEt , PrenomEt, NoteNt as Notes_ExamenFROM