lmd: langage de manipulation de données. lordre de sélection de données select select date_achat,...

27
LMD: Langage de Manipulation de Données

Upload: eulalie-jouve

Post on 03-Apr-2015

105 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,

LMD: Langage de Manipulation de Données

Page 2: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,

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;

Page 3: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,

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;

Page 4: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,

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;

Page 5: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,

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

Page 6: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,

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

Page 7: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,

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;

Page 8: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,

LMD: Langage de Manipulation de Données

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.

 La jointure interne

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é.

Page 9: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,

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.

Page 10: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,

LMD: Langage de Manipulation de Données

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;

 La jointure externe

Le mot OUTER est facultatif et indique que l’on réalise une jointure externe, par opposition au mot INNER vu plus haut.

Page 11: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,

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 ...

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 ...

OU

Page 12: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,

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 ...

Page 13: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,

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;

Page 14: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,

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;

Page 15: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, 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;

Page 16: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,

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;

Page 17: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,

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.

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;

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.

Page 18: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,

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

Page 19: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,

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

Page 20: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,

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

Page 21: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,

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

Page 22: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,

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;

Page 23: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,

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

Page 24: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,

LMD: Langage de Manipulation de Données

EXISTS NOT EXISTS (Existence ou non)

Les fonctions

Les fonctions de comparaison et de tests

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

Page 25: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,

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)

Page 26: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,

LMD: Langage de Manipulation de Données

Page 27: LMD: Langage de Manipulation de Données. Lordre de sélection de données SELECT SELECT DATE_ACHAT, TYPE, MARQUE FROM TELEPHONE; SELECT DATE_ACHAT, TYPE,