Introduction au langage SQL et commandes
Introduction au langage SQL et commandes
Le langage SQL
SQL est un langage de manipulation de
données qui est devenu un standard dans le
monde des bases de données.
SQL simplifie la manipulation des tables en
autorisant la recherche d'informations et la
mise à jour des relations par l'intermédiaire de
requêtes:
Le langage SQL
Une requête est une interrogation d’une
base de données afin:
Créer des tables
1
06/03/2018
Type(CREATE)
Char(x) ou VARCHAR(x): chaîne de caractères, x est
le nombre maximum de caractères autorisés dans le
champ.
Integer ou INT: Nombre entier, positif ou négatif
Decimal (x,y) : Nombre décimal, x est le nombre
maximum de chiffres et y le nombre maximum de
chiffres après la virgule.
Date : Une date
Datetime: date avec l’heure
Float
4
2
06/03/2018
Propriétés du champ :
- Commande(num_cmd ,date_cmd,#num_clt)
- La requête de création de la table commande avec les
contraintes de clé primaire et étrangère est la suivante:
Create table commande( num_cmd int not null,date_cmd
date not null, num_clt int not null,primary key(num_cmd),
foreign key(num_clt) references client(num_clt));
Num_clt est une clé primaire dans la table client
3
06/03/2018
Clé étrangère :
Ajouter la contrainte de clé étrangère à une table
Exemple:
Propriétés du champ(suite)
4
06/03/2018
Exemple
Exercice
Créer la nouvelle table "table_test" contenant deux
champs : un champ avec un entier qui doit toujours être
saisi et un champ contenant une chaîne de 5
caractères :
CREATE TABLE table_test (champ1 integer NOT
NULL, champ2 char(5));
10
5
06/03/2018
11
12
6
06/03/2018
13
Exemple
- Ajout d'un champ Date :
ALTER TABLE table_test ADD champ3
Date;
- Suppression du champ2 :
7
06/03/2018
15
16
8
06/03/2018
INSERT
La commande INSERT est utilisée pour ajouter des
enregistrements ou des parties d'enregistrements
dans des tables.
La syntaxe de la commande INSERT:
INSERT
INTO table (champ1,champ2,...)
VALUES ('valeur1','valeur2',...);
ou
INSERT
INTO table
VALUES ('valeur1','valeur2',...);
17
INSERT(Exemple)
Si on veut ajouter un enregistrement dans la table
étudiant (id_etud,nom,prenom,age):
Le champ « Id_etud » s’incrémente automatiquement.
INSERT
INTO etudiant
VALUES ('','amrani','manal',22);
Si on veut ajouter une partie d’enregistrement
(nom,prénom) dans la table étudiant:
INSERT
INTO etudiant (nom,prenom)
VALUES ('amrani','manal');
18
9
06/03/2018
UPDATE
La commande UPDATE est utilisée pour changer
des valeurs dans des champs d'une table.
Sa syntaxe est :
UPDATE nom_table
SET champ1 = nouvelle_valeur1,
champ2 = nouvelle_valeur2,
champ3 = nouvelle_valeur3
WHERE condition;
19
UPDATE(suite)
La clause SET indique quels champs de la table
l'être.
20
10
06/03/2018
UPDATE(Exemple)
modifier le prix d'un produit dont le libellé est
« produit1 » :
UPDATE produits
SET prix_unitaire = 1000
WHERE libelle = 'produit1';
21
DELETE
Pour supprimer des enregistrements d'une table,
on utilise la commande DELETE.
La syntaxe est la suivante :
DELETE
FROM nom_table
WHERE condition;
Remarque:
On ne peut pas supprimer seulement le contenu de
quelques champs des enregistrements.
22
11
06/03/2018
DELETE
Remarque:
La commande DELETE supprime des
enregistrements entiers, c'est pour cela qu'il n'est
pas nécessaire d'indiquer ici des noms de champs.
23
DELETE (Exemple)
pour vider la table « Etudiant »:
DELETE
FROM etudiant;
24
12
06/03/2018
SELECT
Syntaxe de la commande SELECT
SELECT
SELECT indique la liste des attributs
constituant le résultat.
FROM indique la (ou les) tables dans
lesquelles on trouve les
attributs(informations) utiles à la requête.
WHERE indique les conditions que doivent
satisfaire les n-uplets (enregistrements) de la
base pour faire partie du résultat.
26
13
06/03/2018
SELECT
La liste des noms de colonnes: indique la
liste des colonnes choisies, séparées par des
virgules.
Lorsque l'on désire sélectionner l'ensemble
des colonnes d'une table il n'est pas
nécessaire de saisir la liste de ses colonnes,
l'option * permet de réaliser cette tâche.
27
SELECT
La liste des tables indique l'ensemble des
tables (séparées par des virgules) sur
lesquelles on opère
La condition logique permet d'exprimer des
qualifications complexes à l'aide d'opérateurs
logiques et de comparateurs arithmétiques
28
14
06/03/2018
Exemple
Pour sélectionner juste les noms et les prénoms
des étudiants, la syntaxe est la suivante:
29
SELECT
On peut utiliser les opérateurs suivants dans les
conditions c’est-à-dire dans la clause WHERE:
Opérateur Signification
= Egal
<> Différent
(parfois noté aussi != )
< Inférieur
> Supérieur
<= Inférieur ou égal
>= Supérieur ou égal
30
15
06/03/2018
Exemple
Pour sélectionner les enregistrements de la
table « etudiant » dont l'âge est supérieur ou
égale à 20 ans:
31
SELECT
Opérateurs logiques
Il est possible de combiner plusieurs conditions
avec des opérateurs logiques :
L'opérateur AND réunit deux ou plusieurs
conditions et sélectionne un enregistrement
seulement si cet enregistrement satisfait
TOUTES les conditions listées
Toutes les conditions séparées par AND sont
vraies.
32
16
06/03/2018
Exemple (AND)
Pour sélectionner les étudiants qui ont
l’âge 20 ans ,et habitent à « Meknès » la
syntaxe est la suivante:
33
SELECT
L'opérateur OR réunit deux conditions mais
sélectionne un enregistrement si une des
conditions listées est satisfaite.
Par exemple, pour sélectionner tous les
étudiants nommés ‘Amrani' ou ‘Salhi' :
34
17
06/03/2018
SELECT
L'option DISTINCT permet de ne conserver
que des lignes distinctes, en éliminant les
doublons
SELECT DISTINCT age, ville FROM etudiant;
Clauses IN et NOT IN
Pour sélectionner des enregistrements dont la
valeur d'un champ peut être comprise dans
une liste on utilise la clause IN
36
18
06/03/2018
Exemple
SELECT *
FROM etudiant
WHERE age IN (18, 20,22,24);
SELECT *
FROM etudiant
WHERE age NOT IN (16,17,18);
37
Clause BETWEEN
Pour sélectionner des enregistrements dont
la valeur d'un champ peut être comprise
entre deux valeurs, on utilise la clause
BETWEEN.
SELECT *
FROM etudiant
WHERE age BETWEEN 18 AND 24;
38
19
06/03/2018
La clause LIKE
La clause LIKE permet de faire des recherches sur
le contenu d'un champ.
Par exemple: pour sélectionner les étudiants dont
le nom commence par la lettre D :
SELECT *
FROM etudiant
WHERE nom LIKE ‘D%';
Remarque:
% remplace un ensemble de caractères
40
20
06/03/2018
Exemple
Pour retourner le prix le plus petit de la table
Produit, le prix le plus élevé et le prix moyen.
SELECT
MIN(prix_unitaire),MAX(prix_unitaire),
AVG(prix_unitaire) FROM Produits;
21
06/03/2018
SELECT
Il existe d'autres options pour la commande
SELECT :
GROUP BY
HAVING
ORDER BY
43
GROUP BY
Une des utilisations les plus courantes de la
clause GROUP BY est son association avec
une fonction d'ensemble (le plus souvent
COUNT, pour compter le nombre
d'enregistrements dans chaque groupe).
44
22
06/03/2018
Exemple
Si on veut afficher pour chaque étudiant le
nombre d’emprunts qu'il a effectué:
SELECT num_etudiant,COUNT(*)
FROM emprunt
GROUP BY num_etudiant;
45
HAVING
La clause HAVING est utilisé avec la clause
GROUP BY, elle permet d'appliquer une
restriction sur les groupes créés grâce à la
clause GROUP BY.
SELECT ville,COUNT(*)
FROM etudiant
GROUP BY ville HAVING ville IN("fes","meknes" );
46
23
06/03/2018
ORDER BY
La clause ORDER BY suivie des mots clés
ASC ou DESC, permet de Trier les résultats
d’une requête en ordre croissant ou bien
décroissant
Le classement se fait sur des nombres ou
des chaînes de caractères.
47
Exemple
48
24
06/03/2018
Jointure
La jointure permet de sélectionner des
informations dans plusieurs tables grâce aux
relations existant entre ces tables.
Par exemple :
Pour récupérer le nom et le prénom du client
ayant passé la commande n°1 :
SELECT nom, prénom
FROM Clients, Commande
WHERE Commande.num_client = Client.num_client
AND num_commande = 1;
49
Explication:
La clause WHERE indique que le numéro de
commande doit être égal à 1 et que la jointure va se
faire sur le numéro de client
une fois que SQL va trouver la commande n° 1 dans
la table commande, il va prendre le numéro de client
contenu dans l'enregistrement et avec ce numéro, il
va chercher dans la table Clients le nom et le
prénom.
50
25
06/03/2018
Jointure
Remarque:
lorsqu'on utilise plusieurs tables, il faut faire
attention que deux tables n'aient pas de champs
ayant le même nom, si c'est le cas, et pour les
différencier, on utilise, comme dans l'exemple, la
notation: table.nom_du_champ.
ou
SELECT * FROM table1 LEFT OUTER JOIN table2
ON [Link] = table2.fk_id
26
06/03/2018
ou
SELECT * FROM table1 RIGHTOUTER JOIN table2
ON [Link] = table2.fk_id
27
06/03/2018
55
56
28
06/03/2018
57
ALL/ANY
Les opérateurs ANY et ALL permettent de
comparer des ensembles de valeurs de
manière globale.
ALL demande une comparaison à toutes les
valeurs pour que le prédicat soit vrai
ANY est vrai si, au moins une valeur de
l'ensemble répond vrai à la comparaison.
Le critère de comparaison devant être, de
préférence, une inégalité (>, >=, <, <=, <>).
58
29
06/03/2018
ALL
Exemple: trouver le nom et le prénom du
dernier employé embauché?
Select nom,prénom from employé where
date_embauche >= all(select date_embauche
from employé)
EXISTS
Le prédicat EXISTS permet de tester
l'existence ou l'absence de données dans
la sous-requête.
Le prédicat EXISTS peut être combinés
avec l'opérateur de négation NOT.
60
30
06/03/2018
Exemple
Nom et prénom des clients ayant
commandé au moins une fois.
SELECT nom, prenom FROM client clt WHERE
EXISTS (SELECT * FROM commande cmd
WHERE clt.num_clt = cmd.num_clt) ;
ou
SELECT nom, prenom FROM client clt
WHERE
num_clt IN (SELECT num_clt FROM commande cmd ) ;
Exemple( EXISTS)
Nom et prénom des clients qui n'ont pas
encore commandé?
SELECT nom, prenom FROM client clt WHERE
NOT EXISTS (SELECT * FROM commande cmd
WHERE clt.num_clt = cmd.num_clt) ;
OU
SELECT nom, prenom FROM client clt
WHERE
num_clt NOT IN (SELECT num_clt FROM commande cmd ) ;
31
06/03/2018
Fonctions de dates
Fonction Signification
YEAR() permet d’extraire une année à partir d’une
date au format AAAA-MM-JJ.
MONTH() permet d’extraire le numéro de mois à
partir d’une date au format AAAA-MM-JJ
NOW() permet de retourner la date et l’heure du
système.
DATEDIFF() prend deux dates en paramètres et
retourne le nombre de jours entre les deux
dates
32