Chapitre1 Rappel Sur SQL
Chapitre1 Rappel Sur SQL
Chapitre1 Rappel Sur SQL
Université de Sousse
Séance de Cours
Chapitre1
Rappel sur SQL
2022-2023
I. Présentation de SQL (Structured Query Language)
SQL est un langage normalisé de gestion de bases de données relationnelles.
C'est à la fois :
Un Langage de contrôle de l'accès aux données (LCD): permet de gérer les privilèges,
(ordres GRANT, REVOKE).
……. 2
II. Le langage de définition des données (LDD)
Permet de définir et de manipuler les concepts du modèle relationnel liés au schéma :
relation, attribut, clé, contraintes d’intégrité, vues ainsi que certains éléments liés à
l’administration de la base de données : index, droits des utilisateurs.
1) Création d'une table :
Syntaxe :
CREATE TABLE <nom_de_relation> ( <nom_d’attribut> <type_de_données> [NOT NULL], [,
...]
[, PRIMARY KEY (<nom_d’attribut> [, ...] ) ]
[, FOREIGN KEY (<nom_d’attribut>) REFERENCES <nom_de_relation> [, ...] ]
[CHECK (<condition>)]);
3
II. Le langage de définition des données (LDD)
Exemple
CREATE TABLE article (
code VARCHAR(10) primary key,
nom VARCHAR(30) NOT NULL,
prix Number(9,2),
datemaj DATE DEFAULT CURRENT_DATE);
Remarque :
On peut donner une valeur par défaut pour une colonne si la colonne n'est pas
renseignée.
4
II. Le langage de définition des données (LDD)
2. Types de données
SMALLINT (sur 2 octets, de -32.768 à 32.767),
INTEGER (sur 4 octets, de -2.147.483.648 à 2.147.483.647).
NUMBER [(précision, échelle)] où précision est le nombre entier de chiffres
significatifs, de 1 à 38 (38 par défaut) et échelle est le nombre de chiffres à droite de la
marque décimale;
Exemple : NUMBER (8,2) : 8 chiffres significatifs dont deux après la virgule.
DECIMAL (p, d) correspond à des nombres décimaux qui ont p chiffres significatifs
et d chiffres après la virgule
REAL (simple précision, avec au moins 7 chiffres significatifs allant de 10-38 à 1038) ,
FLOAT (double précision, avec au moins 15 chiffres significatifs).
BIT permet de ranger une valeur booléenne (un bit) en SQL-2.
5
II. Le langage de définition des données (LDD)
2. Types de données
CHAR (longueur) : pour les colonnes qui contiennent des chaînes de longueur
constante. Par défaut, longueur est égale à 1.
VARCHAR[2] (longueur ) : pour les colonnes qui contiennent des chaînes de
longueurs
variables.
DATE : réserve 2 chiffres pour le mois et le jour et 4 pour l'année ;
TIME pour les heures, minutes et secondes
Remarque :
Une colonne qui n'est pas renseignée, et donc vide, est dite "content la valeur NULL".
Cette valeur n'est pas égale à zéro, c'est une absence de valeur.
6
II. Le langage de définition des données (LDD)
3) Contrainte d'intégrité
Dans la définition d'une table, on peut indiquer des contraintes d'intégrité portant sur
une ou plusieurs colonnes. Les contraintes possibles sont :
PRIMARY KEY, UNIQUE, FOREIGN KEY...REFERENCES, CHECK
Si la clé primaire est composé d'un seul attribut, on place la contrainte de clé
primaire devant l'attribut lors de la création de la table.
7
II. Le langage de définition des données (LDD)
3) Contrainte d'intégrité
a) Contrainte de clé primaire :
Si la clé est composé de plus qu'un attribut, on place cette contrainte vers la fin.
Exemple
create table livraison ( n_dep number (6) references depot(n_dep),
code_j number(4) references journal(code_j),
date_l date,
qte_l number(10),
primary key (code_j, n_dep, date_l));
b) Contrainte d'unicité
8
II. Le langage de définition des données (LDD)
3) Contrainte d'intégrité
c) Contrainte d’intégrité référentielle (clé étrangère)
9
II. Le langage de définition des données (LDD)
3) Contrainte d'intégrité
c) Contrainte d’intégrité référentielle (clé étrangère)
Syntaxe 2 : pour une contrainte sur une table :
FOREIGN KEY (colonne1, colonne2,...) REFERENCES tableref [(col1, col2,...)]
[ON DELETE CASCADE]
Exemple :
create table Ligne_entree( An_entr number (4),
num_entr number(4)
cod_art number(4) references ARTICLE,
date_fab date,
primary key (An_entr, num_entr, cod_art,)
FOREIGN KEY (An_entr, num_entr) REFERENCES Entree (An_entr, num_entr));
indique que la concaténation de An_entr et num_entr est une clé étrangère qui
fait référence à la concaténation des colonnes An_entr et num_entr de la table
Entree . 10
II. Le langage de définition des données (LDD)
3) Contrainte d'intégrité
c) Contrainte d’intégrité référentielle (clé étrangère)
ON DELETE CASCADE:
11
II. Le langage de définition des données (LDD)
3) Contrainte d'intégrité
d) Contrainte CHECK
Syntaxe : CHECK(condition )
impose que les colonnes de chaque ligne à insérer doivent vérifier la condition
indiquée
Exemple
create table depot (n_dep number(6) primary key,
nom_dep varchar2(20) not null,
adr varchar2(20) not null,
check(nom_dep = upper(nom_dep)),
check(adr = upper(adr)));
Les deux contraintes check imposent que les valeurs de adr et de nom_dep à insérer
dans la table depot soit en majuscule.
12
II. Le langage de définition des données (LDD)
4) Contraintes nommées
Une contrainte peut être nommée afin de pouvoir la gérer (supprimer, modifier, renomer).
Syntaxe : Constraint nom_contrainte contrainte
Exemple :
create table journal(code_j number(4),
titre varchar2(20),
prix number(2,3),
constraint pk_journal primary key(code));
5) Ajouter, supprimer ou renommer une contrainte
Après avoir créer une table, on peut modifier sa structure en y ajoutant, supprimant
ou renommant une contrainte. On doit dans ce cas en premier lieu, utiliser la
commande ALTER TABLE.
13
II. Le langage de définition des données (LDD)
5) Ajouter, supprimer ou renommer une contrainte
a) Ajout d'une contrainte
Syntaxe : ALTER TABLE nom_table
ADD CONSTRAINT nom_contrainte contrainte;
Exemple :
ALTER TABLE journal
ADD CONSTRAINT cktitre check (titre = upper(titre) and titre is not null)
ADD CONSTRAINT cktype check (type in ('INFO', 'SCIENCE', 'TELE', 'FEMININ') );
Exemple :
ALTER TABLE journal
DROP CONSTRAINT cktitre ;
14
II. Le langage de définition des données (LDD)
5) Suppressions d'une table
15
III. Langage de manipulation des Données
permet de modifier les informations contenues dans la base.
Il existe trois commandes SQL permettant d'effectuer les trois types de modification
des données :
16
III. Langage de manipulation des Données
1) Insertion
Syntaxe : INSERT INTO nom_table (col1,..., coln ) VALUES (val1,...,valn )
Exemples
Insert into journal values (110,'LE MONDE', 4.5, 'INFO', 'QUOTIDIEN', 'PARIS')
Insert into journal (code_j, titre , prix , type, periode, adresse)values (110,'LE
MONDE', 4.5, 'INFO', 'QUOTIDIEN', 'PARIS‘)
2) Modification
Syntaxe : UPDATE table
SET col1 = exp1, col2 = exp2, ...
WHERE prédicat
Exemples
UPDATE journal
SET prix= 5
WHERE prix = 4.5; 17
III. Langage de manipulation des Données
3) Suppression
La clause WHERE indique quelles lignes doivent être supprimées. Cette clause
est facultative ; si elle n'est pas précisée, toutes les lignes de la table sont
supprimées.
Exemple :
DELETE FROM journal
WHERE type = 'INFO ‘;
18
IV. Langage d’interrogation des Données
1. L’Ordre Select
Possède six clauses différentes, dont seules les deux premières sont obligatoires.
19
IV. Langage d’interrogation des Données
1. L’Ordre Select
a) L'opérateur * (étoile)
Exemple
Soit la table journal :
code_j titre prix type periode adr_j
110 LE MONDE 4.5 INFO QUOTIDIEN PARIS
111 LIBERATION 4.5 INFO QUOTIDIEN PARIS
112 LA RECHERCHE 32 SCIENCE MENSUEL PARIS
113 TELERAMA 15 TELE HEBDO MONTROUGE
Pour afficher le contenu de toutes les colonnes on doit taper la requête suivante :
Pour afficher seulement les types : Pour afficher le titre et le prix de chaque journal :
22
1. L’Ordre Select
d) L'opérateur AS:
Permet de donner un nom à de nouvelles colonnes créées par la requête.
Exemple :
Select distinct type Select distinct type as "LES TYPES"
From journal; from journal;
type
LES TYPES
----------
----------
INFO
INFO
SCIENCE
SCIENCE
TELE
TELE
23
IV. Langage d’interrogation des Données
2. La Clause FROM
Donne la liste des tables participant à l'interrogation.
Il est possible de lancer des interrogations utilisant plusieurs tables à la fois
FROM table1 [synonyme1 ] , table2 [synonyme2 ] , ...
synonyme1, synonyme2,... sont des synonymes attribués facultativement
aux tables.
Utilisé pour lever certaines ambiguïtés, quand la même table est utilisée
de plusieurs façons différentes dans une même interrogation.
Si un synonyme est attribué à une table dans une requête, elle n'est plus
reconnue sous son nom d'origine dans cette requête. 24
IV. Langage d’interrogation des Données
3. La Clause WHERE
Permet de spécifier quelles sont les lignes à sélectionner dans une table ou dans le
produit cartésien de plusieurs tables.
Elle est suivie d'un prédicat qui sera évalué pour chaque ligne.
Les lignes pour lesquelles le prédicat est vrai seront sélectionnées.
R1 : Liste des journaux (toutes les colonnes) dont le code est supérieur à 111
Select *
From journal
Where code_j > 111;
R2 : Titres et prix des journaux dont le prix est dans l’intervalle [15, 20]
26
IV. Langage d’interrogation des Données
3. La Clause WHERE
LIKE : teste l'égalité de deux chaînes en tenant compte des caractères jokers
dans la 2ème chaîne :
'-' remplace exactement 1 caractère
'%' remplace une chaîne de caractères de longueur quelconque
R3 : Titres des journaux dont le titre commence par ‘T ’ et contient ‘M’
Select titre
From journal
Where upper(titre) like 'T%M%';
R4 : Titres des journaux dont la deuxième lettre est ‘E ’ et se termine par ‘A’
Select titre
From journal
Where upper(titre) like '-E%A'; 27
IV. Langage d’interrogation des Données
3. La Clause WHERE
IS NULL permet de tester la valeur NULL
exp IS [NOT] NULL : est vrai si l'expression a la valeur NULL (ou l'inverse
avec NOT).
Exemple :
R5 : Liste des journaux ayant un type (type n’est pas NULL).
Select *
From journal
Where type IS NOT NULL
Select *
From journal
Where type IS NULL
28
IV. Langage d’interrogation des Données
4. La Clause ORDER BY
Permet de définir un tri des colonnes de la réponse
ORDER BY colonne1 [ASC ou DESC ] [, colonne2 [ASC ou DESC ] ..].
Le tri se fait d'abord selon la première expression, puis les lignes ayant la même
valeur pour la première expression sont triées selon la deuxième expression, etc.
Exemple :
R7 : Afficher la liste des journaux dont l’adresse n’est pas ‘PARIS’ trié par ordre
décroissant des types :
Select * From journal
Where upper (adr_j) Not like 'PARIS'
ORDER BY type DESC;
R8 : Liste des journaux trié par ordre croissant des prix
Select *
From journal
ORDER BY prix ASC; 29
IV. Langage d’interrogation des Données
5. Opérateurs logiques
AND et OR peuvent être utilisés pour combiner plusieurs prédicats.
30
IV. Langage d’interrogation des Données
6. Clause GROUP BY
Groupe en une seule ligne toutes les lignes qui ont la même valeur de exp1
31
IV. Langage d’interrogation des Données
6. Clause GROUP BY
Fonctions de groupes
S'utilisent avec la clause GROUP BY
AVG : moyenne
SUM : somme
MIN : plus petite des valeurs
MAX : plus grande des valeurs
VARIANCE : variance
STDDEV : écart type (déviation standard)
COUNT(*) : nombre de lignes retournées par le select
COUNT(col ) : nombre de valeurs non nulles de la colonne retournées par le select
32
IV. Langage d’interrogation des Données
6. Clause GROUP BY
Exemple
R10 : Donner le nombre de journaux par type de journal,
R11: Donner pour chaque ville le nombre de journaux et leur prix moyen,
33
IV. Langage d’interrogation des Données
6. Clause GROUP BY
Tous les attribut qui se trouvent dans un ordre select (sauf Fonctions de groupes)
doivent figurer dans la clause group by.
Exemple
Select code_j, adr_j
From journal
Where lower(titre) like ('%r%')
Group by adr_j
34
IV. Langage d’interrogation des Données
6. Clause GROUP BY
Clause HAVING
HAVING prédicat : sert à préciser quels groupes doivent être sélectionnés
Elle se place après la clause GROUP BY.
Le prédicat suit la même syntaxe que celui de la clause WHERE.
Cependant, il ne peut porter que sur des caractéristiques de groupe :
fonction de groupe ou expression figurant dans la clause GROUP BY.
Exemple
Select count(*), adr_j
From journal
Where lower(titre) like ('%r%')
Group by adr_j
Having count (*)>1
Les valeurs NULL sont ignorées par les fonctions de groupe. 35
IV. Langage d’interrogation des Données
6. Clause GROUP BY
Exemple
36
IV. Langage d’interrogation des Données
7. Expressions et fonctions
Une expression est la combinaison de variables (contenu de colonnes), des
constantes et des fonctions au moyen d’opérateurs.
Les fonctions sont des procédures définies prenant une valeur dépendant de leurs
arguments
Les expressions peuvent figurer :
En tant qu’attributs résultats d’un ordre select ;
Dans la clause where ;
Dans une clause order by ;
Dans une clause having.
37
IV. Langage d’interrogation des Données
7. Expressions et fonctions
a) Opérateur de concaténation ||
Sert à concaténer deux chaines de caractères
Exemple :
38
IV. Langage d’interrogation des Données
7. Expressions et fonctions
b) LENGTH(chaîne) :
Renvoie la longueur de la chaîne.
Exemple
1) Codes et titres des journaux dont la longueur de titre est supérieur à 10
40
IV. Langage d’interrogation des Données
7. Expressions et fonctions
c)TO_CHAR (nombre, format)
Exemple
SELECT prix, TO_CHAR(PRIX,'999.99'), TO_CHAR(PRIX,'999'),
TO_CHAR(PRIX,'000.99') ,TO_CHAR(PRIX,'90.00')
from journal;
PRIX TO_CHAR(PRIX,'999.99') TO_CHAR(PRIX,'999') TO_CHAR(PRIX,'000.99') TO_CHAR(PRIX,'90.00')
------ ------- ---- ------- ------
4,5 4.50 5 004.50 4.50
32 32.00 32 032.00 32.00
15 15.00 15 015.00 15.00
5,6 5.60 6 005.60 5.60
20 20.00 20 020.00 20.00
20,42 20.42 20 020.42 20.42
222,42 222.42 222 222.42 ######
,42 .42 0 000.42 0.42
,3 .30 0 000.30 0.30
41
IV. Langage d’interrogation des Données
7. Expressions et fonctions
c)TO_CHAR (nombre, format)
Pour les dates : TO_CHAR (date, format)
Convertie une valeur de type date en une chaine de caractère.
format indique le format sous lequel sera affichée date
C'est une combinaison de codes
YYYY : année DY : abréviation du nom du jour
YY : deux derniers chiffres de l'année D : numéro du jour dans la semaine
MM numéro du mois HH ou HH12 : heure (sur 12 heures)
DDD : numéro du jour dans l'année MONTH : nom du mois
DD : numéro du jour dans le mois MON : abréviation du nom du mois
Exemple
SELECT TO_CHAR(sysdate, 'DD/MM/YY HH24') from dual;
TO_CHAR(SYS)
-----------
42
12/02/08 17
IV. Langage d’interrogation des Données
7. Expressions et fonctions
d) Expression de type date
Deux opérations sont permises
Ajout d'une durée : date + nb
select DATE_L + 5 from LIVRAISON;
43
IV. Langage d’interrogation des Données
7. Expressions et fonctions
e) Fonction applicables aux dates
TO_DATE(chaîne, format)
MONTHS_BETWEEN(date1, date2)
Renvoi le nombre de mois entre deux dates
LAST_DAY(date)
Renvoie le n° du dernier jour d’un mois d’une date.
Il est possible de réaliser des comptages statistiques sur les colonnes et sur les groupes.
COUNT(* | [DISTINCT | ALL] expression)
Renvoie le nombre de lignes du résultat de la requête.
Si expression est présent, on ne compte que les lignes pour lesquelles cette
expression n'est pas NULL.
Exemples :
Donner le nombre de journaux
SELECT count(*) as "Nombre de journaux" FROM journal;
Donner le nombre de type de journaux
Donner le prix minimal, le prix maximale le prix moyen et la somme des prix des journaux
Elle permet de :
1) Numéroter les lignes
Exemple : donner les 2 premier journaux dont le prix est dans [6, 21]
select code_j, titre, prix, rownum
from journal
where prix between 6 and 21 and rownum <3;
48
IV. Langage d’interrogation des Données
8. Les pseudo-colonnes
Attention :
la requête suivante ne renvoie aucune ligne
select code_j, titre, prix, rownum
from journal
where prix between 6 and 21 and rownum >3;
On peut s'en sortir avec une sous-interrogation :
select code_j, titre, prix
from (select rownum RANG, code_j, titre, prix from journal
where prix between 6 and 21 )
where RANG > 3;
49
IV. Langage d’interrogation des Données
8. Les pseudo-colonnes
Attention :
La valeur ROWNUM est associée à chaque ligne avant la prise en compte d’une
éventuelle clause ORDER BY.
les deux requêtes suivantes donnent le même ordre:
select rownum, titre from journal order by code_j;
select rownum, titre from journal;
50
AUTRES FONCTIONS SQL
Les tableaux ci-dessous résument les fonction utilisable dans SQL
51
52
AUTRES FONCTIONS SQL
53
54
55
Merci pour votre
Attention