Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
Manipulation des données Requêtes simples
Récupérer les informations stockées dans la base de manière cohérente. select { <col>[, <col>… ] | *} from <tab> [where <expr>];
2
SELECT: Forme Générale
SELECT <liste de projection> FROM <liste de tables> [WHERE <critère de jointure> AND <critère de restriction>] [GROUP BY <attributs de partitionnement>] [HAVING <citère de restriction>] 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
SELECT * FROM MA_TABLE; SELECT C1, C2 FROM MA_TABLE;
SELECT : Forme simple 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
SELECT * FROM MA_TABLE WHERE <EXPR>;
Ajout d ’un prédicat L’ajout d’un prédicat sur un ordre select s’exprime dans une clause WHERE par : SELECT * FROM MA_TABLE WHERE <EXPR>; Exemple : SELECT * FROM MA_TABLE WHERE C1 = 600;
5
Format des clauses WHERE
Opérateurs de comparaison : = , != , <> , <= , >= , < , > Opérateurs logiques AND, OR, NOT Exemple : SELECT * from MA_TABLE where c1 < > 12 and c2 = 15;
6
Format des clauses WHERE
L’opérateur LIKE permet de tester les chaînes de caractères avec l’expression d’un 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
Format des clauses WHERE
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
Format des clauses WHERE
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 n’est pas remplie : SELECT * FROM MA_TABLE WHERE C2 IS NULL;
9
Forme générale de la condition
<search condition> ::= [NOT] <nom_colonne> q constante ½ <nom_colonne> <nom_colonne> LIKE <modèle_de_chaîne> <nom_colonne> IN <liste_de_valeurs> <nom_colonne> q (ALL ½ ANY ½ SOME) <liste_de_valeurs> EXISTS <liste_de_valeurs> UNIQUE <liste_de_valeurs> <tuple> MATCH [UNIQUE] <liste_de_tuples> <nom_colonne> BETWEEN constante AND constante <search condition> AND ½ OR <search condition> avec q : Opérateur de comparaison Remarque: <liste_de_valeurs> peut être dynamiquement déterminée par une requête
10
Travail sur plusieurs tables
Le produit cartésien de A et B s’exprime 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
Travail sur plusieurs tables
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
Travail sur plusieurs tables
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
Travail sur plusieurs tables
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
Opérateurs de manipulation de chaînes
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
Opérateurs de manipulation de chaînes
Majuscule : UPPER(chaîne) Minuscule : LOWER(chaîne)
16
Opérateurs de conversion :
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
Requête de groupage 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
Requête de groupage 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
Requête de groupage 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
Requête de groupage 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
Les fonctions d ’agrégat Ses fonctions ne peuvent pas être utilisées dans la clause WHERE
Moyenne : AVG Somme : SUM Minimum : MIN Maximum : MAX Dénombrement : COUNT Variance : VARIANCE Ecart-type : STTDEV
22
Complément sur les requêtes sous-requêtes ou requêtes imbriquées
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
Complément sur les requêtes sous-requêtes ou requêtes imbriquées
Exemple : affichez les employés ayant le même poste que l’employé Martin Solution 1 avec auto-jointure : select nom from employe e1, employe e2 where e1.nom=‘ Martin ’ and e1.poste=e2.poste ;
24
Complément sur les requêtes sous-requêtes ou requêtes imbriquées
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
Complément sur les requêtes sous-requêtes ou requêtes imbriquées
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
Complément sur les requêtes Sous-requête indépendante qui renvoie plusieurs lignes
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
Complément sur les requêtes Sous-requête dépendantes qui renvoie plusieurs lignes
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
Complément sur les requêtes Cas particulier : WHERE EXISTS
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
Complément sur les requêtes Cas particulier :Cas d'une sous-requête à plusieurs colonnes:
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
Complément sur les requêtes écriture de la jointure naturelle
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
Complément sur les requêtes écriture de la jointure naturelle
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
Jointures externes 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 col1 col12 a x b y c z Table2 col1 col22 a 1 b 2 Lignes avec correspondance Ligne sans correspondance dans la table 2
33
Jointures externes Select * from table1 natural join table2;
col1 col12 a x b y c z Table2 col1 col22 a 1 b 2 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
34
Jointures externes Exemple : select Idc,nom,sum(totalfact)
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
Jointures externes 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
Traduction de l'union Algèbre relationnelle : R U S SQL :
SELECT * FROM R UNION SELECT * FROM S
37
Traduction de l'intersection
Algèbre relationnelle : Intersect (R , S) SQL : SELECT * FROM R INTERSECT SELECT * FROM S
38
Traduction de la différence
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 résultats 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
Synthèse : Forme générale du SELECT
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
Insertion de lignes clause INSERT INTO … VALUES
La clause INSERT INTO … VALUES permet d'insérer de nouvelles lignes dans la table. Syntaxe : INSERT INTO <nom_table> VALUES (valeur1, valeur2,…, valeurn) ou INSERT INTO <nom_table> (attr1, attr2, …, attrm) VALUES (v1, v2,…, vm) Si une valeur n'est pas précisée pour un attribut qui n’est 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 … VALUES Exemple
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 : n’oubliez pas la clause COMMIT pour rendre les modifications permanentes SQL Server : le format des dates par défaut à l’insertion est ‘JJ/MM/AA’
43
Insertion de lignes clause INSERT INTO … SELECT
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 <nom_table> SELECT … INSERT INTO <nom_table> (attr1, attr2, …, attrm) SELECT r1, r2,…, rm FROM … Si une valeur n'est pas précisée pour un attribut qui n’est 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
INSERT INTO … SELECT Exemple
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
Suppression de lignes clause DELETE
La clause DELETE permet de supprimer des lignes d'une table. Syntaxe : DELETE FROM <nom_table> [ WHERE <critère> ] Exemple : DELETE FROM Employe WHERE Employe_id=109; DELETE FROM Employe; Attention si il existe une contrainte référentielle!
46
Mise à jour clause UPDATE
La clause UPDATE permet de modifier des lignes d'une table. Syntaxe : UPDATE <nom_table> SET <nom_attribut> = <expression> [ WHERE <critère> ] Exemple : UPDATE Employe UPDATE Employe SET salaire= SET pays = ‘Maroc’; WHERE id_employe=107;
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.