Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Langage SQL PDF

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 67

Bases de Données

Chapitre 5:
Langage SQL

Pr. Fatima-Zohra Hibbi


f.hibbi@emsi.ma

2022/2023
Plan

Chapitre 1:

1. Introduction aux Systèmes d’Information et Bases de Données.

2. Introduction aux Systèmes de Gestion de Base de Données (SGBD).

Chapitre 2: Le Modèle Entité/Association.

Chapitre 3: Le modèle relationnel.

• Chapitre 4: L’algèbre relationnelle.

Chapitre 5: SQL.

Cours: Bases de Données Chapitre 4: L‘algèbre Relationnel


Plan

Chapitre 5 : Langage SQL

LDD: Langage de définition des données

LMD: Langage de Manipulation des données

Cours: Bases de Données Chapitre 4: L‘algèbre Relationnel


SQL: LDD :Langage de
définition de donnée
SQL:LDD:

 Créer des tables;


 Décrire les différents types de données
utilisables pour les définitions de Colonne;
 Modifier la définition des tables;
 Supprimer, renommer et tronquer une table.
SQL:LDD

Conventions de Dénomination:
Un nom :
 Doit commencer par une lettre
 Peut comporter de 1 à 30 caractères
 Ne peut contenir que les caractères A à Z, a à z, 0 à 9, _, $, et #
 Ne doit pas porter le nom d’un autre objet appartenant au
même utilisateur
SQL:LDD: Création des tables
 Créer la table dept (département) :

SQL> CREATE TABLE dept_2

(deptno int, dname VARCHAR2(14),loc VARCHAR2(13));

Table created.

 Vérifier la création des tables :

SQL> DESC dept;


SQL:LDD: Création des tables

Les types de données:


Type de donnée Description
VARCHAR (size) Caractère de longueur variable
CHAR (size) Caractère de longueur fixe
INT, FLOAT, DOUBLE numérique
DATE Valeur de date et l’heure
SQL:LDD: Création des tables
 UTILISER L’ORDRE ALTER TABLE POUR:

 Ajouter une colonne;

 Modifier une colonne existante;

 Définir une valeur par défaut pour une nouvelle colonne.

ALTER TABLE table


ADD (column datatype [DEFAULT expr] [, column datatype]...);

SQL> ALTER TABLE dept 2


ADD (job VARCHAR(9)); Table altered.
Ajout de Colonnes:
SQL:LDD: Création des tables
 Modification de colonne

 Vous pouvez modifier le type de données, la taille et la valeur


par défaut d'une colonne.

ALTER TABLE table


MODIFY column datatype [DEFAULT expr] ;

ALTER TABLE dept


MODIFY COLUMN dname VARCHAR(15);
Table altered.
SQL:LDD: Création des tables
 Suppression de colonne

 Vous pouvez supprimer la colonne:

ALTER TABLE table


DROP dname;
SQL:LDD: Création des tables
 Modification du nom d’une table

 Pour modifier le nom d'une table, d'une vue, d'une séquence ou


d'un synonyme, utilisez l'ordre RENAME.

RENAME TABLE dept TO


Departement;
Table renamed.
SQL:LDD: Suppression des tables

SQL> DROP TABLE Departement;


Table dropped.
SQL:LDD: Vider une table
L'ordre TRUNCATE TABLE :
 Supprime toutes les lignes d'une table ;
 Libère l'espace de stockage utilisé par la table;

SQL> TRUNCATE TABLE


department;
Table truncated.
Exercice

Soit le schéma relationnel suivant:


 PILOTE (PLNUM, PLNOM, PLPRENOM, VILLE, SALAIRE) ;
1. Créer une base de données nommé EXO_1;
2. Utilisé la BD: EXO_1
3. Créer la structure de la table PILOTE;
4. Ajouter un nouvelle colonne s’appel « ADRESSE »;
5. Renommer la table PILOTE par le nom: « T_PILOTE ».
6. Supprimer la table.
SQL: LMD :Langage de
Manipulation des Données
SQL: LMD :
Définition

Le LMD est le langage de manipulation de données. Il permet de


modifier le CONTENU d'une table en:
- Ajoutant de nouvelles lignes INSERT INTO nom_table;
- Modifiant une ou plusieurs lignes UPDATE nom_table;
- Supprimant des lignes DELETE FROM nom_table ;
- Consultant des lignes SELECT.
SQL: LMD :
Insertion de ligne

Syntaxe:
INSERT INTO nom_table (nom_colonne_1,
nom_colonne_2, …)
VALUES(valeur_colonne_1, valeur_colonne_2, …)

Exemple:
INSERT INTO employe VALUES(12, 'Dupont',
'comptable', 1800, 2, NULL)
SQL: LMD :
Modification de ligne

Syntaxe:
UPDATE nom_table
SET nom_colonne = valeur
WHERE condition(s);

Exemple:
Augmentation de 10%:
UPDATE employe
SET sal = sal * 1.1
WHERE fontion = 'informaticien';
SQL: LMD :
Modification de ligne

Exemple: modifier la valeur d’une colonne pour toutes les


lignes
Augmenter tous les employés de 1%
UPDATE employe
SET sal = sal * 1.01;
SQL: LMD :
Suppression:

Syntaxe:
DELETE FROM nom_table
WHERE condition(s);

Exemple:
DELETE FROM employe
WHERE code_service = 3

DELETE FROM DOC


WHERE NomDoc IN ( select NomDOc from DOC WHERE
VilleDoc=NULL);
SQL: LMD :
Consultation d’une ligne

Syntaxe:
SELECT [DISTINCT] FROM
Nom_Table
[WHERE condition]

Exemple:
SELECT Nom FROM Personne;
Exercice
La base de données Hôtel contient 2 tables:
•Chambre (Num_Chambre, Prix, Nbr_Lit, Nbr_Pers) ;
•Client (Num_Client, Nom, Prenom, Adresse) ;
1.Créer les tables : Chambre et Client ;
2.Remplir les tables « Chambre » et « Client » ;
SQL: LDD :Approfondissement
I. Les contraintes d’intégrités:
Définition:

Une contrainte d'intégrité est une règle qui permet d'assurer


la validité (cohérence) des données stockées dans une base.

Les différentes contraintes que l'on peut


• non nullité (obligation) : NOT NULL;
définir sont :
• unicité : UNIQUE;
• clé primaire : PRIMARY KEY;
• intégrité référentielle (clé étrangère) : FOREIGN KEY.
• Conditions: CHECK
1. Non nullité (obligation) : NOT NULL

Cette contrainte permet de rendre obligatoire la


saisie d'une colonne:

• Exemple:

CREATE TABLE PERSONNE (NomPers Varchar(30) NOT


NULL, PrénomPers Varchar(30));
2. unicité : UNIQUE;

Cette contrainte permet de contrôler que chaque ligne a une valeur unique
pour la colonne (pas de doublons).

• Exemple:

Sur une seule colonne


CREATE TABLE PERSONNE
(Téléphone INT(10) UNIQUE);
Ou bien:
CREATE TABLE PERSONNE ( NomPers Varchar(30) NOT NULL,
PrénomPers Varchar(30), UNIQUE (NomPers));
3. clé primaire : PRIMARY KEY;

La contrainte de clé primaire permet d'indiquer que la ou les


colonnes sont uniques et ne peuvent pas avoir de valeur nulle. On peut dire
que :
• Exemple:
PRIMARY KEY = UNIQUE + NOT NULL

CREATE TABLE PERSONNE (NomPers Varchar2(30), PrenomPers Varchar2(30),


PRIMARY KEY (NomPers, PrenomPers));
4. intégrité référentielle (clé étrangère) : FOREIGN KEY

• L'intégrité référentielle permet de vérifier la cohérence des liens

entre tables, lors de l'ajout, de la suppression et de la modification de

lignes.

• Elle est utilisée lorsqu'on a une clé étrangère.

• Elle permet d'assurer que toute valeur de clé étrangère

correspond bien à une valeur de clé primaire de la table liée.


5. Contraint:

Une contrainte d'intégrité est une clause permettant de

contraindre la modification de tables, faite par l'intermédiaire de requêtes

d'utilisateurs, afin que les données saisies dans la base soient conformes

aux données attendues.

• Exemple -1-:
Alter table Employe
ADD CONSTRAINT Const_Fr
Foreign key id_Client REFERENCES Client (id_c);
Exemple-2-
Create Table DET(
NumORD integer,
NumLigne integer,
NumMED integer,
QTE integer Not Null,
Constraint PK_DET Primary Key (NumORD, NumLigne),
Constraint NbMaxMed Check (NumLigne < 5),
Constraint Ref_ORD Foreign Key (NumORD) References ORD(NumORD)
on delete cascade,
Constraint Ref_MED Foreign Key( NumMED )References MED(NumMED)
on update cascade);
SQL: LMD :Approfondissement
LES FONCTIONS D'ENSEMBLE
SQL a cinq fonctions importantes :

• SUM (): Donne le total d'un champ de tous les enregistrements


satisfaisant la condition de la

requête. Le champ doit bien sur être de type numérique;

• AVG (): donne la moyenne d'un champ de tous les enregistrements


satisfaisant la condition de la requête;

• MAX (): Donne la valeur la plus élevée d'un champ de tous les
enregistrements satisfaisant la condition de la requête

• MIN (): Donne la valeur la plus petite d'un champ de tous les
enregistrements satisfaisant la condition de la requête.

• COUNT (*) :Renvoie le nombre d'enregistrements satisfaisant la


requête.
LES FONCTIONS D'ENSEMBLE

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

• Pour retourner le nombre de produits dont le libellé commence


par la lettre 'P‘:

SELECT COUNT (*)


FROM Produits
WHERE libelle LIKE 'P%';
LA CLAUSE LIKE et Not Like
La clause LIKE permet de faire des recherches sur le contenu d'un
champ.

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


Clause BETWEEN

Pour sélectionner des enregistrements dont la valeur d'un champ peut


être comprise entre deux valeurs, on utilise la clause BETWEEN.

Exemple:
pour sélectionner les étudiants dont le nom commence par la lettre D :

SELECT *
FROM etudiant
WHERE age BETWEEN 18 AND
24;
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
• NOT IN sélectionne les enregistrements exclus de la liste spécifiée
après IN.
SELECT *
FROM etudiant
WHERE age IN (18,
20,22,24);

SELECT *
FROM etudiant
WHERE age NOT IN
(16,17,18);
DISTINCT

• L'option DISTINCT permet de ne conserver que des lignes distinctes,


en éliminant les doublons

SELECT DISTINCT nom, age


FROM etudiant WHERE nom=
‘Amrani’;
Les opérateurs:

• On peut utiliser les opérateurs suivants dans les conditions c’est-à-


dire dans la clause WHERE:
Opérateurs logiques

• Opérateur AND:

SELECT * FROM etudiant WHERE


age=20 AND nom=‘ahmed’;

Opérateur OR:

SELECT * FROM etudiant WHERE


nom=‘Amrani’ OR nom=‘Salhi’;
SELECT

Il existe d'autres options pour la commande SELECT :

• GROUP BY
• HAVING
• ORDER BY
GROUP BY

Si nous voulons la liste des étudiants, avec pour chaque


étudiants le nombre de prêt qu'il a fait:

SELECT num_etudiant, COUNT(*)


FROM prêt
GROUP BY num_etudiant;
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" );
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:
SELECT * FROM
etudiant
ORDER BY nom
ASC;
Jointure:
 Equijointure ( jointure naturelle)

 Autojointure (jointure sur la même table)

 Jointure externe

 Non-équijointure (jointure par non égalité, théta jointure)


Opérations Spécifiques
JOINTURE

Exemple:
Donnez pour chaque vente la référence du produit, sa désignation, son prix, le numéro
de client, la date et la quantité vendue:

Cours: Bases de Données Chapitre 4: L‘algèbre Relationnel


La jointure
Equijointure : Jointure Naturelle
La jointure
Exemple

Liste des RDV avec le docteur ‘Alaoui’:

Solution:

SELECT NumRDV
FROM RDV R , DOC D
WHERE R.NumDoc = D.NumDoc
and D.NomDoc =‘Alaoui’;
La jointure
La jointure
AutoJointure
La jointure
AutoJointure:
Exemple
Exercice d’application N°1:

1. Trouver les numéro de commande passées par le client « Amrani Ahmed »?

2. Lister les Num Client ayant commandé un produit dont le prix = 1000

3. Lister les noms des clients qui ont commandé le produit 2


Exercice d’application N°2:
Soit le modèle relationnel suivant relatif à une base de données sur des
représentations musicales :
 REPRESENTATION (n °représentation, titre_représentation, lieu)
 MUSICIEN (id_music, nom, #n °représentation)
 PROGRAMMER (id_programmer, date, #n °représentation, tarif)

Questions:
1. Donner la liste des titres des représentations.
2. Donner la liste des titres des représentations ayant lieu à l'opéra « Olympia »
3. Donner la liste des noms des musiciens et des titres des représentations auxquelles
ils participent.
4. Donner la liste des titres des représentations, les lieux et les tarifs pour la journée
du ‘12/03/2023’.
Jointure

Jointure Externe

Les jointures externes permettent de visualiser des lignes qui ne répondent pas à la
condition de jointure.
 Jointure externe
 Jointure externe à gauche
 Jointure externe à droite

Cours: Bases de Données Chapitre 5: Langage SQL


Jointure

Jointure Externe

SELECT table1.colonne, table2.colonne


FROM table1 FULL OUTER JOIN table2
ON table1.col1 = table2.col2 ;

Cours: Bases de Données Chapitre 5: Langage SQL


Jointure

Jointure Externe à gauche

SELECT table1.colonne, table2.colonne


FROM table1 LEFT OUTER JOIN table2
ON table1.col1 = table2.col2 ;

Cours: Bases de Données Chapitre 5: Langage SQL


Jointure

Jointure Externe à droite

SELECT table1.colonne, table2.colonne


FROM table1 RIGHT OUTER JOIN table2
ON table1.col1 = table2.col2 ;

Cours: Bases de Données Chapitre 5: Langage SQL


Jointure

Non Equijointure (thêta jointure)

Exemple : la liste des employés et leurs grades


SELECT EMP.nom, SAL.gra
FROM EMP, SAL
WHERE EMP.salemp BETWEEN SAL.salmin and SAL.salmax

Cours: Bases de Données Chapitre 5: Langage SQL


Requête Imbriqué

Syntaxe générale

SELECT colonnes_de_projection
FROM table
WHERE expr operator (
SELECT colonnes_de_projection
FROM table
WHERE …..
);

Cours: Bases de Données Chapitre 5: Langage SQL


Requête Imbriqué

Types de sous-requête

Cours: Bases de Données Chapitre 5: Langage SQL


Requête Imbriqué

Exemple

 Les noms des employés qui gagnent plus que ’Filali’ ?

SELECT nom
FROM EMP
WHERE salemp > (SELECT salemp
FROM EMP
WHERE nom=‘Filali’);

 Les employés ayant un salaire supérieur à la moyenne ?

SELECT nom
FROM EMP
WHERE salemp > (SELECT AVG(salemp)
FROM EMP);

Cours: Bases de Données Chapitre 5: Langage SQL


Requête Imbriqué

Exemple

 Les noms des employés qui ne sont pas les moins payés ?

SELECT nom
FROM EMP
WHERE salemp > ANY (SELECT salemp
FROM EMP );

 Le nom de l’employé le mieux payé ?

SELECT nom
FROM EMP
WHERE salemp >= ALL (SELECT salemp
FROM EMP);

Cours: Bases de Données Chapitre 5: Langage SQL


Exercice d’application

Q1 : Les numéros d’ordonances et leur montant total


Q2 : Les noms des patients ayant pris au moins un médicament de prix supérieur à 150
DH.
Q3 : Le nombre de RDV par docteur en 2019
Q4 : Patients sans RDV en 2019
Q5 : Les patients ayant eu des RDV avec tous les docteurs
Q6 : Les docteurs ayant eu des RDV avec tous les patients
Q7 : Les patients ayant eu des RDV avec les mêmes docteurs que le patient N°10.
Q8 : Le médicaments le plus prescrit en 2019.

Cours: Bases de Données Chapitre 5: Langage SQL


INDEX

Définition:
Un index est une structure de données qui permet d'accélérer les recherches
dans une table.

Syntaxe de création:
- Syntaxe basique :
CREATE INDEX ‘Index_Nom’ ON ‘Table_Nom’;
- Index sur une seule colonne :
CREATE INDEX ‘Index_Nom’ ON ‘Table_Nom’ (‘Colonne1’);
- Index sur plusieurs colonnes
CREATE INDEX ‘Index_Nom’ ON ‘Table_Nom’ (‘Colonne1’, ‘Colonne 2’, …);
- Index unique (unicité des valeurs de la colonne indexée)
CREATE UNIQUE INDEX ‘Index_Nom’ ON ‘Table_Nom’ (‘Colonne1’);

Cours: Bases de Données Chapitre 5: Langage SQL


Opérateurs Ensemblistes
T1 T2

 Intersect Id Nom Id Nom

 Union 1 N1 2 N2
 Union all 2 N2 4 N4
 Minus (EXCEPT) 3 N3 5 N5

Exemple:
1. SELECT id, nom FROM T1 id | nom
UNION ----|-------
SELECT id, nom FROM T2 1 | N1
2 | N2
2. SELECT id, nom FROM T1 3 | N3
UNION ALL 2 | N2
SELECT id, nom FROM T2 4 | N4
5 | N5
3. SELECT id, nom FROM T1
id | nom
INTERSECT
----|-------
SELECT id, nom FROM T2
2 | N2
Cours: Bases de Données Chapitre 5: Langage SQL
Opérateurs Ensemblistes
Exemple
 Les médicaments prescrits en mêmes temps dans
les ordonnances 1 et 3:
Select NumMed from DET Where NumOrd=1
INTERSECT
Select NumMed from DET Where NumOrd=3;

 Les docteurs n’ayant pas eu de RDV en 2022


Select NumDoc from DOC
MINUS
Select NumDoc from RDV Where dateRDV
Between ‘01/01/2022’ and ’31/12/2022’;

Cours: Bases de Données Chapitre 5: Langage SQL

Vous aimerez peut-être aussi