Vous êtes sur la page 1sur 27

Le Langage SQL

A. LOTFI
Historique

 Dr E. F. Codd a publié l'article "A Relational Model of Data for Large Shared
Data Banks" en juin 1970 dans la revue de l'Association of Computer Machinery
(ACM), Communications of the ACM.
 Le modèle de Codd est maintenant accepté comme modèle définitif pour les
systèmes de gestion de bases de données relationnelles (RDBMS).
 Le langage, Structured English Query Language (SEQUEL) a été développé par
IBM Corporation, Inc., pour utiliser le modèle de Codd. SEQUEL est devenu
plus tard SQL (toujours prononcé "suite").
 En 1979, Relational Software, Inc. (maintenant Oracle) a introduit la première
implémentation de SQL disponible dans le commerce. Aujourd'hui, SQL est
accepté comme langage RDBMS standard.
Système de Gestion de BDD

Il permet de :
➢ Décrire les données : indépendamment des applications (de manière
intrinsèque)
➢ Manipuler les données : interroger et mettre à jour les données sans
préciser d'algorithme d'accès en adoptant un style déclaratif (dire QUOI
sans dire COMMENT)
➢ Contrôler les données : spécifier l es droits d’accès aux données
(confidentialité) et gérer les transactions
Types de données

 3 grandes familles de types de données :


➢ Numeric : TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT, FLOAT, DOUBLE(M,D),
DECIMAL(M,D)
➢ Date and Time: DATE, DATETIME, TIMESTAMP, TIME, YEAR
➢ String : CHAR(M), VARCHAR(M), BLOB/TEXT, TINYBLOB, MEDIUMBLOB,
LONGBLOB, ENUM
Contraintes d’intégrité

 NOT NULL : valeur null impossible


 UNIQUE : unicité d'un attribut
 PRIMARY KEY : clé primaire
 FOREIGN KEY : clé étrangère
 CHECK : plage ou liste de valeurs

Toute opération de mise à jour violant une des contraintes spécifiées sera
rejetée.
Contraintes d’intégrité

SQL2 permet de spécifier les actions à entreprendre pour le maintien de


l'intégrité référentielle, lors d'une suppression ou d'une modification d'un tuple
référencé. Les actions possibles sont :
 CASCADE : cascader les suppressions ou modifications
 SET NULL : rendre nul les attributs référençant
 RESTRICT : rejet de la mise à jour c’est l’option par défaut
Langage de définition des données
(DDL)
L’instruction CREATE
 CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name (create_definition,...)
Exemple :
CREATE TABLE produit(id INT AUTO_INCREMENT PRIMARY KEY,
ref CHAR(8),
designation VARCHAR(30) NOT NULL UNIQUE,
id_famille INT NOT NULL,
prix DECIMAL(12,2),
qte SMALLINT DEFAULT 0,
CHECK (qte BETWEEN 0 AND 100) ,
FOREIGN KEY (id_famille) REFERENCES famille(id) ON UPDATE CASCADE
ON DELETE RESTRICT,
CONSTRAINT min_price CHECK (prix > 100)
)
Langage de définition des données
(DDL)
L’instruction CREATE INDEX
 CREATE [UNIQUE] INDEX index_name ON table_name(colonne [ASC|DESC], ...)
Exemple :
CREATE INDEX nom_prenom_index ON personne (nom, prenom);
❑ Les index permettent d'accélérer les recherches

❑ Le système détermine sa stratégie d'accès en fonction des index existants

❑ Les index sont automatiquement mis à jour

❑ Il est indispensable de créer les index appropriés pour accélérer le traitement des
requêtes

❑ Il ne faut cependant pas créer des index sur n'importe quel colonne ou groupe de
colonnes, car les mises à jour seraient ralenties inutilement par la maintenance de ces
index
Langage de définition des données
(DDL)
L’instruction ALTER : modifier la structure de la table
ALTER TABLE tbl_name
[alter_option [, alter_option] ...]
Exemple :
 ALTER TABLE produit
ADD COLUMN id_fournisseur INT DEFAULT NULL AFTER designation,
DROP COLUMN ref,
DROP PRIMARY KEY,
CHANGE prix TO prix_vente,
MODIFY designation VARCHAR(255) NOT NULL,
DROP CONSTRAINT min_price
Langage de définition des données
(DDL)
L’instruction DROP : suppression d’un objet du schéma de BDD
DROP TABLE tbl_name
L’instruction TRUNCATE TABLE : initialiser la table. Plus rapide que le DELETE.
Langage de manipulation des données
(DML)
L’instruction INSERT : peupler la table
INSERT INTO tbl_name (liste des colonnes) VALUES (liste des valeurs)
Exemple :
 INSERT INTO produit (id_famille,ref,designation,prix)
VALUES (1,'SAMS12NR','Samsung S12 NOIR',98000)
 INSERT INTO client (prenom, nom, ville, age)
VALUES
('Rahmani', ‘Amine', ‘Oran', 24),
(‘Ben Zahra', ‘Kamilia', ‘Mostganem', 36),
(‘Ben Salem', ‘Sara', ‘Alger', 27)
 INSERT INTO personne (id, nom) VALUES (DEFAULT, ‘Souleiman')
 INSERT INTO personne (nom, prenom)
SELECT nom, prenom FROM client
➢ INSERT INTO copy_vehicule
SELECT * FROM vehicule WHERE id > 10;
Langage de manipulation des données
(DML)
L’instruction UPDATE : modifier un enregistrement (tuple)
UPDATE tbl_name SET col1=value1 [, col2=value2, …]
[WHERE condition]
Exemple :
 UPDATE produit SET prix = prix * 1.2
WHERE prix > 10000
Langage de manipulation des données
(DML)
L’instruction DELETE : supprimer un enregistrement (tuple)
DELETE FROM tbl_name
[WHERE condition]
Exemple :
 DELETE FROM produit
WHERE id = 100;
 DELETE FROM ligne_facture
WHERE id_facture = 8
ORDER BY date_heure LIMIT 1;
Langage de manipulation des données
(DML)
L’instruction SELECT : projection/sélection de données
SELECT [*|liste_des_colonnes]
FROM tbl_name
[WHERE condition]
[GROUP BY liste_de_colonnes]
[HAVING condition]
[ORDER BY liste_de_colonnes]
[LIMIT {[décalage,] nb_lignes| nb_lignes OFFSET décalage}]
Exemple :
 SELECT * FROM produit
WHERE id > 100;
 SELECT lf.* FROM ligne_facture AS lf
WHERE id_facture = 8
ORDER BY date_heure LIMIT 10,10;
GROUP BY/HAVING
 La clause GROUP BY permet de partitionner une table en plusieurs groupes
 Toutes les lignes d'un même groupe ont la même valeur pour la liste des
attributs de partitionnement spécifiés après GROUP BY
 Les fonctions de calcul (aggrégation) opèrent sur chaque groupe de valeurs
❖ COUNT nombre de valeurs
❖ SUM somme des valeurs
❖ AVG moyenne des valeurs
❖ MAX plus grande valeur
❖ MIN plus petite valeur
 La clause HAVING permet de spécifier une condition de restriction sur des
groupes. Elle sert à éliminer certains groupes, comme WHERE sert à éliminer
des lignes
UNION, INTERSECT et EXCEPT

 La commande UNION permet de mettre bout-à-bout (concaténer) les résultats


de plusieurs requêtes utilisant la requête SELECT.
 Chacune des requêtes à concaténer doit retourner le même nombre de
colonnes, avec les mêmes types et dans le même ordre.
 par défaut, les enregistrements identiques ne seront pas.
 La commande UNION ALL permet d’avoir ce comportement.
 La commande INTERSECT permet de récupérer les enregistrements communs
entre deux requêtes.
 Les deux résultats doivent avoir aussi le même schéma.
 La commande EXCEPT (MINUS) permet de récupérer les enregistrements de la
première instruction sans inclure les résultats de la seconde requête.
Les jointures
 Le processus de normalisation du modèle relationnel est basé sur la
décomposition et a pour conséquence d’augmenter le nombre de tables d’un
schéma.
 La majorité des requêtes utilisent des jointures nécessaires pour pouvoir
extraire des données de tables distinctes.
 Les jointures en SQL permettent d’associer plusieurs tables dans une même
requête.
 Une jointure met en relation deux tables sur la base d’une clause de jointure
(comparaison de colonnes).
 Cela permet d’exploiter la puissance des bases de données relationnelles pour
obtenir des résultats qui combinent les données de plusieurs tables de
manière efficace.
 Généralement, cette comparaison fait intervenir une clé étrangère d’une
table avec une clé primaire d’une autre table (car le modèle relationnel est
fondamentalement basé sur les valeurs).
Les jointures
Jointure Relationnelle (SQL89)
 Caractérisée par une seule clause FROM contenant les tables et alias à
mettre en jointure deux à deux.
 La syntaxe est :
SELECT [alias1.]col1, [alias2.]col2…
FROM [nomBase.]nomTable1 [alias1],
[nomBase.]nomTable2 [alias2]…
WHERE (conditionsDeJointure);
Les jointures
Jointure SQL2
 Afin de se rendre conforme à la norme SQL2, MySQL propose aussi des
directives qui permettent de programmer d’une manière plus verbale les
différents types de jointures :

SELECT [ALL | DISTINCT | DISTINCTROW ] listeColonnes


FROM [nomBase.]nomTable1 [{ INNER | { LEFT | RIGHT } [OUTER] }]
JOIN [nomBase.]nomTable2{ ON condition | USING ( colonne1 [,
colonne2]... )}
| { CROSS JOIN | NATURAL [{ LEFT | RIGHT } [OUTER] ]
JOIN [nomBase.]nomTable2 } …
[WHERE condition ];
Les jointures

Types de jointures
 INNER JOIN : la jointure interne retourne les enregistrements
quand la condition est vrai dans les 2 tables.
 CROSS JOIN : la jointure croisée retourne le produit cartésien de 2
tables.
 LEFT [OUTER] JOIN :la jointure externe retourne tous les
enregistrements de la table de gauche même si la condition n’est
pas vérifié dans l’autre table.
 RIGHT [OUTER] JOIN : le jointure externe pour retourne tous les
enregistrements de la table de droite même si la condition n’est
pas vérifié dans l’autre table.
 FULL [OUTER] JOIN : la jointure externe pour retourne les résultats
quand la condition est vrai dans au moins une des 2 tables.
 SELF JOIN : jointure d’une table avec elle-même comme si c’était
une autre table.
 NATURAL JOIN : jointure naturelle entre 2 tables s’il y a au moins
une colonne qui porte le même nom entre les 2 tables SQL
Les Vues
 Outre le contrôle de l’accès aux données (privilèges), la confidentialité des
informations est un aspect important qu’un SGBD relationnel doit prendre en
compte.
 La confidentialité peut être renforcée par l’utilisation de vues (VIEWs) qui
agissent comme des fenêtres sur la base de données.
 Les vues correspondent à ce qu’on appelle « le niveau externe » qui reflète
la partie visible de la base de données pour chaque utilisateur.
 Seules les tables contiennent des données et, pourtant, pour l’utilisateur,
une vue apparaît comme une table.
 En théorie, les utilisateurs ne devraient accéder aux informations qu’en
questionnant des vues.
 Les vues masquent la structure des tables interrogées.
 En pratique, la plupart des applications se passent de ce concept en
manipulant directement les tables.
Les Vues
Les Vues
Création d’une vue
 Vous devez posséder le privilège CREATE VIEW et les privilèges en SELECT des
tables présentes dans la requête de définition de la vue.
 La syntaxe SQL de création d’une vue est la suivante :
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW [nomBase.]nomVue [(listecolonnes)]
AS requêteSELECT
[WITH [CASCADED | LOCAL] CHECK OPTION];

 Les mécanismes de transmission et de révocation de privilèges s’appliquent


également aux vues.
 Seules les données appartenant à la vue seront accessibles aux bénéficiaires.
 Les privilèges objet qu’il est possible d’attribuer sur une vue sont les mêmes que
ceux applicables sur les tables (SELECT, INSERT, UPDATE sur une ou plusieurs
colonnes, DELETE).
Les Vues
Modification d’une vue
 Vous devez au moins posséder les privilèges CREATE VIEW et DELETE au niveau
d’une vue pour pouvoir la modifier.
ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW [nomBase.]nomVue [(listecolonnes)]
AS requêteSELECT
[WITH [CASCADED | LOCAL] CHECK OPTION];
Visualiser une vue
SHOW CREATE VIEW [nomBase.]nomVue;
Supprimer une vue
DROP VIEW [IF EXISTS]
[nomBase.]nomVue [,nomBase2.]nomVue2...
[RESTRICT | CASCADE];
 La suppression d’une vue n’entraîne pas la destruction des données qui résident
toujours dans les tables.
Les Vues
Exemple
➢ On veut créer une vue sur la table ARTICLES qui ne contient que les champs
Description et Prix.
➢ On veut aussi que cette vue soit triée sur le Champs description.
➢ Le code SQL est :
CREATE VIEW V01 AS
SELECT Description 'Désignation', Prix 'PV'
From ARTICLES
ORDER BY Description;
Les Vues
Exemple
➢ On veut créer une vue qui contient la description des articles ainsi que la
famille de chaque article.
➢ On veut aussi que cette vue soit triée sur le champs famille.
➢ Le code SQL est :
CREATE VIEW V02 AS
SELECT Description 'Désignation', Intitule ‘Famille’
From ARTICLES a INNER JOIN FAMILLES f
ON a.FamilleID=f.ID
ORDER BY Intitule

Vous aimerez peut-être aussi