Table des matières

publicité
Système d'information de Gestion
Le langage SQL
Table des matières
ACCÈS À UNE BASE DE DONNÉES.............................................................................................2
LE LANGAGE SQL................................................................................................................................... 2
INTERROGATION DES DONNÉES.................................................................................................................... 2
Le modèle relationnel utilisé......................................................................................................................................................3
Requêtes de base.....................................................................................................................................................................4
Sélection (Restriction)...............................................................................................................................................................4
La jointure..................................................................................................................................................................................8
Requêtes emboîtées.................................................................................................................................................................9
DESCRIPTION
DES
DONNÉES..................................................................................................................... 10
DELETE..................................................................................................................................................................................10
INSERT...................................................................................................................................................................................10
UPDATE..................................................................................................................................................................................10
MÉMENTO SQL STANDARD...................................................................................................................... 11
COMMENT RÉALISER UNE REQUÊTE ?...................................................................................................... 12
© Jacques Chambon
1/12
09-COURS_SI_SQL
Système d'information de Gestion
Le langage SQL
Accès à une Base de Données
Le gestionnaire est souvent amené dans son travail à confronter des données de sources différentes.
Les outils qu'il utilise au quotidien ne lui mettent pas toujours à disposition les informations dont il a
besoin. Il lui est parfois nécessaire d'interroger une vue de base de données par l'intermédiaire d'un
requêteur.
Le schéma ci-dessus montre que l'utilisateur peut accéder aux Données de la Base soit directement
en utilisant un applicatif métier ( un logiciel de comptabilité par exemple), soit en utilisant les logiciels
bureautiques.
Dans ce deuxième cas, il devra réaliser lui même les requêtes, par l'intermédiaire d'un langage au
travers d'une interface graphique ( QBE : Query By Example) ou en frappant des requêtes SQL.
Le Middleware qui apparaît sur le schéma est un traducteur entre le SQL du SGBD et celui du
requêteur. Bien que le langage SQL soit normalisé, des particularismes locaux imposent cette
traduction.
Le langage SQL
Structured Query Language a été conçu dans les années 1970 pour manipuler les bases de Données
relationnelles.
SQL est un langage NON PROCEDURAL : L'utilisateur se contente de spécifier ce qu'il recherche
sans se préoccuper comment y parvenir. Avec un tel langage, c'est au SGBD qu'incombe le choix du
chemin d'accès aux données.
▲ L'utilisateur indique LE "QUOI" et pas le "COMMENT".
Interrogation des Données
Ce sont les ordres les plus utilisés de SQL, ils permettent :
• la sélection d'attributs répondant éventuellement à certains critères précisés et
appartenant à une ou plusieurs tables;
• le tri de données sur la valeur d'un ou plusieurs attributs, selon un ordre croissant ou
décroissant;
• l'utilisation des fonctions arithmétiques standard telles que +,-, *, /, (, ) et d'un certain
nombre de fonctions normalisées (COUNT, AVG, SUM, MIN, MAX).
La partie interrogation des données de SQL se résume à une seule instruction, ce qui en fait toute sa
puissance mais aussi sa complexité.
SELECT
liste d'attributs
FROM
liste des Tables
WHERE
condition de recherche
GROUP BY
liste d'attributs spécifiés au niveau du SELECT
HAVING
condition de regroupement
ORDER BY
attribut du tri
▲ Toute commande SELECT est une REQUETE qui génère un résultat sous forme de
table.
© Jacques Chambon
2/12
09-COURS_SI_SQL
Système d'information de Gestion
Le langage SQL
Le modèle relationnel utilisé
Vision littéraire
BATEAU ( BAT_NO, BAT_NOM, TYP_BAT_CODE, BAT_VOILE )
Clé primaire : BAT_NO
Clé étrangère : TYP_BAT_CODE référence TYPE BATEA.TYP_BAT_CODE
TYPE BATEAU ( TYP_BAT_CODE, TYP_BAT_LIBELLE, CAT_BAT_NO )
Clé primaire : TYP_BAT_CODE
Clé étrangère : CAT_BAT référence CATEGORIE BATEAU.CAT_BAT_NO
CATEGORIE BATEAU ( CAT_BAT_NO, CAT_BAT_LIBELLE)
ETRE_PROPRIETAIRE (BAT_NUMERO, ADH_CODE)
Clé primaire : ADH_CODE , BAT_NUMERO
Clé étrangère : ADH_CODE référence ADHERENT
Clé étrangère : BAT_NUMERO référence BATEAU
Louer (BAT_NO, LOC_DATE_DEBUT, LOC_DATE_FIN, LOC_HEURE_DEBUT, LOC_HEURE_FIN,
LOC_PRIX)
Clé primaire : BAT_NO, LOC_DATE_DEBUT, LOC_DATE_FIN, LOC_HEURE_DEBUT, LOC_HEURE_FIN
Clé étrangère : BAT_NO référence BATEAU. BAT_NO
ADHERENT (ADH_CODE, ADH_NOM, ADH_DATENAIS, ADH_COPOST, ADH_DECEDE,
ADH_DER_INSCRIPTION, ADH_PARRAIN)
Clé primaire : ADH_CODE
Clé étrangère : ADH_PARRAIN référence ADHERENT.ADH_CODE.
TITRE (TIT_CODE, TIT_LIBELLE, TIT_IMPORTANCE)
Clé primaire : TIT_CODE
ASSUMER_RESPONSABILITE (ADH_CODE, TIT_CODE, ASS_DATE_DEB_RESP,
ASS_DATE_FIN_RESP,ASS_RESPONSABILITE)
Clé primaire : ADH_CODE référence ADHERENT.ADH_CODE
Clé étrangère : TIT_CODE référence TITRE.TIT_CODE
EMPLOYE (EMP_MATRICULE, EMP_NOSS, EMP_NOM, EMP_PRENOM, EMP_SEXE,
EMP_DATENAISS, EMP_ADRESSE ; COM_CODE, CEN_NO, EMP_DATE_EMBAUCHE)
Clé primaire : EMP_MATRICULE
Clé étrangère : COM_CODE référence COMMUNE.COM_CODE
Clé étrangère : CEN_NO référence CENTRE;CEN_NO
Occuper (EMP_matricule, QUA_code, OCC_date_debut, OCC_date_fin,CEN_NO)
Clé primaire : EMP_MATRICULE, OCC_date_debut
Clé étrangère : EMP_MATRICULE référence EMPLOYE.EMP_MATRICULE
Clé étrangère : OCC_date_debut référence DATE.date
QUALIFICATION (QUA_CODE, QUA_LIBELLE, QUA_NIVEAU, QUA_COEF)
Clé primaire : QUA_CODE
TARIF (TAR_NB_PERS,TAR_VALEUR)
Clé primaire : TAR_NBRE
Cotiser (COT_SAISON, ADH_CODE_PAYEUR, COT_DATE_REGLEMENT, COT_MONTANT)
Clé primaire : COT_ANNEE, ADH_CODE
© Jacques Chambon
3/12
09-COURS_SI_SQL
Système d'information de Gestion
Le langage SQL
Vision graphique
Cette vision est un peu plus étendue que la vision littéraire. Elle correspond aux relations que vous
trouverez dans la Base de Données exemple.
Requêtes de base
▲ Une requête est toujours composée d'une clause SELECT et d'une clause FROM et
se termine toujours par un point virgule.
Syntaxe
SELECT [DISTINCT] expr1 [AS nom1], expr2 [AS nom2],…
FROM table1 [alias1], table2 [alias2],…
Exemple
SELECT CATEGORIE_BATEAU.CAT_BAT_LIBELLE AS Libellé
FROM CATEGORIE_BATEAU;
Affiche la colonne contenant le libellé de la catégorie bateau. Cette colonne s 'intitulera sur
la table résultante « Libellé ».
L'étoile signifie toutes les colonnes.
SELECT ADHERENT.*
SELECT *
Équivalent à
FROM ADHERENT;
FROM ADHERENT;
Affiche le contenu intégral de la table ADHERENT.
Une requête sans clause « WHERE » affiche l'intégralité des lignes de la table
d'origine pour les colonnes dont le nom a été précisé.
Sélection (Restriction)
Pour ne faire apparaître qu'un certain nombre de lignes d'une table, il faut indiquer un critère derrière
une clause WHERE.
SELECT ADHERENT.ADH_NOM,ADHERENT. ADH_VILLE
FROM ADHERENT
WHERE ADH_VILLE like 'BORDEAUX';
R1 : Affiche le nom et la ville des adhérents qui habitent la ville de Bordeaux.
L’opérateur permettant de tester le contenu d’une chaîne de caractères est LIKE
© Jacques Chambon
4/12
09-COURS_SI_SQL
Système d'information de Gestion
Le langage SQL
Le symbole = est réservé aux valeurs numériques !
Sélection avec élimination des doublons.
SELECT DISTINCT ADHERENT.ADH_NOM, ADHERENT.ADH_VILLE
FROM ADHERENT
WHERE ADHERENT.ADH_VILLE like 'BORDEAUX';
R2 : Plusieurs Adhérents habitant Bordeaux ont le même nom. Il s'agit des familles inscrites
à l'association., ainsi on aura sur plusieurs lignes le couple CHANFORT, BORDEAUX. Ces
« doublons » n'apportent aucune information supplémentaire. On décide donc de les
éliminer en utilisant la clause DISTINCT.
Lorsque les noms d'attribut ne génèrent aucune ambiguïté, il n'est pas nécessaire de
préciser le nom de la table.
Dans les requêtes suivantes, nous n'utiliserons le nom « complet d'attribut » (nom table . nom attribut)
que lorsque se sera nécessaire, sinon nous n'utiliserons que le nom simplifié
Sélection avec opérateur OU
SELECT ADH_VILLE, ADH_NOM, ADH_PRENOM, ADH_DATENAIS
FROM ADHERENT
WHERE ADH_VILLE like 'BORDEAUX' OR ADH_VILLE like 'DAX';
Le nom de l'attribut doit être répété dans l'expression de la condition.
R3 : Affiche la ville, le nom, le prénom et la date de naissance des adhérents qui habitent la
ville de Bordeaux ou la ville de Dax.
Sélection avec opérateur ET
SELECT ADH_NOM, ADH_PRENOM, ADH_VILLE, ADH_COMPET
FROM ADHERENT
WHERE ADH_VILLE like 'BORDEAUX' AND ADH_COMPET= TRUE;
R4 : Affiche le nom , le prénom, la ville et l'état de compétition des adhérent habitant
Bordeaux et ayant déclarés participer à des compétitions.
Les mots TRUE et FALSE sont des mots réservés et compris par SQL.
Expression Null
SELECT ADH_NOM, ADH_SEXE
FROM ADHERENT
WHERE ADH_SEXE Is Null;
R5 : Une donnée non renseignée dans une Base de Données Relationnelle est considérée
comme NULL. La requête précédente affiche le nom et le sexe des adhérents pour lesquels
le code du sexe n'a pas été renseigné.
Négation
SELECT ADH_NOM, ADH_PRENOM, ADH_SEXE
FROM ADHERENT
WHERE not(ADH_SEXE=1);
R6 : Affiche les nom, prénom et sexe des Adhérents dont le sexe est différent de 1. Si la
codification est celle de l'INSEE, on affiche les informations des ADHERENTES.
Appartenance à un intervalle.
SELECT ADH_NOM, ADH_PRENOM, ADH_COPOST
FROM ADHERENT
WHERE ADH_COPOST Between '40000' And '40999';
R7 : Affiche le nom, le prénom et le Code Postal des Adhérents habitant le département des
Landes (Code Postal compris entre 40000 et 40999).
Sélection d'occurrences appartenant à un ensemble de valeurs. (R8)
SELECT ADH_VILLE, ADH_NOM, ADH_PRENOM
FROM ADHERENT
WHERE UPPER(ADH_VILLE) in ('BORDEAUX','DAX','ARCACHON');
Dans sa forme élémentaire, IN peut être remplacé par une condition utilisant l'opérateur
OR. (R9)
© Jacques Chambon
5/12
09-COURS_SI_SQL
Système d'information de Gestion
Le langage SQL
WHERE ADH_VILLE LIKE 'BORDEAUX' OR ADH_VILLE LIKE 'DAX' OR
ADH_VILLE ='ARCACHON');
Lorsqu'on teste le contenu d'un attribut alphanumérique, on ne sait jamais sous quelle forme
l'utilisateur a frappé les informations (majuscules ou minuscules). Il est donc raisonnable de
convertir le contenu des attributs en majuscules avant d'en tester le contenu : c'est le rôle de
la fonction UPPER.
Recherche alphanumérique
LIKE doit être suivi d'un masque 'chaîne de caractères'. Le séparateur de chaîne de caractères est
l'apostrophe.
les symboles autorisés sont :
% qui signifie "quel que soit le nombre de caractères!
_ qui remplace un caractère quelconque.
Exemple
R10 : Affiche les nom et prénom des Adhérents dont le nom commence par la lettre L
majuscule.
SELECT ADH_NOM, ADH_PRENOM
FROM ADHERENT
WHERE ADH_NOM Like 'L%';
R11 :Affiche le prénom des Adhérents dont la troisième lettre du nom est un E minuscule.
(attention la casse est importante : SQL distingue « e » et « E »)
SELECT ADHERENT, ADH_PRENOM
FROM ADHERENT
WHERE ADH_NOM Like '__E%';
Tri des résultats d'une requête (R12)
SELECT DISTINCT ADH_NOM, ADH_VILLE
FROM ADHERENT
WHERE ADH_VILLE LIKE 'BORDEAUX'
ORDER BY ADH_NOM;
Affiche la liste des noms des adhérents et de leur ville respective, triée par ordre
alphabétique Croissant des noms d'adhérent.
Le mot clé « ASC » est facultatif. L'ordre de tri par défaut est l'ordre ascendant.
SELECT DISTINCT ADH_NOM, ADH_VILLE
FROM ADHERENT
WHERE ADH_VILLE LIKE 'BORDEAUX'
ORDER BY ADH_NOM DESC;
R13 : Affiche la liste des noms des adhérents et de leur ville respective, triée par ordre
alphabétique Décroissant des noms d'adhérent.
Il est tout à fait possible de faire des tris sur plusieurs attributs en mélangeant l'ordre
Exemple
ORDER BY ADH_NOM, ADH_PRENOM, ADH_VILLE DESC ;
Sélection d'attributs calculés
Les attributs calculés peuvent apparaître derrière un SELECT ou dans une condition de base derrière
un WHERE.
Exemple
R14 : Affichage du tarif en vigueur en fonction du nombre d'adhérents, de la redevance à
verser aux activités sportives (15% de la valeur du tarif)et d'une augmentation éventuelle de
10%.
SELECT TAR_NB_PERS, TAR_VALEUR, TAR_VALEUR/1.85 AS Redevance,
TAR_VALEUR*1.1 AS Augmentation
FROM TARIF_COTISER;
© Jacques Chambon
6/12
09-COURS_SI_SQL
Système d'information de Gestion
Le langage SQL
Exemple
R15 : Liste des Dirigeants qui ont quitté leur fonction depuis plus d'un demi siècle.
SELECT ADH_CODE, ASS_DATE_FIN_RESP
FROM Assumer_Responsabilite
WHERE ASS_DATE_FIN_RESP < Year(current_date)-50;
Il existe des fonctions de gestion des dates dont la syntaxe dépend du SGBD utilisé. La
fonction CURRENT_DATE qui donne la date du jour, est normalisée et peut être utilisée
avec tous les SGBDR.
Gestion des Dates
R16 : Liste des noms prénoms et age des Adhérents.
SELECT ADH_NOM, ADH_PRENOM, YEAR(CURRENT_DATE)YEAR(ADH_DATENAIS) AS Age
FROM ADHERENT;
On calcule l'âge en faisant la différence entre l'année en cours (Year(CURRENT_DATE)) et
l'année de la date de naissance (Year(ADH_DATE_NAIS))
Sélection en utilisant les fonctions intégrées
Fonction
COUNT
Dénombre les lignes d'une table
SUM
Somme les valeurs des occurrences d'un attribut
AVG
Moyenne des valeurs d'un attribut
MIN
Valeur minimum de la liste des valeurs d'un attribut
MAX
Valeur maximum de la liste des valeurs d'un attribut
R17 : Nombre de lignes de la table ADHERENT
SELECT COUNT(*)
FROM ADHERENT;
La Fonction COUNT (*) permet de compter toutes les lignes, mais cette fonction peut
s'appliquer sur un attribut particulier.
Exemple
SELECT COUNT(ADH_NOM)
R18 : Montant des cotisations récupérées pour l'année courante
SELECT SUM(Cotiser.COT_MONTANT) AS Paiement
FROM Cotiser
WHERE (COT_SAISON = Year (CURRENT_DATE);
R19 : Calcul de la moyenne de l'age des adhérents
SELECT AVG(Year(current_date)-Year(ADH_DATENAIS) )AS Moyenne_age
FROM ADHERENT;
L'argument utilisé avec SUM et AVG doit être de type numérique. On peut éventuellement faire
précéder l'argument du mot clé DISTINCT pour éliminer les valeurs redondantes.. Si DISTINCT n'est
pas spécifié, l'argument peut être une expression contenant des opérations.
R20 : Age du plus jeune adhérent.
SELECT MIN(Year(current_date)-Year(ADH_DATENAIS) )AS "Age Plus jeune"
FROM ADHERENT;
R21 : Age de l'adhérent le plus agé.
SELECT MAX(Year(current_date)-Year(ADH_DATENAIS) )AS "Age plus agé"
FROM ADHERENT;
Sélection de groupe
L'opérateur GROUP BY réarrange la table représentée par la clause FROM WHERE, en un nombre
minimum de groupes dont les lignes contiennent une valeur commune, différente pour chacun des
groupes.
© Jacques Chambon
7/12
09-COURS_SI_SQL
Système d'information de Gestion
Le langage SQL
Exemple
R22 : Répartition des Adhérents par Sexe
SELECT ADH_SEXE, COUNT(ADH_CODE) AS NB
FROM ADHERENT
GROUP BY ADH_SEXE;
Affiche un liste composée de deux colonnes : la première donne la liste des codes Sexe,la
seconde, le nombre d'adhérent du sexe correspondant.
R23 : Répartition des Adhérents par Statut vivant ou décédé.
SELECT ADH_DECEDE,COUNT(*) AS Nb
FROM ADHERENT
GROUP BY ADH_DECEDE;
Dans l'association, on garde l'historique des adhérents. Lorsqu'un adhérent décède on
bascule l'attribut ADH_DECEDE de Faux à Vrai.
Lorsqu'une condition doit s'appliquer sur un attribut du SELECT lorsqu'un GROUP By est demandé,
elle doit être déclarée derrière une clause HAVING.
La clause HAVING est une clause WHERE pour les groupes. La clause HAVING
implique la clause GROUP BY
Exemple
R24 : Nombre de membres Dirigeants depuis 1990
SELECT ASS_DATE_DEB_RESP, Count(ADH_CODE) As Nombre
FROM Assumer_Responsabilite
GROUP BY ASS_DATE_DEB_RESP
HAVING ASS_DATE_DEB_RESP >1990
ORDER BY ASS_DATE_DEB_RESP ;
Depuis 1990 les membres du bureaux sont élus pour trois ans. Cette requête doit montrer
l'évolution du nombre de membres dirigeants.
La jointure
La jointure consiste à apparier les occurrences d'une table, dont la valeur de la clé étrangère est égale
à la valeur de la clé primaire de l'autre table.
Exemple
Avec 2 tables
R25 : Liste des Noms, prénoms et section dans laquelle sont inscrits les Adhérents.
SELECT ADH_NOM, ADH_PRENOM, SEC_LIBELLE
FROM SECTION, ADHERENT
WHERE ADHERENT.SEC_CODE=SECTION.SEC_CODE ;
On remarque que dans l'expression de l'égalité, il faut OBLIGATOIREMENT préciser
le nom des tables pour lever l'ambiguïté sur le nom des attributs.
R26 : Rapport des locations par bateau
SELECT BATEAU.BAT_NOM, SUM(Louer.LOC_PRIX)
FROM BATEAU, Louer
WHERE BATEAU.BAT_NO = Louer.BAT_NO
GROUP BY BATEAU.BAT_NOM;
R27 : Liste des bateaux de locations qui ont rapportés moins de 20000 euros.
SELECT BATEAU.BAT_NOM, SUM(Louer.LOC_PRIX)
FROM BATEAU, Louer
WHERE BATEAU.BAT_NO = Louer.BAT_NO
GROUP BY BATEAU.BAT_NOM
Having SUM(Louer.LOC_PRIX) < 20000;
Avec plus de 2 tables
R28 : Liste des bateaux, de leur type et de leur catégorie ordonnée par nom.
SELECT BATEAU.BAT_NOM, TYPE_BATEAU.TYP_BAT_LIBELLE,
CATEGORIE_BATEAU.CAT_BAT_LIBELLE
© Jacques Chambon
8/12
09-COURS_SI_SQL
Système d'information de Gestion
Le langage SQL
FROM CATEGORIE_BATEAU,TYPE_BATEAU,BATEAU
WHERE TYPE_BATEAU.TYP_BAT_CODE = BATEAU.TYP_BAT_CODE
AND CATEGORIE_BATEAU.CAT_BAT_CODE = TYPE_BATEAU.CAT_BAT_CODE
ORDER BY BATEAU.BAT_NOM;
Le nombre de jointure est égal au nombre de tables concernées par la requête -1
Requêtes emboîtées
En SQL de base, les requêtes ne peuvent pas être enchaînées. Si une requête nécessite de travailler
sur les résultats d'une autre requête, il faut les emboîter.
De façon pratique, une sous-requête (requête appelée) est une requête SQL (bloc SWF) encapsulée
à l'intérieur d'une autre requête (requête appelante).
L'opérateur = retourne une seule valeur à la requête « appelante », alors que l'opérateur IN retourne
un ensemble de valeurs.
Condition d'égalité
La sous requête interne ne retourne qu’une seule valeur!
Exemple
On désire obtenir la liste des Adhérents qui habitent la même ville que celle où habite Georges
GUFFLON.
Comme on ne sait pas dans quelle ville habite Georges Gufflon, il faut dans un premier temps, trouver
cette ville à l'aide de la requête :
SELECT ADHERENT.ADH_VILLE
FROM ADHERENT
WHERE ADHERENT.ADH_NOM like ‘GUFFLON’ AND ADHERENT.ADH_PRENOM
like ‘Georges’
Cette requête ne retourne qu'une seule valeur : le nom de la ville demandée (CESSAC).
Le résultat de cette requête devient alors une valeur qui peut être utilisée comme condition dans une
autre requête.
SELECT ADHERENT.ADH_NOM, ADHERENT.ADH_PRENOM,
ADHERENT.ADH_ADRESSE, ADHERENT.ADH_VILLE
FROM ADHERENT
WHERE ADHERENT.ADH_VILLE =
(SELECT ADHERENT.ADH_VILLE
FROM ADHERENT
WHERE ADHERENT.ADH_NOM like “GUFFLON”
AND ADHERENT.ADH_PRENOM like”Georges”
);
Condition IN
La sous requête interne retourne plusieurs valeurs!
Exemple
On recherche les Code, nom et prénom des adhérents qui ont payés une cotisation.
SELECT ADHERENT.ADH_NOM, ADHERENT.ADH_PRENOM
FROM ADHERENT
WHERE ADHERENT.ADH_CODE In
(SELECT Distinct COTISER.ADH_CODE
FROM COTISER
);
Le système commence par évaluer le bloc interne.
SELECT Distinct
COTISER.ADH_CODE_PAYEUR
FROM COTISER ;
© Jacques Chambon
9/12
09-COURS_SI_SQL
Système d'information de Gestion
Le langage SQL
Puis le bloc externe
SELECT ADHERENT.ADH_NOM,
ADHERENT.ADH_PRENOM
FROM ADHERENT
WHERE ADHERENT.ADH_CODE In ( requete )
Description des Données
DELETE
Cette commande permet de supprimer des données contenues dans une table.
Syntaxe
DELETE [FROM] [table | [WHERE condition]
table est le nom de la table contenant les lignes qui seront détruites.
WHERE Détruit seulement les lignes satisfaisant la condition. Cette condition peut référencer la table
et peut contenir des sous-requêtes. Si cette clause est omise, la commande détruit toutes les lignes
de la table.
Exemple
Supprimer tous les adhérents qui n’ont pas renouvelés leur adhésion depuis trois ans.
DELETE FROM ADHERENT
WHERE YEAR(CURENT_DATE)-YEAR(ADH_DER_INSCRIPTION) > 3 ;
INSERT
Cette commande permet d’insérer des valeurs d’occurrence dans une table.
Syntaxe
INSERT INTO table [(champ1, champ2,…)] VALUES (val1, val2,…)
Exemple
Insérer les deux nouveaux arrivants Diane DUFRENE et Joe BAR
INSERT INTO ADHERENT (ADH_NOM, ADH_PRENOM)
VALUES (‘DUFRENE’,’Diane’);
INSERT INTO ADHERENT (ADH_NOM, ADH_PRENOM)
VALUES (‘BAR’,’Joe’);
Il faut autant de commande INSERT que d’occurrences à ajouter.
UPDATE
Cette commande permet de modifier le contenu de certaines occurrences
Syntaxe
UPDATE table SET champ1 = expr1, champ2 = expr2,…
WHERE prédicat
Exemple
Une erreur a été commise au moment de la saisie des données concernant Jean DUPONT. Il a été
domicilié à bordeaux (33000), alors qu’il habite à Talence (33400).
UPDATE ADHERENT
SET ADH_COPOST = ‘33400’, ADH_VILLE = ‘TALENCE’
WHERE ADH_NOM =’DUPONT’ and ADH_PRENOM =’Jean’;
© Jacques Chambon
10/12
09-COURS_SI_SQL
Système d'information de Gestion
Le langage SQL
Mémento SQL standard
Syntaxe générale SELECT… FROM… WHERE… GROUP BY… HAVING… ORDER BY…;
PROJECTION
SELECT [DISTINCT] expr1 [AS nom1], expr2 [AS nom2],…
FROM table1 [alias1], table2 [alias2],…
WHERE expr1 = / <> / < / > / <= / >= expr2
WHERE expr1 BETWEEN expr2 AND expr3
WHERE expr1 [NOT] LIKE chaîne1
RESTRICTION
WHERE expr1 [NOT] IN (expr2, expr3, …)
WHERE expr1 IS [NOT] NULL
AND / OR prédicat
JOINTURES
NATURELLES
SELECT expr1, expr2,…
FROM table1, table2
WHERE table1.champ1 = table2.champ2
SELECT [expr1], …, SUM (expr2) [AS nom2]
SELECT [expr1], …, MAX (expr2) [AS nom2]
AGRÉGATS
SELECT [expr1], …, MIN (expr2) [AS nom2]
SELECT [expr1], …, AVG (expr2) [AS nom2]
SELECT [expr1], …, COUNT (*) [AS nom2]
GROUP BY expr1, expr2,…
REGROUPEMENT
HAVING prédicat
CLASSEMENT
ORDER BY expr1 [ASC / DESC], expr2 [ASC / DESC],…
INTERSECTION
WHERE table1.champ1 IN (SELECT table1.champ1 …) ;
DIFFÉRENCE
WHERE table1.champ1 NOT IN (SELECT table1.champ1 …) ;
© Jacques Chambon
11/12
09-COURS_SI_SQL
Système d'information de Gestion
Le langage SQL
Comment réaliser une requête ?
Soit à réaliser la requête donnant la liste des Adhérents ( nom, prénom, adresse, code postal et ville)
propriétaire d'un bateau de type 470.
Il analyser la phrase de la requête en repérant :
•
les données à afficher ( celles qui apparaîtront derrière le mot clé SELECT) ;
•
Le critère qui sera exprimé dans le WHERE ;
•
le chemin à parcourir en partant des données du SELECT pour arriver au critère.
SELECT ADH_NOM, ADH_PRENOM, ADH_ADRESSE, ADH_COPOST, ADH_VILLE
FROM ADHERENT, Etre_Proprietaire, BATEAU, TYPE_BATEAU
WHERE TYPE_BATEAU.TYP_BAT_LIBELLE like '470'
AND ADHERENT.ADH_CODE = Etre_Proprietaire.ADH_CODE
AND Etre_Proprietaire.BAT_NO = BATEAU.BAT_NO
AND BATEAU.TYP_BAT_CODE = TYPE_BATEAU.TYP_BAT_CODE ;
© Jacques Chambon
12/12
09-COURS_SI_SQL
Téléchargement