LMD: Langage de Manipulation de Données
LMD: Langage de Manipulation de Données L’ordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT * FROM TELEPHONE;
LMD: Langage de Manipulation de Données Les options DISTINCT et ALL Par défaut lors de l’exécution d’un SELECT toutes les lignes sont ramenées (l’option ALL est automatique). Si on veut supprimer les doublons, il faut ajouter l’ordre DISTINCT. L’ordre DISTINCT s’applique à toutes les colonnes présentes. SELECT TYPE, MARQUE, PRIX FROM TELEPHONE; SELECT DISTINCT TYPE, MARQUE, PRIX FROM TELEPHONE;
LMD: Langage de Manipulation de Données Utilisation des alias Exemple d’alias sur une colonne : SELECT TYPE C1, MARQUE C2, PRIX FROM TELEPHONE TELEPH; Exemple d’alias sur un résultat de calcul : SELECT TYPE C1, MARQUE C2, PRIX*6.55957 PRIX_FRANC FROM TELEPHONE TELEPH;
LMD: Langage de Manipulation de Données La clause WHERE Nous avons vu comment récupérer toutes les lignes des tables dans les paragraphes précédents. Pour pouvoir sélectionner une partie des lignes des tables, il faut ajouter une restriction symbolisée par la clause WHERE. SELECT TELEPH.TYPE, TELEPH.MARQUE, TELEPH.PRIX FROM TELEPHONE WHERE TELEPH.TYPE IN (’SP’, ’CL’) # SP=Smartphone ou CL=Clapet AND TELEPH.PRIX < 200 AND EXISTS (SELECT MARQUE FROM MARQUE_TEL MARQ WHERE MARQ.MARQUE = TELEPH.MARQUE);
LMD: Langage de Manipulation de Données Les jointures Dans une base relationnelle, la jointure est un des éléments essentiels qui permet d’extraire les données de plusieurs tables en appliquant des conditions sur les colonnes. Si nous avons 5 lignes dans chacune des tables TELEPHONE et TYPE_TEL, le système ramènera 5x5 = 25 Lignes. Il faut donc relier les tables entre elles afin d’obtenir un résultat conforme à nos attentes
LMD: Langage de Manipulation de Données La jointure interne Il faut faire la jointure sur la table TYPE_TEL avec la colonne TYPE et la jointure sur la table MARQUE_TEL sur la colonne MARQUE. SELECT TELEPH.DATE_ACHAT, TELEPH.TYPE, TYP.LIB_TYPE, TELEPH.MARQUE, MARQ.LIB_MARQUE FROM TELEPHONE TELEPH, TYPE_TEL TYP, MARQUE_TEL MARQ WHERE TELEPH.TYPE = TYP.TYPE AND TELEPH.MARQUE = MARQ.MARQUE;
LMD: Langage de Manipulation de Données La jointure interne Il existe une autre notation pour obtenir le même résultat en utilisant l’ordre JOIN qui est défini dans les normes SQL. la norme préconise de travailler avec cet ordre afin de bien distinguer les conditions et les jointures. En effet, dans un WHERE, il est quelques fois difficile de différencier les restrictions des jointures. SELECT TELEPHONE.DATE_ACHAT, TELEPHONE.TYPE, TYPE_TEL.LIB_TYPE, TELEPHONE.MARQUE, MARQE_TEL.LIB_MARQUE FROM TELEPHONE INNER JOIN TYPE_TEL ON TELEPHONE.TYPE = TYPE_TEL.TYPE INNER JOIN MARQUE_TEL ON TELEPHONE.MARQUE = MARQUE_TEL .MARQUE; Le mot INNER est facultatif, il indique qu’il s’agit du jointure interne, la jointure par défaut lorsque l’on ne précise pas autre chose. L’opérateur ON précède le critère de jointure qui sera utilisé.
LMD: Langage de Manipulation de Données La jointure externe Pour ramener toutes les lignes de la table maître, il faut le préciser au SGBDR même s’il n’y a pas de correspondance dans les tables filles. Dans ce cas le système ramène les colonnes sans correspondance à NULL. Exemple avec JOIN dans lequel il faut ajouter le mot LEFT (ou RIGHT) pour préciser que l’on veut toutes les lignes de la table à gauche du mot JOIN, ici TELEPHONE. Si l’on voulait toutes les lignes de la table TYPE_TEL ou MARQUE_TEL on le préciserait avec le mot RIGHT. Les tables sont à droite du mot JOIN. Si l’on veut à la fois les lignes de la table de droite et des tables de gauche, il faut utiliser le mot FULL à la place de RIGHT ou LEFT.
LMD: Langage de Manipulation de Données La jointure externe SELECT TELEPHONE.DATE_ACHAT, TELEPHONE.TYPE, TYPE_TEL.LIB_TYPE, TELEPHONE.MARQUE, MARQUE_TEL.LIB_MARQUE FROM TELEPHONE LEFT OUTER JOIN TYPE_TEL ON TELEPHONE.TYPE = TYPE_TEL.TYPE LEFT OUTER JOIN MARQUE_TEL ON TELEPHONE.MARQUE = MARQUE_TEL.MARQUE; Le mot OUTER est facultatif et indique que l’on réalise une jointure externe, par opposition au mot INNER vu plus haut.
LMD: Langage de Manipulation de Données Syntaxe des différentes jointures: Jointure interne SELECT <colonne 1>, <colonne 2>, etc ... FROM <table gauche> [INNER] JOIN <table droite 1> ON <critères 1>, [INNER] JOIN <table droite 2> ON <critères 2>, etc ... OU SELECT <colonne 1>, <colonne 2>, etc ... FROM <table gauche>, <table droite 1>, <table droite 2> etc ... WHERE <critères 1> AND <critères 2> etc ...
LMD: Langage de Manipulation de Données Syntaxe des différentes jointures: Jointure externe SELECT <colonne 1>, <colonne 2>, etc ... FROM <table gauche> [LEFT|RIGHT|FULL] [OUTER] JOIN <table droite 1> ON <critères>, [LEFT|RIGHT|FULL] [OUTER] JOIN <table droite 2> ON <critères>, etc ...
LMD: Langage de Manipulation de Données Les tris (ORDER BY) SELECT TELEPH.DATE_ACHAT, TELEPH.TYPE, TYP.LIB_TYPE, TELEPH.MARQUE, MARQ.LIB_MARQUE FROM TELEPHONE TELEPH JOIN TYPE_TEL TYP ON TELEPH.TYPE = TYP.TYPE JOIN MARQUE_TEL MARQ ON TELEPH.MARQUE = MARQ.MARQUE ORDER BY TELEPH.TYPE ASC, MARQ.LIB_MARQUE DESC;
LMD: Langage de Manipulation de Données Les regroupements (GROUP BY) Cette clause permet de supprimer les doublons dans les lignes ramenées et de réaliser des calculs sur les colonnes sélectionnées. SELECT DISTINCT TYPE FROM TELEPHONE; Equivalent à : SELECT TYPE FROM TELEPHONE GROUP BY TYPE;
LMD: Langage de Manipulation de Données Les fonctions utilisées lors d’un regroupement SELECT COUNT(*) FROM TELEPHONE; SELECT SUM(PRIX) FROM TELEPHONE; Par exemple pour connaître le nombre de lignes de la table TELEPHONE qui ont un prix identique. SELECT TELEPH.PRIX, COUNT(*) AS NB_PRIX FROM TELEPHONE TELEPH GROUP BY TELEPH.PRIX ORDER BY TELEPH.PRIX ASC;
LMD: Langage de Manipulation de Données SUM (sommer des valeurs) SELECT TELEPH.COULEUR, SUM(TELEPH.PRIX) AS PRIX_CUMULE FROM TELEPHONE TELEPH JOIN TYPE_TEL TYP ON TELEPH.TYPE = TYP.TYPE GROUP BY TELEPH.COULEUR ORDER BY TELEPH.COULEUR ASC; MAX et MIN (les valeurs maximum et minimum) SELECT MAX(TELEPH.PRIX) AS PRIX_MAX FROM TELEPHONE TELEPH;
LMD: Langage de Manipulation de Données AVG (la moyenne) Cette fonction permet de calculer la moyenne d’une série de chiffres. Elle s’applique à une colonne de type numérique bien sûr. Par exemple, pour connaître le prix moyen des téléphones par type comme dans l’exemple précédent, il suffit de remplacer le SUM/COUNT par un AVG pour obtenir le même résultat. SELECT TELEPH.TYPE, TYP.LIB_TYPE, MIN(TELEPH.PRIX) AS PRIX_MIN, MAX(TELEPH.PRIX) AS PRIX_MAX, AVG(TELEPH.PRIX) AS PRIX_MOYEN FROM TELEPHONE TELEPH JOIN TYPE_TEL TYP ON TELEPH.TYPE = TYP.TYPE GROUP BY TELEPH.TYPE, TYP.LIB_TYPE ORDER BY TELEPH.TYPE ASC;
LMD: Langage de Manipulation de Données HAVING On ne peut pas considérer la clause HAVING comme une fonction mais comme un filtre supplémentaire qui travaille sur le résultat d’un GROUP BY. À l’instar du WHERE qui filtre les lignes ramenées par le SELECT, le HAVING va filtrer le résultat des fonctions utilisées. Sélection des prix dans la base qui sont présents au moins deux fois : SELECT TELEPH.PRIX, COUNT(*) AS NB_PRIX FROM TELEPHONE TELEPH GROUP BY TELEPH.PRIX HAVING COUNT(*) > 1; Mediaexport -2 LMD
LMD: Langage de Manipulation de Données L’insertion de données L’ordre INSERT INSERT INTO TELEPHONE (NUMERO, TYPE, MARQUE, DATE_ACHAT,PRIX,NUM_PROPRIETAIRE,COULEUR) VALUES (1,’SP’ ,1,to_date(’15/01/2010’,’DD/MM/YYYY’),159,190120,’ROUGE’);
LMD: Langage de Manipulation de Données L’insertion à partir d’une autre table INSERT INTO TELEPHONE (TYPE, MARQUE, COULEUR, PRIX, DATE_ACHAT) (SELECT TYPE,MARQUE,COULEUR,PRIX_ACHAT*2.5,NOW() FROM ACHAT_TEL);
LMD: Langage de Manipulation de Données La suppression de données L’ordre DELETE Exemple de suppression de toutes les lignes d’une table : DELETE FROM TELEPHONE; DELETE FROM TELEPHONE WHERE COULEUR IS NULL AND DATE_ACHAT < STR_TO_DATE(’31/12/2010’,’%d/%m/%Y’);
LMD: Langage de Manipulation de Données La modification de données L’ordre UPDATE UPDATE TELEPHONE SET PRIX = 99; UPDATE TELEPHONE SET PRIX = 99 WHERE PRIX = 49; UPDATE TELEPHONE SET PRIX = 99 WHERE PRIX > 19 AND PRIX < 100; UPDATE TELEPHONE SET PRIX = 99, COULEUR = ’ROUGE’, DATE_ACHAT = TO_DATE(’15/01/2011’,’DD/MM/YYYY’) WHERE PRIX > 19 AND PRIX < 100;
LMD: Langage de Manipulation de Données Les fonctions Les fonctions numériques Tous les opérateurs sont utilisables : +, , *, / mais également des fonctions comme la valeur absolue, le cosinus, les logarithmes, le modulo, l’arrondi, etc. Les fonctions de comparaison et de tests IN NOT IN SELECT T.TYPE, Y.LIB_TYPE, SUM(PRIX) P_TOTAL, ROUND(SQRT(SUM(PRIX))) AS RACINE FROM TELEPHONE T, TYPE_TEL Y WHERE T.TYPE = Y.TYPE GROUP BY T.TYPE,Y.LIB_TYPE HAVING ROUND(SQRT(SUM(PRIX))) IN (7,14,21);
LMD: Langage de Manipulation de Données Les fonctions Les fonctions de comparaison et de tests EXISTS NOT EXISTS (Existence ou non) BETWEEN (entre 2 valeurs) LIKE (qui contient une partie de valeur) Les fonctions de gestion des dates et heures SELECT CURRENT_DATE,CURRENT_DATE(), CURDATE(), NOW() FROM DUAL; SELECT DATE_FORMAT(NOW(), ’%d/%m/%Y’)
LMD: Langage de Manipulation de Données Heure actuelle SELECT CURRENT_TIME Pour MySQL les principaux sont : %h, %H : format d’affichage de l’heure sur 12 ou 24 %i : Minute %s : Seconde Les fonctions sur les chaînes de caractères LOWER / UPPER / UCASE / LCASE (minuscules et majuscules)
LMD: Langage de Manipulation de Données