Manipulation des données Requêtes simples

Slides:



Advertisements
Présentations similaires
26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom.
Advertisements

Bases de Données Avancées: Bases de Données Relationnelles
Manipulation des données dans SQL
SQL - Subtilités.
STS2 - Révision des requêtes de sélection2/9/2003 Forme d'une requête de Sélection nSELECT nFROM nWHERE nGROUP BY nHAVING nORDER BY.
Algèbre relationnelle
Programme Introduction aux BD et aux SGBD Le modèle relationnel
Les fonctions.
Année universitaire Système dinformation Le SQL (Structured Query Language) langage dinterrogation dune base de données.
LMD: Langage de Manipulation de Données
Eléments d ’algèbre relationnelle
BASE DE DONNEES RELATIONNELLES
LE LANGAGE SQL Langage de manipulation de données (LMD)
Les fonctions de groupes Gestion des transactions
Bases de données et SGBD relationnels
2 Ils associent les rangées de 2 requêtes UNION [ALL] INTERSECT MINUS.
SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]
L’utilisation des bases de données
Algèbre relationnelle et SQL
SQL Partie 3 : (LID : Langage d'interrogation de données)
Cours N°2 Base de Données & Langage SQL
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 SQL PHILIPPE BANCQUART.
BASE DE DONNEES RELATIONNELLES
1 SQL: Requêtes, Programmation et Triggers Chapitre 5, Sections
1 SQL: Requêtes, Programmation et Triggers Chapitre 5, Sections
Cours N°2 Base de Données & Langage SQL
1 SQL Avancé 2010 Witold Litwin 2 Quoi & Pourquoi ? n Possibilités Etendues de Manipulation de BDs relationnelles n Fondamentales pour lexploration approfondie.
1 SQL Manipulations Avancées (08-09) Witold Litwin.
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 SQL: Requêtes, Programmation et Triggers Chapitre 5, Sections
Initiation aux bases de données et à la programmation événementielle
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 SQL jointure PHILIPPE BANCQUART.
Limiter et trier des données
Introduction Le SQL (Structured  Query Language) est un langage universel de gestion des bases de données. Il a une triple fonction : LDD Langage de Définition.
Cours 4b: Introduction au SQL, le langage des SGBD Relationnels
Chapitre 5 : Le langage SQL
Le langage SQL LDD : Langage de Définition de Données
 CREATE TABLE  DROP TABLE  ALTER TABLE  INSERT  UPDATE  DELETE  SELECT interrogation 2 Instruction de mise à jour structure.
Partie2: Introduction à SQL LANGAGE DE REQUETES RELATIONNEL CHAPITRE 4: INTERROGATION DES BASES DE DONNÉES.
SIO SLAM1: Exploitation d’un schéma de données
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 Transac SQL Intégrité des données.
Traduction des opérations sous MySQL
JDBC L'API JDBC est utilisée pour utilisée pour intéragir avec une base de données.
Chapitre 6.2 Les curseurs Cours SGBD 3A Mme hkimi Jihène
Optimisation de requêtes
1 PHP 5 Notions fondamentales (cours #5) Formation continue – Cégep de Sainte-Foy.
Sous-Interrogations.
DEFINITION DES DONNEES : schéma conceptuel. Schéma conceptuel instructiondescription CREATE TABLEcréation d'une relation ALTER TABLEmodification de la.
Sélection de colonnes (la projection)
Cours SQL.
Quinio1 Bases de données : modèlisation et SGBD Séance 3 B Quinio.
Copyright  Oracle Corporation, Tous droits réservés. 2 Sélection et Tri des Lignes Retournées par un SELECT.
Structured Query Language 1/34. SQL Types de données Langage de Définition de Données (LDD) Langage de Manipulation de Données (LDM) Langage de Contrôle.
Les bases de données Séance 8 Jointures.
Initiation aux bases de données et à la programmation événementielle Cours N°2 : langage d’interrogation de données. (Les requêtes statistiques et autres).
INTRODUCTION AUX BASES DE DONNEES SQL -2
Complément sous-requêtes
INTRODUCTION AUX BASES DE DONNEES Base et métabase
Op é rateurs ensemblistes Module 4. 2 La clause GROUP BY La clause GROUP BY est nécessaire dès que l'on utilise des fonctions de calculs statistiques.
Le Langage d ’ Interrogation des donn é es (LID) Module 2.
Introduction au langage PL/SQL
Le Langage de Manipulation de Données LMD Module 6.
CONCEPTS BD - Synthèse journée 1 :
1 Les bases de données Séance 7 Les fonctions avancées : Opérateurs ensemblistes, Sous-requêtes et transactions.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 4 Support de cours rédigé par Bernard COFFIN Université.
1 Les bases de données Séance 5 -- Le Langage de Définition de Données ou la manœuvre de la structure de la base -- Le Langage de Manœuvre de Données.
1 Les bases de données Séance 6 L ’extraction de données Le SELECT.
Langage de manipulation de données (LMD)
Manipulation D’Une Base De Données
Transcription de la présentation:

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>];

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

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;

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;

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;

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.

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% ’ ;

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;

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

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

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;

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.

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;

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

Opérateurs de manipulation de chaînes Majuscule : UPPER(chaîne) Minuscule : LOWER(chaîne)

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

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.

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 ;

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;

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.

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

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.

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 ;

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.

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.

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

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 );

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.

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');

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

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;

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

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

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 ;

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 ;

Traduction de l'union Algèbre relationnelle : R U S SQL : SELECT * FROM R UNION SELECT * FROM S

Traduction de l'intersection Algèbre relationnelle : Intersect (R , S) SQL : SELECT * FROM R INTERSECT SELECT * FROM S

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 )

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

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 »

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

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’

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.

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’;

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!

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=11500 SET pays = ‘Maroc’; WHERE id_employe=107;