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

Récupérer les informations stockées dans la base de manière cohérente. select { [, … ] | *} from [where ];

Présentations similaires


Présentation au sujet: "Récupérer les informations stockées dans la base de manière cohérente. select { [, … ] | *} from [where ];"— Transcription de la présentation:

1 Récupérer les informations stockées dans la base de manière cohérente. select { [, … ] | *} from [where ];

2 SELECT FROM [WHERE AND ] [GROUP BY ] [HAVING ] Restriction : arithmétique (=,, ) textuelle (LIKE) sur intervalle (BETWEEN) sur liste (IN) Possibilité de blocs imbriqués par : ä IN, EXISTS, NOT EXISTS, ALL, SOME, ANY

3 Récupérer tous les enregistrements de la table MA_TABLE SELECT * FROM MA_TABLE; Récupérer seulement les colonnes C1 et C2 SELECT C1, C2 FROM MA_TABLE;

4 Lajout dun prédicat sur un ordre select sexprime dans une clause WHERE par : SELECT * FROM MA_TABLE WHERE ; Exemple : SELECT * FROM MA_TABLE WHERE C1 = 600;

5 Opérateurs de comparaison : =, !=, <>, =, Opérateurs logiques AND, OR, NOT Exemple : SELECT * from MA_TABLE where c1 12 and c2 = 15;

6 Lopérateur LIKE permet de tester les chaînes de caractères avec lexpression dun motif (pattern) Les méta-caractères sont : _ 1 seul caractère % 0 ou plusieurs caractères Attention : bien que la syntaxe SQL ne soit pas sensible à la casse, les tests sur les chaînes le sont.

7 Toutes les peronnes dont le nom commence par A : SELECT * from personne where nom LIKE A% ; Tous les prénoms dont le nom contient un X en deuxième position. SELECT prenom from personne where nom LIKE _X% ;

8 Cas particulier des champs NULL : Il sont testés avec le prédicat IS NULL ou IS NOT NULL Exemple : tous les enregistrements dont la colonne C2 nest pas remplie : SELECT * FROM MA_TABLE WHERE C2 IS NULL;

9 ::= [NOT] constante LIKE IN (ALL ANY SOME) EXISTS UNIQUE MATCH [UNIQUE] BETWEEN constante AND constante AND OR avec : Opérateur de comparaison Remarque: peut être dynamiquement déterminée par une requête

10 Le produit cartésien de A et B sexprime en SQL par : SELECT * FROM A, B; ATTENTION : le produit cartésien n'a pas de sens logique, c'est la première étape d'une jointure

11 La jointure de 2 tables s'effectue en ajoutant un pivot au produit cartésien : SELECT * FROM A, B WHERE A.C1 = B.C2;

12 Pour effectuer des jointures multiples : SELECT * FROM T1, T2, T3… WHERE PIVOT1 AND PIVOT2 AND PIVOT3 AND … ATTENTION : il est indispensable de citer autant de pivots que de jointures.

13 Pour effectuer une auto-jointure (jointure d'une table sur elle même) il est nécessaire de déclarer des synonymes dits ALIAS sur la table concernée : SELECT a.first_name, b.first_name FROM employee a, employee b WHERE a.manager_id = b.employee_id;

14 Concaténation : || SELECT first_name || ' ' || last_name FROM … Sous-chaînes : SUBSTR (chaîne, pos, long) ATTENTION : En SQL les chaînes de caractères sont indicées à partir de 1

15 Majuscule : UPPER(chaîne) Minuscule : LOWER(chaîne)

16 Chaîne vers nombre : TO_NUMBER() Nombre vers chaîne : TO_CHAR(ch, masque) Le masque permet de définir des règles de transformation pour les nombres : 9 : chiffre quelconque non représenté pour les 0 non significatifs 0 : chiffre quelconque représenté. : point décimal apparent

17 Objectif Effectuer des opérations en regroupant plusieurs lignes d'un SELECT. Définition : Un groupe est un ensemble de lignes, résultat d'une requête, qui ont une valeur commune sur un ensemble de colonnes. Cet ensemble de colonnes est appelé le facteur de groupage.

18 Pour regrouper des données, il faut alors utiliser la clause GROUP BY suivi du facteur de groupage. Select col1,col2, fonction d agrégat() FROM tab1,tab2 where … group by col1,col2 ;

19 Exemple : Afficher le nombre total et moyenne d'heures de vol par type d'avion et par année de mise en service, tri par type et année. SELECT CodeType, AnnServ, SUM(NbHVol), AVG(NbHVol) from AVION GROUP BY CodeType, AnnServ;

20 Une clause HAVING permet d'opposer un prédicat à un groupe. Exemple : SELECT NumClient,sum(montant) FROM commandes GROUP BY NumClient HAVING count(*)>3; La clause HAVING élimine des groupes comme la clause WHERE élimine des lignes.

21 Moyenne : AVG Somme : SUM Minimum : MIN Maximum : MAX Dénombrement : COUNT Variance : VARIANCE Ecart-type : STTDEV

22 C est une requête dont le résultat sert de valeur de référence dans le prédicat On peut imbriquer plusieurs requêtes, le résultat de chaque requête imbriquée servant de valeur de référence dans la condition de sélection de la requête de niveau supérieure: la requête principale. La sous-requête est évaluée entièrement avant la requête principale.

23 Exemple : affichez les employés ayant le même poste que lemployé Martin Solution 1 avec auto-jointure : select nom from employe e1, employe e2 where e1.nom= Martin and e1.poste=e2.poste ;

24 Solution 2 : avec sous-requête SELECT nom FROM employé WHERE poste = (SELECT poste from employé WHERE nom=Martin); C est une sous requête indépendante qui ne renvoie qu une ligne.

25 Sous-requêtes indépendantes qui renvoie une seul ligne Une sous-requête de ce type s'utilise lorsque la condition de sélection fait référence à une valeur. qui renvoie plusieurs lignes Une sous-requête de ce type s'utilise lorsque la condition de sélection fait référence à une liste de valeurs. sous requêtes dépendantes La sous-requête est évaluée pour chaque ligne de la requête principale.

26 La condition de sélection utilise un opérateur IN, ou un opérateur simple =, !=, <>,, = suivi de ALL ou ANY. Exemple : lister les clients qui ont passé des commandes le 5/6/98. SELECT NumClient FROM CLIENT WHERE NumClient IN(SELECT NumClient FROM COMMANDE WHERE DateCommande='05-JUN-98'); =ANY est équivalent à IN !=ALL est équivalent à NOT IN

27 La sous-requête est évaluée pour chaque ligne de la requête principale. Exemple: Lister les vols et les numéros de pilotes qui habitent la même ville d'un départ d'un vol. SELECT NumPilote, NumVol, VilDep from PILOTE p, VOL where VilDep =(SELECT Adresse from PILOTE where p.NumPilote=PILOTE.NumPilote );

28 L'opérateur EXISTS permet de construire un prédicat évalué à VRAI si la sous-requête renvoie au moins une ligne. SELECT NomCol [, ….] FROM NomTable [, ….][WHERE EXISTS (SELECT …) Exemple : Lister les vols ayant utilisé au moins une fois un avion de code type '741'. SELECT NumVol FROM AFFECTATION A WHERE EXISTS(SELECT * from AVION WHERE A.NumAvion=AVION.NumAvion AND CodeType='741'); => Cette requête utilise une sous-requête dépendante.

29 Exemple : Lister les avions du même type que l'avion numéro '8832' et mis en service la même année. SELECT NumAvion FROM AVION WHERE (AnnServ, CodeType)=(SELECT AnnServ, CodeType from AVION where NumAvion='8832');

30 La jointure naturelle peut s écrire sous la forme select * from tab1 natural join tab2 natural join tab3...; si les nom colonnes correspondent, il est inutile d expliciter la jointure. Si les noms de colonnes ne sont pas les mêmes dans les tables alors on écrit explicitement les conditions de jointures

31 Exemples : Ces trois syntaxes sont identiques select * from pilote natural join affectation natural join vol; select * from pilote p natural join affectation a join vol v on v.numvol=a.numvol and a.numpilote.p.numpilote ; select * from pilote p,affectation a,vol v where v.numvol=a.numvol and a.numpilote.p.numpilote;

32 Une jointure externe entre deux tables agit comme une jointure naturelle entre deux tables mais permet d obtenir aussi les lignes qui n ont pas de correspondance entre la table 1 et la table 2. Table1 col1col12 ax by cz Table2 col1col22 a1 b2 Ligne sans correspondance dans la table 2 Lignes avec correspondance

33 Select * from table1 natural join table2; ne donne que les lignes en correspondance select * from table1 left outer join table2; donne toutes les lignes en correspondance et les lignes de table 1 sans correspondance Table1 col1col12 ax by cz Table2 col1col22 a1 b2

34 Exemple : Liste des clients et somme totale des factures (même ceux qui n ont pas été facturé) : select Idc,nom,sum(totalfact) from client left outer join facture on client.Idc=facture.idc group by client.idc ;

35 Même exemple mais avec une autre syntaxe le signe (+) se situe sur la colonne de la table subordonnée. select Idc,nom,sum(totalfact) from client, facture where client.Idc=facture.idc (+) group by client.idc ;

36 Algèbre relationnelle : R U S SQL : SELECT * FROM R UNION SELECT * FROM S

37 Algèbre relationnelle : Intersect (R, S) SQL : SELECT * FROM R INTERSECT SELECT * FROM S

38 Algèbre relationnelle : R - S SQL : SELECT * FROM R MINUS / Except SELECT * FROM S On peut également représenter la différence par : SELECT * FROM R where not exists ( select * from S )

39 Tri des n-uplets selon un ou plusieurs attributs ; Le tri peut être croissant ou décroissant sur chaque attribut ; Ajout à la requête d'une clause ORDER BY en fin de requête suivie d'une liste de couple (attr, sens) où attr est un attribut de la relation et sens est : « ASC » pour trier de manière croissante « DESC » pour trier de manière décroissante

40 SELECT liste d'attributs FROM liste de relations WHERE condition GROUP BY liste d'attributs HAVING condition ORDER BY liste d'attributs avec sens de tri Les clauses « WHERE », « GROUP BY », « HAVING » et « ORDER BY » sont facultatives Il n'est possible d'utiliser la clause « HAVING » qu'après un « GROUP BY »

41 La clause INSERT INTO … VALUES permet d'insérer de nouvelles lignes dans la table. Syntaxe : INSERT INTO VALUES (valeur 1, valeur 2,…, valeur n ) ou INSERT INTO (attr 1, attr 2, …, attr m ) VALUES (v 1, v 2,…, v m ) Si une valeur n'est pas précisée pour un attribut qui nest pas obligatoire, alors le système insère la valeur NULL ou ce qui a été spécifié dans la clause DEFAULT du CREATE TABLE. n = nombre d'attributs de la table m <= n

42 Insert into emloye values(123,Mohammed, 20/05/1970, maroc); Insert into emloye(nom,prénon,pays) values(Benali,Mohammed, maroc); Attention : Les données de type texte ou date doivent être entre ' '. Oracle : noubliez pas la clause COMMIT pour rendre les modifications permanentes SQL Server : le format des dates par défaut à linsertion est JJ/MM/AA

43 La clause INSERT INTO … SELECT permet d'insérer de nouvelles lignes dans la table à partir d'une table ou vue existante. Syntaxe : INSERT INTO SELECT … INSERT INTO (attr 1, attr 2, …, attr m ) SELECT r 1, r 2,…, r m FROM … Si une valeur n'est pas précisée pour un attribut qui nest pas obligatoire, alors le système insère la valeur NULL ou ce qui a été spécifié dans la clause DEFAULT du CREATE TABLE.

44 1) CREATE TABLE Employé 2000 ( id_employe INTEGER, nom VARCHAR(30), prénom VARCHAR(20), DateEmbauche datetime, id_entreprise INTEGER, Salaire_base MONEY ); 2) INSERT INTO Employe2000 SELECT * FROM Employe WHERE DateEmbauche> 01/01/2000;

45 La clause DELETE permet de supprimer des lignes d'une table. Syntaxe : DELETE FROM [ WHERE ] Exemple : DELETE FROM Employe WHERE Employe_id=109; DELETE FROM Employe; Attention si il existe une contrainte référentielle!

46 La clause UPDATE permet de modifier des lignes d'une table. Syntaxe : UPDATE SET = [ WHERE ] Exemple : UPDATE Employe SET salaire=11500 SET pays = Maroc; WHERE id_employe=107;


Télécharger ppt "Récupérer les informations stockées dans la base de manière cohérente. select { [, … ] | *} from [where ];"

Présentations similaires


Annonces Google