Introduction au Langage SQL
Introduction au Langage SQL
1
CHAPITRE
Structured Query Language Langage permettant de définir, manipuler et contrôler les données
d’une BD relationnelle
SQL
C’est un langage complet:
3 4
1
LDD: commande CREATE SCHEMA LDD: commande CREATE TABLE
Le Schéma permet de regrouper des tables et d’autres constructions Commande qui permet de créer une table
appartenant à la même application de BD.
◦ terminologie SQL: relation table, attribut colonne
Exemple:
CREATE SCHEMA ENTREPRISE AUTHORIZATION 3SADMIN ;
5 6
On peut déclarer des formats de nombres avec DECIMAL(i,j) ou Si l’on se sert d’un type de chaîne à longueur fixe pour enregistrer une chaîne plus
NUMERIC(i,j) où i, la précision, est le nombre de chiffres décimaux et courte, celle-ci est complétée par des caractères vierges sur la droite.
7 8
2
LDD: commande CREATE TABLE LDD: commande CREATE TABLE
Types de Données et Domaines des attributs en SQL Types de Données et Domaines des attributs en
SQL
Booléen: a les valeurs TRUE ou FALSE (respectivement « vrai » ou
« faux »)
Types binaires: ils permettent de stocker des données de type
binaire telles que des images
BYTE type binaire de longueur fixe (1 à 1000 octets)
Date et Heure: BYTE VARYING type binaire de longueur variable (1 à 1000 octets)
Le type DATE compte 10 positions et ses composants sont ANNÉE, BYTE LONG type binaire de longueur variable (1 à 2 Go)
MOIS et JOUR sous la forme AAAA-MM-JJ.
9 10
ou on peut déclarer un nom de domaine et se servir de ce nom avec Cette contrainte est toujours spécifiée implicitement pour des
la spécification des attributs. Cela facilite la modification du type de attributs qui font partie de la clé primaire d’une relation.
données d’un domaine utilisé par de nombreux attributs dans un
schéma. Elle peut être spécifiée pour tout attribut (hors clé) dont il est
obligatoire que les valeurs ne soient pas NULL.
CREATE DOMAIN NOM_TYPE AS VARCHAR(10)
11 12
3
LDD: commande CREATE TABLE LDD: commande CREATE TABLE
Spécification des contraintes de base en SQL Spécification des contraintes de base en SQL
Spécifications des contraintes sur les attributs et de leur valeur Spécifications des contraintes sur les attributs et de leur valeur
par défaut par défaut
13 14
L’intégrité référentielle est spécifiée avec la clause FOREIGN KEY. PRIMARY KEY (N°SS),
FOREIGN KEY (N°SS_SUP) REFERENCES EMPLOYÉ(N°SS),
FOREIGN KEY (N°Service) REFERENCES SERVICE (N°Service));
15 16
4
LDD: commande CREATE TABLE LDD: commande CREATE TABLE
CREATE TABLE SERVICE CREATE TABLE PROJET
(N°Service INT NOT NULL, (N°Proj INT NOT NULL,
NomServ VARCHAR(15) NOT NULL, NomProj VARCHAR(15) NOT NULL,
N°SS_Dir CHAR(8) NOT NULL, Emplacement VARCHAR(13)
N°Service INT NOT NULL,
PRIMARY KEY (N°Service),
PRIMARY KEY (N°Proj),
FOREIGN KEY (N°SS_Dir) REFERENCES EMPLOYÉ(N°SS) ; )
FOREIGN KEY (N°Service) REFERENCES SERVICE (N°Service) ; )
17 18
19 20
5
LDD: commande DROP [TABLE|SCHEMA] LDD: commande DROP [TABLE|SCHEMA]
Le comportement de cette commande peut être précisé à l’aide de 2 DROP TABLE permet de supprimer une relation devenant inutile à
options: CASCADE et RESTRICT. l’intérieur d’un schéma
Supprimer le schéma de la BD ENTREPRISE avec toutes ses tables, DROP TABLE AYANTDROIT [RESTRICT|CASCADE];
domaines et autres éléments. Avec l’option RESTRICT: la table n’est détruite que si elle n’est pas
référencée par une contrainte (des définitions des clés étrangères dans
une autre relation) ou une vue.
6
LDD: commande RENAME TABLE LMD: commande INSERT
La commande RENAME TABLE permet de renommer une table: Elle permet d’ajouter un tuple à une relation
INSERT INTO <nom table> [nom de colonne, …]
RENAME TABLE Ancien_Nom TO Nouveau_Nom; VALUES (valeur, …)
|<Instruction SELECT>)
Exemple 1:
25 26
27 28
7
LMD: commande DELETE LMD: commande DELETE
Elle permet de supprimer des tuples d’une relation Exemple 3:
Exemple 1: DELETE FROM EMPLOYÉ
WHERE N°Service IN (SELECT N°Service
DELETE FROM EMPLOYÉ
FROM SERVICE
WHERE Nom=“Ben Saleh”; WHERE NomService=“Recherche”);
Supprimer tous les employés qui portent le nom “Ben saleh”
Supprimer tous les employés travaillant pour le service “Recherche”
Exemple 2: Exemple 4:
DELETE FROM EMPLOYÉ
DELETE FROM EMPLOYÉ;
WHERE N°SS=1325467685; Supprimer tous les employés de la table EMPLOYÉ
Supprimer l’employé ayant le N°SS 1325467685
29 30
8
LMD: commande SELECT
33 34
Ou
ATTENTION : l’opérateur relationnel n’est qu’une recopie
WHERE (Salaire>1450 AND Sexe= ‘ M’) OR (Salaire>1450 AND Sexe= ‘F’) d’informations : il n’y a pas de destruction physique (sur le disque)
des informations contenues dans la relation initiale.
35 36
9
Expression de la Sélection Opérateurs de Comparaison
{=, !=, <, <=, >, >=}. L'opérateur différent peut aussi s'écrire
« Donner tous les renseignements concernant les
<>
employés dont le nom est Tounsi. »
IS [NOT] NULL : Teste si le contenu d'une colonne est une valeur
SELECT * nulle ou pas
FROM EMPLOYÉ
WHERE Nom= ‘Tounsi’;
[NOT] IN (liste de valeur) : Teste si le contenu coïncide avec le
contenu de la liste qui suit entre parenthèses ou pas
Taper * ou citer l’ensemble des colonnes de la table EMPLOYÉ
_ substitue 1 seul caractère ALL : la comparaison est vraie si elle est vraie pour chacune des
valeurs renvoyées par la sous-requête
ANY : la comparaison est vraie si elle est vraie pour au moins une
des valeurs renvoyées par la sous-requête.
10
Opérateurs de Comparaison: Exemples Opérateurs de Comparaison: Exemples
« Donner les noms des employés dont on ne connaît pas « Lister Les employés dont la date de Naissance est
l’adresse». entre 06-07-78 et 06-07-68 ».
SELECT Nom SELECT *
FROM EMPLOYÉ FROM EMPLOYÉ
WHERE Adresse IS NULL; WHERE Date_Naissance BETWEEN ‘06-07-78’ AND ‘06-07-68’;
« Lister toutes les informations sur les employés habitant à Lister les Noms et les Adresses des employés dont le nom
Tunis, Gafsa ou Jendouba » commence par un D
SELECT * SELECT Nom, Adresse
FROM EMPLOYÉ FROM EMPLOYÉ
WHERE Adresse IN (‘Tunis', ‘Gafsa', ‘Jendouba'); WHERE Nom LIKE ‘D%‘;
41 42
SELECT *
SELECT Nom
FROM R1, R2;
FROM EMPLOYÉ
WHERE Adresse = ‘ Bizerte’;
43 44
11
Expression de la jointure naturelle et de la
théta-jointure Jointure et sélection simultanée
« Donner le nom des employés travaillant pour le service ‘Marketing’ »
SELECT Nom
« Donner les noms des employés responsables d’un service » FROM EMPLOYÉ, SERVICE
WHERE EMPLOYÉ.N°Service = SERVICE.N°Service
AND NomServ= ‘Marketing’;
SELECT Nom
AUTRE FORMULATION
FROM EMPLOYÉ, SERVICE
SELECT Nom
WHERE EMPLOYÉ.N°SS = SERVICE.N°SS_Dir ; FROM EMPLOYÉ
WHERE N°Service IN (SELECT N°Service
FROM SERVICE
WHERE NomServ=‘Marketing’);
45 46
12
Autojointure Suppression des tuples identiques
« Donner les noms des employés ouvriers qui gagnent « Donner la liste des grades au sein de l’entreprise»
plus qu’un cadre. »
49 50
UNION
SELECT DISTINCT N°Proj
FROM EMPLOYÉ, SERVICE, PROJET
WHERE SERVICE.N°Service =PROJET.N°Service
AND EMPLOYÉ.N°SS = SERVICE.N°SS_Dir
AND Nom =« Tounsi »;
51 52
13
Tri de Résultat Fonctions d’agrégat
ORDER BY permet de présenter les résultats triés par ordre ascendant
(ASC) [par défaut] ou descendant (DESC).
◦ AVG : détermine la moyenne
« Donner le nom des cadres par ordre alphabétique et ordre ◦ SUM : calcule la somme
décroissant de grade ».
◦ MIN : renvoie le minimum des valeurs
◦ MAX : renvoie le maximum
SELECT Nom
◦ COUNT(*) : nombre de lignes
FROM EMPLOYÉ
WHERE Grade = «Cadre»
ORDER BY Nom ASC, Grade DESC;
53 54
14
Classification du Résultat Classification du Résultat: Exemples
57 58
15
Sous-requête indépendante, renvoyant une
Création d’Alias pour l’affichage seule ligne
« Donner la liste des employés (nom, adresse) ayant le
même salaire que l’employé de N°SS : 1435768998»
SELECT NomServ As Nom Service
FROM SERVICE;
SELECT Nom, Adresse
FROM EMPLOYÉ
WHERE Salaire = (SELECT Salaire
FROM EMPLOYÉ
WHERE N°SS=1435768998);
61 62
« Donner les N°SS des employés dont le salaire dépasse le « Donner les noms des responsables des services dont le salaire
salaire de tous les employés appartenant au service 4» est supérieur à celui des employés de même grade »
63 64
16
L’opérateur EXISTS
Résultat de la sous-requête assimilé à une valeur logique
65 66
67 68
17