Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
2
Le Langage SQL
(SQL 2,3)
3
1. La définition des données
4
1.1. Création des tables (suite)
5
1.1. Création des tables (suite)
Le contrôle de la validité des données se fait par la définition de contraintes :
DEFAULT <valeur_par_défaut>
NOT NULL
6
1.1. Création des tables (suite)
La création de la structure de nouvelles tables se fait par l'ordre suivant, avec la
définition de la clé étrangère :
CREATE TABLE <Nom_de_la_table> (
<Nom_de_l'attribut1> <Domaine_de_définition> [<Contrainte>] [<Valeur_par_défault>]
[ ... <Nom_de_l'attributn> <Domaine_de_définition> [<Contrainte>] [<Valeur_par_défault>] ],
PRIMARY KEY (<Le_ou_les_attributs_de_la_clé_primaire>) ,
FOREIGN KEY (<Le_ou_les_attributs_de_la_clé_étrangère>) REFERENCES <Nom_table> );
7
1.1. Création des tables (suite)
Notation utilisée concernant les noms des contraintes :
8
Exemple 1 : BD ‘Sport Activities’
SPORACT
Les tables de la Base de Données sont décrites par les
schémas des relations ci-dessous :
BD SporAct
CEN CENTRE ( NUMC, NOMC, VILC, COUTINSC )
9
Exemple 1 : BD ‘Sport Activities’
SPORACT
10
Exemple 1 : BD ‘Sport Activities’
SPORACT
11
Exemple 1 : Définition des tables de la BD SPORACT
Exemples : CREATE TABLE
Création de la table pour les centres sportifs : CENTRE
12
Exemple 1 : Définition des tables de la BD SPORACT
13
1.2. Structure d’une table
DESC[RIBE] nom_objet
14
Exemple
15
1.3. Renommer une table
16
1.3. Renommer une table
Attention !!!
• Les contraintes d’intégrité et les index associés à
l’ancienne table sont automatiquement transférés
sur la nouvelle.
• Les vues, synonymes et procédures cataloguées
sont invalides.
• Il est aussi possible d’utiliser la directive
RENAME TO de l’instruction ALTER TABLE
pour renommer une table existante.
17
1.4. Modification de la structure des tables
La commande ALTER TABLE permet de modifier la structure d’une
table. Elle permet de :
18
1.4. Modification de la structure des tables
Ajout de colonnes
La directive ADD permet d'ajouter une ou plusieurs colonnes à une
tables existante.
• Ces colonnes sont initialisées à NULL.
• La contrainte NOT NULL de doit pas être utilisée sans la contrainte
DEFAULT.
•
ALTER TABLE Acteur ADD
( Département VARCHAR2(20),
NumDept VARCHAR2(5) DEFAULT ‘00000’ NOT NULL);
19
1.4. Modification de la structure des tables
Renommer des colonnes
Il faut utiliser la directive RENAME COLUMN de l'instruction ALTER
TABLE pour renommer une colonne existante.
Le nom de la nouvelle colonne ne doit pas être déjà utilisé par une colonne de
la table.
20
1.4. Modification de la structure des tables
Modifier le type des colonnes
La directive MODIFY permet de modifier le type d’une colonne existante si
celle-ci est vide.
Les contraintes en ligne peuvent être aussi modifiées par cette instruction
(DEFAULT, NOT NULL? UNIQUE, PRIMARY KEY, …)
21
1.4. Modification de la structure des tables
Supprimer des colonnes
La directive DROP COLUMN permet de supprimer une colonne existante.
Il n’est pas possibilité de supprimer avec cette instruction:
• Des clés primaires référencées par des clés étrangères;
• Toutes les colonnes d’une table.
22
1.5. Création et Destruction d'index
Les index sont un des outils mis en oeuvre, par les SGBD pour localiser et
extraire rapidement les données.
L'utilisateur précise les index à créer mais n'indique pas lequel doit
être utilisé lors d'une extraction des données.
Le SGBD sélectionne lui même l'index le mieux adapté.
23
1.5. Création et Destruction d'index (suite)
Les index sont créés à l'aide de la commande suivante :
24
Exemple : création d’index
Remarque :
On n'autorise pas deux fois la même valeur pour le numéro du
centre NUMC. Il est clé primaire.
25
1.6. Destruction des tables
26
2. La mise à jour des données
(insertion, modification, suppression)
27
Exemples : INSERT INTO
28
2.2. Modification des données
UPDATE <nom_de_la_table>
SET <nom_de_l'attribut-1> = <expression-1>
[,<nom_de_l'attribut-2> = <expression-2>
, ... <nom_de_l'attribut-n> = <expression-n>]
[WHERE <condition>] ;
29
Exemples : UPDATE
Augmenter le coût d' inscription, pour tous les centres, de 5% :
UPDATE CENTRE
SET COUTINSC = COUTINSC * 105%;
30
2.3. Suppression des données
31
Exemples : DELETE
32
3. L'interrogation des données
SELECT Colonne(s)
FROM Table(s) | Requête(s)
[ [ WHERE Condition(s) ]
[ GROUP BY Colonne(s)
[ HAVING Condition(s) ] ]
[ ORDER BY Colonne(s) ] ] ;
33
Une requête SQL peut donc être formulée comme suit :
34
2004 /
3.1. Expression des projections
L'élimination des doubles dans le résultat se fait par le mot clé DISTINCT ou
UNIQUE.
Les expressions peuvent être du type :
- le caractère * (étoile) désigne la liste de toutes les colonnes de la table,
- une ou plusieurs colonnes de la table, séparées par une virgule,
- une expression arithmétique (composée avec les opérateurs binaires , +, -, *, /)
- une expression arithmétique suivie par un titre
35
2004 /
3.2. Expression des sélections (avec ou sans projection)
36
2004 /
Les opérateurs de comparaison utilisés sont :
37
2004 /
Une expression logique contient un nombre quelconque d'opérateurs
NOT (la négation NON), AND (le ET logique) et OR (le OU
logique) :
38
2004 /
3.3. Expression du produit cartésien (avec ou sans projection)
39
2004 /
3.4. Expression de la jointure (avec ou sans projection)
40
2004 /
3.5. Expression de l'union
41
2004 /
3.6. Expression de l’intersection
42
3.6. Expression de l’intersection (suite)
SELECT colonne(s)
FROM …
WHERE [… AND]
colonne IN
Compatibilité entre les colonnes
( SELECT colonne
FROM ...
[WHERE ...] );
43
3.7. Expression de la différence
44
3.7. Expression de la différence (suite)
SELECT colonne(s)
FROM …
WHERE [… AND]
colonne NOT IN
Compatibilité entre les colonnes
( SELECT colonne
FROM ...
[WHERE ...] );
45
2004 /
3.8. Expressions des calculs
Le partitionnement horizontal d'une table en fonction des valeurs d'un ou plusieurs
attributs de partitionnement, suivi de l'application d'une fonction de calcul
s'exprime en SQL comme suit :
46
2004 /
3.9. Expressions des calculs de type agrégats
47
2004 /
3.10. Expression du tri (classement)
Le tri des données dans une table se fait par la clause ORDER BY :
48
2004 /
4. Le concept de vue
Une vue est une table virtuelle dont le schéma et le contenu sont dérivés de la base
réelle par un ensemble de questions :
49
2004 /
4. Le concept de vue (suite)
Une vue est une table virtuelle dont le schéma et le contenu sont
dérivés de la base réelle par un ensemble de questions :
50
2004 /
Exemple 1 : Définition des tables de la BD SPORACT
51
Exemple 1 : Définition des tables de la BD SPORACT
52
Exemple 1 : Définition des tables de la BD SPORACT
Exemples : CREATE TABLE
Création de la table des adhérents avec comme contrainte supplémentaire :
Le nom doit être en majuscule
53
Exemple 1 : Définition des tables de la BD SPORACT
Exemples : CREATE TABLE
Création de la table pour les membres d'un centre sportif : ESTMEMBRE
54
Exemple 1 : Définition des tables de la BD SPORACT
55
5. Exemples de requêtes SQL
56
2004 /
5. Exemples de requêtes SQL
Requête A1 : Projection
Afficher la liste des sports proposés.
57
2004 /
5. Exemples de requêtes SQL
Requête A2 : Projection
Afficher la liste des noms des centres sportifs et
les villes où ils se trouvent.
58
2004 /
5. Exemples de requêtes SQL
Requête B1 : Sélection
Afficher la liste des centres sportifs de Paris.
SELECT *
FROM CENTRE
WHERE UPPER(VILC) = ‘PARIS’ ;
SELECT *
FROM CENTRE
WHERE LOWER (VILC) = ‘paris’ ;
SELECT *
FROM CENTRE
WHERE VILC = "PARIS" ; sous access
59
2004 /
5. Exemples de requêtes SQL
SELECT NOMC
FROM CENTRE
WHERE UPPER(VILC) = ‘PARIS’ ;
60
2004 /
5. Exemples de requêtes SQL
SELECT NOMC
FROM CENTRE
WHERE UPPER(VILC) = ‘PARIS’
OR UPPER(VILC) = ‘NICE’;
SELECT NOMC
FROM CENTRE
WHERE UPPER(VILC) IN (‘PARIS’ , ‘NICE’);
61
2004 /
5. Exemples de requêtes SQL
SELECT NOMC
FROM CENTRE
WHERE UPPER(VILC) NOT LIKE ‘MA%’ ;
62
2004 /
5. Exemples de requêtes SQL
SELECT NUMA
FROM ESTMEMBRE
WHERE DATEINSC >= ’01-JUN-03’ AND DATEINSC <= ’31-MAR-04’ ;
FROM ESTMEMBRE
WHERE DATEINSC >= #03/06/01# AND DATEINSC <= #04/03/31# ;
63
2004 /
5. Exemples de requêtes SQL
SELECT NUMA
FROM ESTMEMBRE
WHERE DATEINSC BETWEEN ’01-JUN-03’ AND ’31-MAR-04’ ;
64
2004 /
5. Exemples de requêtes SQL
SELECT *
FROM CENTRE, PROPOSE ;
65
2004 /
5. Exemples de requêtes SQL
Requête D : Jointure
Afficher la liste des numéros, des noms et des villes des centres sportifs
qui proposent le Karting.
66
2004 /
5. Exemples de requêtes SQL
Requête D : Jointure
Afficher la liste des numéros, des noms et des villes des centres sportifs
qui proposent le Karting.
67
2004 /
5. Exemples de requêtes SQL
Requête D : Jointure
Afficher la liste des numéros, des noms et des villes des centres sportifs
qui proposent le Karting.
Requête D : Jointure
Afficher la liste des numéros, des noms et des villes des centres
sportifs qui proposent le Karting.
69
2004 /
5. Exemples de requêtes SQL
Requête E : Union
Afficher la liste des numéros des centres sportifs qui proposent
le football ou le handball ou ceux qui se trouvent à villetaneuse.
SELECT NUMC
FROM PROPOSE
WHERE UPPER(SPORT) IN (‘FOOTBALL’, ‘HANDBALL’)
UNION
SELECT NUMC
FROM CENTRE
WHERE UPPER(VILC) = ‘VILLETANEUSE’ ;
70
2004 /
5. Exemples de requêtes SQL
Requête F : Intersection
Afficher la liste des numéros des centres sportifs qui
proposent à la fois le Golf et le Tennis.
SELECT NUMC
FROM PROPOSE
WHERE UPPER(SPORT) = ‘GOLF’
INTERSECT
SELECT NUMC
FROM PROPOSE
WHERE UPPER(SPORT) = ‘TENNIS’ ;
71
2004 /
5. Exemples de requêtes SQL
Requête F : Intersection
Afficher la liste des numéros des centres sportifs qui proposent
à la fois le Golf et le Tennis.
SELECT NUMC
FROM PROPOSE
WHERE UPPER(SPORT) = ‘GOLF’
AND NUMC IN
(SELECT NUMC
FROM PROPOSE
WHERE UPPER(SPORT) = ‘TENNIS’ ) ;
72
2004 /
5. Exemples de requêtes SQL
Requête F : Intersection
Afficher la liste des numéros des centres sportifs qui proposent
à la fois le Golf et le Tennis.
SELECT P1.NUMC
FROM PROPOSE P1
WHERE UPPER(P1.SPORT) = ‘GOLF’
AND EXISTS
(SELECT *
FROM PROPOSE P2
WHERE UPPER(P2.SPORT) = ‘TENNIS’
AND P1.NUMC = P2.NUMC ) ;
73
2004 /
5. Exemples de requêtes SQL
Requête F : Intersection
Afficher la liste des numéros des centres sportifs qui proposent
à la fois le Golf et le Tennis.
SELECT P1.NUMC
FROM PROPOSE P1, PROPOSE P2
WHERE UPPER(P1.SPORT) = ‘GOLF’
AND UPPER(P2.SPORT) = ‘TENNIS’
AND P1.NUMC = P2.NUMC ;
SELECT P1.NUMC
FROM PROPOSE P1
WHERE UPPER(P1.SPORT) = ‘GOLF’
AND P1.NUMC IN (SELECT P2.NUMC
FROM PROPOSE P2
WHERE UPPER(P2.SPORT) = ‘TENNIS’) ;
74
2004 /
5. Exemples de requêtes SQL
Requête G : Différence
Afficher la liste des numéros des centres sportifs
qui ne proposent que la natation (pas d'autres sports).
SELECT NUMC
FROM PROPOSE
WHERE UPPER(SPORT) = ‘NATATION’
MINUS
SELECT NUMC
FROM PROPOSE
WHERE UPPER(SPORT) <> ‘NATATION’ ;
75
2004 /
5. Exemples de requêtes SQL
Requête G : Différence
Afficher la liste des numéros des centres sportifs
qui ne proposent que la natation (pas d'autres sports).
SELECT NUMC
FROM PROPOSE
WHERE UPPER(SPORT) = ‘NATATION’
(SELECT NUMC
FROM PROPOSE
WHERE UPPER(SPORT) <> ‘NATATION’) ;
76
2004 /
5. Exemples de requêtes SQL
Requête H1 : Division
Afficher la liste des numéros des acteurs qui pratiquent tous les sports
proposés par le centre sportif de numéro 104.
Les acteurs concernés doivent les pratiquer dans le centre 104.
SELECT P1.NUMA
FROM PRATIQUE P1
WHERE NOT EXISTS
( SELECT *
FROM PROPOSE P2
WHERE NUMC = ‘104’
AND NOT EXISTS
(SELECT *
FROM PRATIQUE P3
WHERE P1.NUMC = P3.NUMC)
AND P2.NUMC = P3.NUMC) ;
77
2004 /
5. Exemples de requêtes SQL
Requête H2 : Division
Afficher la liste des numéros des acteurs qui pratiquent tous les sports
proposés par le centre sportif de numéro 104.
Les acteurs concernés ne les pratiquent pas forcément dans le centre 104.
SELECT P1.NUMA
FROM PRATIQUE P1
WHERE NOT EXISTS
( SELECT *
FROM PROPOSE P2
WHERE NOT EXISTS
(SELECT *
FROM PRATIQUE P3
WHERE P1.NUMC = P3.NUMC)
AND P2.NUMC = P3.NUMC) ;
78
2004 /
5. Exemples de requêtes SQL
Requête I 1 : Calculs
Afficher la liste des numéros des centres sportifs, les villes où ils
se trouvent et le coût d'inscription réduit de 10%..
79
2004 /
5. Exemples de requêtes SQL
Requête I 2 : Calculs
Afficher la valeur maximale du coût d'inscription dans les centres sportifs
Requête I 3 : Calculs
Afficher la valeur minimale du coût d'inscription dans les centres sportifs
Requête I 4 : Calculs
Compter le nombre d’adhérents (inscrits ou non) dans la table ACTEUR
80
2004 /
5. Exemples de requêtes SQL
Requête I 5 : Calculs
Afficher le(s) numéro(s) de(s) centre(s) sportif(s) dont le coût d'inscription
est le moins élevé.
Requête I 6 : Calculs
Afficher la liste des centres sportifs (NUMC, NOMC, COUTINSC)
les plus chers.
81
2004 /
5. Exemples de requêtes SQL
Requête I 7 : Calculs
Afficher la liste des centres sportifs (NUMC, NOMC, COUTINSC) dont le
coût d'inscription est supérieur ou égal à la moyenne des coûts d'inscription
des différents centres.
82
2004 /
5. Exemples de requêtes SQL
Requête I 8 : Calculs
Compter le nombre de sport(s) proposé(s) par chacun des centres sportifs
83
2004 /
5. Exemples de requêtes SQL
Requête I 9 : Calculs
Compter le nombre de sport(s) proposé(s) par chacun des
centres sportifs parisiens.
84
2004 /
5. Exemples de requêtes SQL
Requête I 10 : Calculs
85
2004 /
5. Exemples de requêtes SQL
Requête I 11 : Calculs
Compter le nombre de sport(s) proposé(s) par chacun des centres sportifs
parisiens. Présenter le résultat par ordre décroissant du nombre de sports. Ne pas
afficher les résultats dont le nombre de sports proposés est inférieur à 5.
86
2004 /
5. Exemples de requêtes SQL
Requête I 11 : Calculs
Compter le nombre de sport(s) proposé(s) par chacun des centres sportifs parisiens.
Présenter le résultat par ordre décroissant du nombre de sports. Ne pas afficher les
résultats dont le nombre de sports proposés est inférieur à 5.
SELECT *
FROM V
WHERE NBSPORTS < 5
ORDER BY 2 DESC ;
87
2004 /
6. Notion de transaction
88
2004 /
7. Exemples de commandes SQL PLUS sous ORACLE
SQL> SELECT table_name FROM user_tables ; -- permet d’avoir les noms des créées
par l’utilisateur connecté à la BD
SQL> TTILE ‘message à afficher’ -- permet d’avoir un titre si la requête renvoie des valeurs
SQL> COLUMN colonne FORMAT A10 -- la colonne est affichée sur 10 positions
SQL> COLUMN colonne FORMAT 999 -- la colonne est affichée sur 3 positions
SQL> SET LINES 100 SQL> SET PAGES 100
SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MM-YYYY' ;
SQL> SELECT … FROM … WHERE … ;
89
2004 /
8. Exemples de commandes SQL PLUS sous ORACLE
NVL(expr1, expr2) convertit expr1 susceptible d’être nulle en une valeur réelle (expr2).
90
2004 /
8. Exemples de commandes SQL PLUS sous ORACLE
91
2004 /
A VOUS DE JOUER
QUESTIONS
Rédigez en langage SQL les requêtes permettant d'obtenir :
a) Noms et villes des centres dont le coût d'inscription est inférieur à 500 €;
b) Prénoms et noms des acteurs inscrits dans des centres à Paris;
c) Coût moyen d'inscription dans un centre (tous les centres étant considérés);
d) Coûts moyens d'inscription pour chaque nom de centre, dans l'ordre alphabétique croissant des noms
de centres (coût moyen pour les centres "Green Park", coût moyen pour les centres "Nannou", etc...);
e) Nombre d'acteurs inscrits dans les centres "Nannou Center".
f) Prénoms et noms des acteurs qui ne pratiquent aucun sport sur une période donnée;
92
2004 /
A VOUS DE JOUER
QUESTIONS
Indiquez le résultat des requêtes SQL suivantes sur l'exemple d'occurrences de la BD SPORACT :
93
2004 /
A VOUS DE JOUER
Pour les requêtes suivantes, indiquez quelles sont les réponses correctes parmi celles proposées :
b) Numéros des acteurs qui pratiquent le tennis dans les centres ‘Nannou Center’
R1 : SELECT NUMA FROM PRATIQUE WHERE SPORT = ‘Tennis’
INTERSECT
SELECT NUMA FROM ESTMEMBRE, CENTRE WHERE NOMC = ‘Nannou Center’
AND CENTRE.NUMC = ESTMEMBRE.NUMC ;
94
2004 /
A VOUS DE JOUER
Pour les requêtes suivantes, indiquez quelles sont les réponses correctes parmi celles proposées :
95
2004 /
Exemple 2 : BD ‘BDEmp
ToyesAreAs
96
2004 /
Le Langage SQL
L’algèbre relationnelle est composée de plusieurs opérations.
Les plus connues sont :
- la projection (garder des colonnes à partir d’une table) ;
- la sélection (restriction) (garder des lignes à partir d’une table) ;
- l’union de 2 tables :
- l’intersection entre 2 tables ;
- la différence entre 2 tables ;
- le produit cartésien entre 2 tables (croiser 2 tables) ;
- la jointure entre 2 tables (rapprocher 2 tables sur des critères) ;
- la division ;
- Etc....
Des opérateurs :
- le calcul (minimum, maximum, moyenne, somme, comptage) dans
une table ;
- le tri des données etc.…
Le langage SQL est donc le langage qui permet d’exprimer ces opérations.
97
2004 /
Exemple BDEmp
Les données de base gérées par le service des Ressources
Humaines de l’entreprise TOYESAREAS sont décrites
ci-dessous :
Un employé est identifié par son numéro et est décrit par
son nom et sa date d’embauche ;
Un service est identifié par son numéro et est décrit par
son nom ;
La carrière d’un employé est décrite par les différents
postes occupés dans les différents services.
98
2004 /
Exemple BDEmp
Dictionnaire de données :
Colonne
Champ
Attribut Signification Type de données
99
2004 /
Exemple BDEmp
Les tables de la Base de Données sont décrites par les
schémas des relations ci-dessous :
BDEmp
Table des employés : Employés (NumEmp, NomEmp, DateEmb, DateSortie)
100
2004 /
Exemple BDEmp
La création des tables se fait comme suit :
101
2004 /
Exemple BDEmp
L ’insertion des données dans les tables se fait comme suit :
102
2004 /
Exemple BDEmp
103
2004 /
Requête A1 : Liste des noms de tous les employés :
Il faut afficher une seule colonne, celle qui contient les noms des employés, à partir
de la tables des employés. Ce qui se traduit par :
Algèbre Relationnelle
104
2004 /
Ce qui se traduit en SQL par :
SQL
Sans élimination des doubles SELECT NomEmp FROM Employés ;
ou
SELECT Employés.NomEmp FROM Employés ;
NomEmp
CHEVALIER
Résultat LEROY
affiché : LAMI
SULTAN
CLEMENCE
CAVALIER
ALEXANDRE
SQL
pour l’élimination des doubles SELECT DISTINCT NomEmp FROM Employés ;
105
2004 /
Requête A2 : Liste de tous les postes.
Il faut afficher une seule colonne, celle qui contient les postes, à partir de la table des
postes. On veut éliminer les doublons. Ce qui se traduit par :
Algèbre Relationnelle
Résultat = Projection ( Postes, {Poste} )
SQL
106
2004 /
Requête A3 : Liste de tous les employés :
Algèbre Relationnelle
SQL
SELECT * FROM Employés ;
ou
SELECT NumEmp, NomEmp, DateEmb, DateSortie FROM Employés ;
107
2004 /
Requête A4 : Liste des employés embauchés à partir du 1er janvier 1999
(la date d ’embauche >31 déc 1998):
Il faut sélectionner les lignes qui correspondent au critère demandé. On veut afficher toutes les colonnes
de la table des employés qui correspondent à ce critère. Ce qui se traduit par :
Algèbre Relationnelle
R = Sélection ( Employés, { DateEmb >= 1er janvier 1999 } )
SQL
SELECT * FROM Employés
WHERE DateEmb > #12/31/1998#;
108
2004 /
Requête A5 : Liste des noms de tous les employés de Paris.
Algèbre Relationnelle
T1 = Sélection ( Employés, { VilleEmp = ‘Paris’ } )
R = Projection ( T1, { NomEmp } )
SQL
SELECT DISTINCT NomEmp FROM Employés
WHERE VilleEmp = ‘Paris’ ; Oracle
109
2004 /
Requête A6 : Liste des employés dont le nom commence par la lettre C.
Il faut sélectionner les lignes qui correspondent au critère demandé, en n’affichant que 2 colonnes
(numéro et nom) de la table des employés qui correspondent à ce critère. Ce qui se traduit par :
Algèbre Relationnelle
Etape1 = Sélection ( Employés, {NomEmp commence par C} )
Résultat = Projection (Etape1, {NumEmp, NomEmp} )
SQL
SELECT Employés.NumEmp, Employés.NomEmp
FROM Employés
WHERE NomEmp LIKE "C*"; Access
110
2004 /
Requête A7 : Liste des postes occupés dont le salaire de l’employé est
supérieur ou égal à 3000.
Il faut sélectionner les lignes qui correspondent au critère demandé, et afficher toutes les colonnes
de la table des postes qui correspondent à ce critère. Ce qui se traduit par :
Algèbre Relationnelle
SQL
111
2004 /
Exemples de Conditions de sélection
112
2004 /
Exemples de Conditions de sélection
113
2004 /
Requête B1 : Trier (classer) les employés par ordre décroissant sur les noms.
Il faut afficher toutes les colonnes de la table des employés.
Algèbre Relationnelle
Résultat = Tri ( Employés, {Nom DéCroissant} )
SQL
SELECT *
FROM Employés
ORDER BY NomEmp DESC ;
114
2004 /
Requête B2 : Trier (classer) les postes occupés par ordre croissant sur les
salaires.
Il faut afficher les colonnes SALAIRE et NUMSERV de la table des postes après avoir trié les
données.
Algèbre Relationnelle
Etape1 = Tri ( Postes, {Salaire Croissant} )
Résultat = Projection ( Etape1, {Salaire, NumServ} )
SQL
SELECT Salaire, NumServ
FROM Postes SELECT Salaire, NumServ
ORDER BY Salaire ; FROM Postes
ORDER BY 1 ;
l’ordre est croissant par défaut le 1 désigne la colonne SALAIRE
115
2004 /
Requête C1 : Faire un calcul sur une colonne ; calculer la moyenne des salaires.
Il faut afficher une seule valeur la moyenne des salaires.
Algèbre Relationnelle
SQL
SELECT AVG(Salaire)
FROM Postes;
116
2004 /
Requête C2 : Faire un calcul sur une colonne ; calculer la moyenne des salaires
pour les postes actuellement occupés.
Il faut afficher une seule valeur la moyenne des salaires nommée Moyenne_Salaires
Algèbre Relationnelle
Etape1 = Sélection ( Postes, { DateDeb est non vide et DateFin est vide } )
Résultat = Calcul ( Etape1, { Moyenne(Salaire) nommée Moyenne_Salaires } )
SQL
SELECT AVG(Postes.Salaire) AS Moyenne_Salaires
FROM Postes
WHERE DateDeb IS NOT NULL AND DateFin IS NULL;
117
2004 /
Requête C3 : Faire un calcul sur une colonne ; calculer le plus bas salaire.
Il faut afficher une seule valeur le minimum des salaires nommée Le_plus_bas_salaire
Algèbre Relationnelle
SQL
SELECT MIN(Salaire) AS Le_Plus_Bas_Salaire
FROM Postes ;
118
2004 /
Requête C4 : Faire un calcul sur une colonne ; calculer le plus haut salaire.
Il faut afficher une seule valeur le maximum des salaires nommée Le_plus_haut_salaire
Algèbre Relationnelle
SQL
SELECT MAX(Salaire) AS Le_haut_Bas_Salaire
FROM Postes ;
119
2004 /
Requête C5 : Faire un calcul sur une colonne ; Compter le nombre de salariés qui
répondent à des critères
Il faut afficher une seule valeur le nombre de salaire(s) > 3000 , nommée Nombre_Salariés
Algèbre Relationnelle
Etape1 = Sélection ( Postes, { Salaire > 3000 et DateFin est vide } )
Résultat = Calcul ( Etape1, { Compter(Salaire) nommée Nombre_Salariés } )
SQL
SELECT COUNT(*) AS Nombre_Salariés
FROM Postes
WHERE Salaire > 3000 AND DateFin IS NULL;
120
2004 /
Requête C6 : Faire des synthèses dans une table ; créer des partitions sur les
valeurs ; Faire des groupements par service.
Il faut afficher
Pour chaque service la moyenne des salaires , nommée MoyenneDesSalaires
Algèbre Relationnelle
Etape1 = Sélection ( Postes, { DateFin est vide } )
Résultat = Grouper ( Numserv, Calcul ( Etape1, { Moyenne(Salaire) nommée MoyenneDesSalaires } )
SQL
SELECT Postes.NumServ,
AVG(Postes.Salaire) AS MoyenneDeSalaires
FROM Postes
WHERE DateFin IS NULL
GROUP BY Postes.NumServ;
121
2004 /
Requête E1 : Afficher les employés dont le salaire > 3000 €. On demande le
numéro, le nom et le salaire.
Faire des jointures entre plusieurs tables.
Algèbre Relationnelle
Etape1 = Sélection ( Postes, {Salaire > 3000 )
Etape2 = Jointure ( Etape1, Employés, { NumEmp } )
Résultat = Projection ( Etape2, {NumEmp, NomEmp, Salaire} )
SQL
SELECT Employés.NumEmp, Employés.NomEmp, Postes.Salaire
FROM Employés, Postes
WHERE Employés.NumEmp = Postes.NumEmp
AND Postes.Salaire > 3000 ;
122
2004 /
Requête E2 : Afficher les employés qui travaillent dans le service du personnel.
Faire des jointures entre plusieurs tables.
Algèbre Relationnelle
Etape1 = Sélection ( Services, {NomServ = « Personnel »} )
Etape2 = Jointure ( Etape1, Postes, { NumServ } )
Etape3 = Jointure ( Etape2, Employés, { NumEmp } )
Résultat = Projection ( Etape3, {NumEmp, NomEmp} )
SQL
SELECT Employés.NumEmp, Employés.NomEmp
FROM Employés, Postes, Services
WHERE Employés.NumEmp = Postes.NumEmp
AND Postes.NumServ = Services.NumServ
AND Services.NomServ="Personnel";
123
2004 /
Requête E5 : Faire des jointures entre plusieurs tables
Algèbre Relationnelle
Etape1 = Sélection ( Services, {NomServ = « Personnel »} )
Etape2 = Jointure ( Etape1, Postes, { NumServ } )
Etape3 = Jointure ( Etape2, Employés, { NumEmp } )
Résultat = Projection ( Etape3, {NumEmp, NomEmp} )
SQL
SELECT Employés.NumEmp, Employés.NomEmp
FROM Employés, Postes, Services
WHERE Employés.NumEmp = Postes.NumEmp
AND Postes.NumServ = Services.NumServ
AND Postes.DateFin IS NULL AND Services.Nomserv = “Personnel”
ORDER BY Employés.NomEmp DESC;
124
2004 /
Requête XCE1 : Faire des synthèses dans une ou plusieurs tables ; créer des
partitions sur les valeurs ; Faire des groupements par service.
Il faut afficher
Pour chaque service le nombre des salariés , nommée NombreSalariés
SQL
SELECT NomServ AS NomService,
COUNT(Salaire) AS NombreSalariés
FROM Postes, Services
WHERE Postes.NumServ = Services.NumServ AND DateFin IS NULL
GROUP BY NomServ ;
125
2004 /
SQL
SELECT Colonne(s) FROM Table(s)
WHERE Condition(s)
ORDER BY …
GROUP BY …
HAVING ….;
Colonnes :
Colonne simple issue d’une table
Calcul (AVG ; SUM ; MIN ; MAX ; COUNT)
Une * (pour désigner toutes les colonnes)
Un nouveau nom de colonne ( AS le_nouveau_nom)
Pour éliminer les doubles (DISTINCT)
126
2004 /
Conditions :
• conditions simples (Colonne comparée à une Valeur)
• conditions simples (Colonne comparée à Colonne)
• des conditions simples connectées avec des AND ; des OR ; des NOT
127
2004 /
On appellera BLOC SQL toute commande du type :
SELECT ... FROM ... WHERE ...
128
2004 /
Pour effectuer un groupement des données ,
il faut ajouter la commande GROUP BY au bloc sql :
129
2004 /
Une requête SQL peut donc être formulée comme suit :
130
2004 /