Cours SQL
Cours SQL
CHAPITRE 3 :
LANGAGE SQL
24-nov.-14
Sommaire du chapitre 3
2
Requêtes d’action;
Requêtes de sélection;
Requêtes de contrôle.
Une troisième norme (SQL3) est sortie en 2003 par l'ANSI et l'ISO.
Utilisation de SQL :
En mode interactif : l’utilisateur écrit textuellement une
commande SQL et récupère le résultat immédiatement.
En mode intégré : une commande SQL est mélangée avec
les instructions d’un programme en langage de haut niveau
tel que C, C++, Visual basic, Pascal...
Les conventions relatives aux noms des tables et des champs varient
quelque peu d'un SGBD à l'autre:
Le nombre de caractères ne doit pas être trop grand (64 dans Access,
18 à 30 dans d'autres SGBD) ;
Seuls les lettres, les chiffres et le caractère de soulignement sont
autorisés.
Access admet les caractères accentués. Il admet aussi l'espace, mais le
nom du champ doit être écrit entre crochets ;
Certains SGBD requièrent que le nom d'un champ commence par une
lettre, mais ce n'est pas le cas d'Access ;
Les termes faisant partie du vocabulaire du langage SQL sont interdits
("date » par exemple). Ce sont les mots réservés.
ENCG Kénitra**Gestion des bases de données 24-nov.-14
Requêtes d’action
10
Exemples d’ajout :
Ajouter une colonne « AGE » (entier) dans la table « CLIENT » :
Exemples de suppression :
Supprimer la colonne « ADRAGENCE » de la table « AGENCE » :
Syntaxe
:
UPDATE table SET nouvelles valeurs WHERE critères
Exemples :
Donner une requête SQL pour modifier l’adresse de l'employé numéro 10
par la nouvelle adresse sera "10 Avenue Mohamed VI, Rabat".
UPDATE EMPLOYES SET Adresse = "10 Avenue Mohamed VI,
Rabat" WHERE Nemployé = 10 ;
Donner une requête SQL pour augmenter de 5% le salaire de tous les
acteurs : ACTEURS (N_act, Nom, Prénom, Nationalité, Salaire, Age,
Films)
UPDATE ACTEURS SET Salaire = Salaire * 1.05 ;
Exemples :
Effacez
tous les enregistrements de la table ACTEURS;
DELETE * FROM ACTEURS ;
Ou
DELETE N_act FROM ACTEURS ;
Effacez tous les acteurs de nationalité marocaine;
DELETE * FROM ACTEURS WHERE
Nationalité= "marocaine";
SELECT [Prédicat]
{* / table.* /[table.attribut1 As alias1], [table.attribut2 As alias2], …}
FROM Liste de table
[WHERE Critère de sélection]
[GROUP BY Liste d’attributs]
[HAVING Critère de sélection]
[ORDER BY Critère d’ordre]
Interprétation:
Projection : SELECT… FROM…
[ ] signale une clause optionnelle, c.à.d on peut utiliser la requête SELECT sans
cette clause
Prédicat: L’un des prédicats suivants: ALL, DISTINCT, DISTINCTROW, TOP ou
PERCENT.
Les prédicats permettent de limiter le nombre d’enregistrements
renvoyés. ALL est choisi par défaut
Exemples
Soit la table ACTEURS :
ACTEURS (N_act, Nom, Prénom, Nationalité, Salaire, Age, Films)
•Donner une requête SQL pour afficher tous les champs et tous les enregistrements
de la table ACTEURS
SELECT * FROM ACTEURS;
•Requête SQL pour afficher uniquement le Nom, Prénom et le salaire de chaque
Acteur
SELECT Nom, Prénom, Salaire FROM ACTEURS;
•Afficher les différentes nationalités sans doublons même si plusieurs acteurs
ont la même nationalité
SELECT DISTINCT Nationalité FROM ACTEURS;
ENCG Kénitra**Gestion des bases de données 24-nov.-14
Les requêtes de sélection
37
• Afficher le nombre d’enregistrements de la table ACTEURS qui ont une entrée dans
le champ Nom. Nommer le champ retourné Nombre d’entrée
•Afficher tous les noms d’acteurs dont l’âge est supérieur ou égal à 25
SELECT Nom FROM ACTEURS WHERE Age >=25;
• Afficher tous les noms d’acteurs dont la nationalité est américaine et l’âge est
supérieur à 25
SELECT Nom FROM ACTEURS WHERE (Nationalité="américaine") AND (Age > 25);
• Afficher tous les noms d’acteurs dont la nationalité est américaine ou l’âge est
supérieur à 25
SELECT Nom FROM ACTEURS WHERE (Nationalité="américaine") OR (Age >25);
•Afficher tous les acteurs dont la nationalité est américaine, marocaine ou égyptienne
SELECT * FROM ACTEURS WHERE Nationalité IN ("Américaine", "Egyptienne",
"marocaine");
•Afficher tous les noms d’acteurs qui commencent par "D"
SELECT Nom FROM ACTEURS WHERE Nom LIKE "D*";
•Afficher tous les noms d’acteur ne commençant pas par D et ayant 4 lettres
SELECT Nom FROM ACTEURS WHERE Nom NOT LIKE "D*" AND Nom
LIKE "????";
Exemple 2
Soit les tables PRODUITS, COMMANDES, DETAILS et EMPLOYES créées sous
ACCESS:
PRODUITS (Réf , Nompr, Nfournisseur, Pu)
COMMANDES(Ncommande, Codecli, Nemployé, Date commande)
DETAILS(Ncommande, Réf , Quantité, Remise)
EMPLOYES(Nemployé, Nom, Prénom, Fonction, Adresse, Ville)
Les jointures
Jointure interne: utilise INNER JOIN. Ne sont incluses dans le résultat
final que les lignes qui se correspondent dans les deux tables.
la jointure externe droite, dans laquelle INNER JOIN est remplacé par
RIGHT JOIN. Toutes les lignes de la seconde table sont incluses dans le
résultat de la requête, même s'il n'existe pas de ligne correspondante
dans la première table.
ENCG Kénitra**Gestion des bases de données 24-nov.-14
Les requêtes de sélection
45
Afficher tous les produits (Réf, Nompr) qui ont été vendus
ON PRODUITS.Réf = DETAILS.Réf ;
(Ou bien )
•Afficher tous les produits (Réf, Nompr) qui ont été vendus par ordre décroissant
selon le champ Réf
Par défaut, le résultat d’une requête sélection est trié selon l’ordre
croissant du premier attribut qui figure dans la clause SELECT
•En utilisant la table détails, afficher pour chaque commande le total de quantités des
produits vendus
SELECT Ncommande, SUM(Quantité) AS [Totale quantités vendues]
FROM DETAILS
GROUP BY Ncommande ;
•Afficher pour chaque commande le total de quantités des produits vendus et tel que ce
total est > 60
•Afficher pour chaque commande le total de quantités des produits vendus avec une
remise de 6% et tel que ce totale est > 60
•Afficher les employés de la ville d’Asilah qui ont vendu plus de 100 commandes
SELECT EMPLOYES.Nemployé, COUNT(*) AS [Nombre de commandes vendues]
FROM COMMANDES, EMPLOYES
WHERE EMPLOYES.Nemployé=COMMANDES.Nemployé AND Ville ="Asilah"
GROUP BY EMPLOYES.Nemployé
HAVING COUNT(*) > 100 ;