Vous êtes sur la page 1sur 10

Département d’informatique

2éme année LMD 2014/2015


Base de données SQL & SQL server 2008

A. Créer la base de données : CREATE DATABASE nom_base


B. Supprimer la base de données : DROP DATABASE nom_base
C. Renommer une base
ALTER DATABASE nomBase MODIFY NAME= nouveauNomBase
Ou
SP_RENAMEDB ANCIEN_NOM, NOUVEAU NOM

D. Les types de données prédéfinis:


Caractères
1. char(n) : Chaîne de caractères de longueur fixe, de n caractères
maximum. Par défaut 1, maximum 8000.
2. varchar(n) : Chaîne de caractères à longueur variable, de n
caractères maximum. Par défaut 1, maximum 8000 caractères.
3. nchar(n) : Chaîne de caractères unicode, maximum 4000
caractères.

Numériques :
1. bigint : Type de données entier codé sur 8 octets.
2. int : Nombre entier entre -231 et +231 - 1
3. smallint : Nombre entier entre -215 et 215 - 1
4. tinyint : Nombre entier positif entre 0 et 255.
5. float(n) : Numérique approché de n chiffres, n allant de 1 à 53.
6. real : Identique à float(24).
7. Money : Numérique au format monétaire.
8. decimal [(p[,d])] : Numérique exact de précision p (nombre de
chiffres total), avec d chiffres à droite de la virgule. p est compris
entre 1 et 38, 18 par défaut. d est compris entre 1 et p, 0 par
défaut.
Date :
1. Datetime : Permet de stocker une date et une heure sur 8 octets.
2. Smalldatetime : Permet de stocker une date et une heure sur 4
octets.
3. Date : Permet de stocker une date
4. Time : Permet de stocker une donnée positive de type heure
inférieure à 24h00

Créer une table :


CREATE TABLE nom_table (nom_colonne typecolonne contraintes,
nom_colonne ...)
Supprimer une table DROP TABLE nomtable
Modifier une table : La modification de table est effectuée par la
commande ALTER TABLE.
o Ajouter colonne : ALTER TABLE NOM_TABLE ADD
NOM_COLONNE TYPE
o Supprimer colonne : ALTER TABLE NOM_TABLE DROP
COLUMN NOM_COLONNE

1
Département d’informatique
2éme année LMD 2014/2015
Base de données SQL & SQL server 2008

o Modifier le type de données d’une colonne : ALTER TABLE


NOM_TABLE ALTER COLUMN NOM_COLONNE NOUVEAU_TYPE
o Supprimer contrainte : ALTER TABLE NOM_TABLE DROP
CONSTRAINT NOM_CONTRAINTE

Les contraintes d’intégrité :


1. IDENTITY : Ce type de contrainte peu être affectée à une colonne
par table, de type numérique entier. Elle permet d’incrémenter les
valeurs d’une colonne, ligne après ligne. Par défaut, la contrainte
IDENTITY part de 1, et a un pas d’incrément de 1. Il est possible
de changer la valeur de départ et le pas d’incrément. Exemple :
CREATE TABLE MATABLE
(COLONNE1 NUMERIC(18,0) IDENTITY (1,2)
COLONNE2 char(10))
2. PRIMARY KEY : Cette contrainte permet de définir une clé
primaire sur une ou plusieurs colonnes d’une table. Il ne peut y
avoir qu’une clé primaire par table.
--Pendant la définition de table :
CREATE TABLE MATABLE1
(COLONNE1 type PRIMARY KEY)
--Après définition de la table :
ALTER TABLE MATABLE1 ADD PRIMARY KEY (COLONNE1,
colon2,..)
3. UNIQUE : avec une contrainte unique, il ne sera pas possible
d’avoir deux fois une même valeur pour une colonne donnée. une
table peut avoir plusieurs colonnes concernées par une contrainte
UNIQUE. les colonnes utilisées peuvent être NULL. Voir la
syntaxe de Primary Key
4. REFERENCE : La contrainte REFERENCE traduit la liaison qui
existe entre une clé primaire et étrangère de deux tables.
--Pendant :
CREATE TABLE MATABLE2
(COLONNE1 type REFERENCE MATABLE1 Options)
--Après :
ALTER TABLE MATABLE2 ADD FOREIGN KEY COLONNE1
REFERENCE MATABLE1 (colonne) Options

Options:
o NO ACTION : Elle permet d’obtenir le même comportement
que si nous n’avions rien précisé. C’est la valeur par défaut
o ON DELETE CASCADE : Précise que si une ligne contenant
la clé primaire référencée est supprimée, toute les lignes
contenant une clé étrangère référencé sur cette clé primaire
seront supprimées, sous réserve que la clé primaire et la ou
les clés étrangères possèdent la même valeur
d’enregistrement.

2
Département d’informatique
2éme année LMD 2014/2015
Base de données SQL & SQL server 2008

o ON UPDATE CASCADE : Permet de demander à SQL Server


de mettre à jour toutes les clés étrangères référencées sur
une clé primaire, lorsque cette clé primaire est mise à jour.
o { ON DELETE | ON UPDATE } SET NULL : Lorsque la ligne
correspondant à la clé primaire dans la table référencée est
supprimée (modifié), alors la clé étrangère prend la valeur
null.
o { ON DELETE | ON UPDATE } SET DEFAULT : Lorsque la
ligne correspondant à la clé primaire dans la table
référencée est supprimée (moifié), alors la clé étrangère
prend la valeur par défaut définie au niveau de la colonne.

5. DEFAULT : La contrainte DEFAULT est particulièrement utile


pour éviter les valeurs NULL dans une table. Il faut toutefois
garder à l’esprit qu’une valeur par défaut ne sera utilisée que
dans le cas où l’utilisateur n’entre pas de valeur pour une colonne
en particulier.
Voici la syntaxe :
--Pendant :
CREATE TABLE MATABLE1
(COLONNE1 type DEFAULT Valeur)
--Après :
ALTER TABLE MATABLE2
ADD DEFAULT Valeur FOR COLONNE1
6. CHECK : Cette contrainte permet de vérifier, avant insertion ou
mise à jour des données contenues dans la colonne en question,
que les données à insérer sont bien au format voulu, ou encore
qu’une valeur entrée dans la colonne pour un enregistrement
appartiendra à un domaine de valeurs particulier.
--Pendant :
CREATE TABLE MATABLE1
(COLONNE1 type CHECK (expression_booleenne))
--Après :
ALTER TABLE MATABLE2
ADD CHECK (expression_booleenne)
7. NOT NULL : Spécifie que la colonne doit être valorisée en création
ou en modification.

L’instruction INSERT : L’instruction INSERT, comme son nom


l’indique, va nous permettre d’ajouter une ligne de données dans une
table de la base de données.
Syntaxe : INSERT NOM_TABLE (COL1, COL2, …, COLN,) VALUES (V1,
V2,…, VN). Les colonnes non citées prendront la valeur NULL. Si la
liste des colonnes est omise, toutes les colonnes devront être associées
à une valeur.

3
Département d’informatique
2éme année LMD 2014/2015
Base de données SQL & SQL server 2008

Modification de lignes : La modification des valeurs des colonnes de


lignes existantes s’effectue par l’instruction UPDATE.
Syntaxe :
UPDATE NOM_TABLE SET NOM_COLONNE1 = VALEUR,
NOM_COLONNE2 = VALEUR, … WHERE CONDITION. La clause SET
permet d’indiquer les colonnes à mettre à jour. La clause WHERE, sert
à cibler les enregistrements à mettre à jour.
Suppression de lignes : L’instruction DELETE permet de supprimer
une ou plusieurs lignes d’une table.
Syntaxe :
DELETE FROM NOM_TABLE WHERE CONDITION
Extraction de lignes : L’instruction SELECT permet de visualiser les
données stockées dans les tables.
Syntaxe simple:
SELECT *|LISTE_COLONNE FROM NOM_TABLE1, TABLE2,
…, TABLEN WHERE CONDITION

Fonctions d'agrégation :
Les fonctions d'agrégation effectuent un calcul sur un ensemble de
valeurs et retournent une valeur unique. À l'exception de COUNT, les
fonctions d'agrégation ignorent les valeurs NULL. Les fonctions
d'agrégation sont souvent utilisées avec la clause GROUP BY de
l'instruction SELECT.
Exemple de fonction d’agrégation : sum(), avg(), count(), min(),
max(),etc.
Exemple : la requête suivante donne le salaire moyen des employés.
select avg(salaire) as 'salaire moyen' from employe

La clause GROUP BY :
Regroupe un ensemble sélectionné de lignes en un ensemble de lignes
de synthèse selon les valeurs d'une ou plusieurs colonnes. Une ligne est
retournée pour chaque groupe. Cette commande doit toujours s’utiliser
après la commande WHERE. De plus, toutes les colonnes représentées
hors des calculs d'agrégation doivent figurer dans la clause GROUP BY.
Syntaxe Simple :

SELECT colonne1, fonction_agrégation(colonne2)


FROM table
GROUP BY colonne1

Exemple :
La requête suivante donne le nombre des employés pour chaque
département :
select count(*), id_dept from emp
group by id_dept

4
Département d’informatique
2éme année LMD 2014/2015
Base de données SQL & SQL server 2008

La clause Having :
Spécifie une condition de recherche pour un groupe ou pour une
agrégation. La clause HAVING est généralement utilisée avec la clause
GROUP BY.
Syntaxe : Having(condition de recherche). La condition spécifie la
condition de recherche que le groupe doit respecter.
Exemple : la requête suivante donne les départements (id_dept) ayant
un nombre d’employés supérieur à 10.
select count(*), id_dept from emp
group by id_dept having(COUNT(*)>10)

La clause Order by : trie les résultats d'une requête sur une ou


plusieurs colonnes. Un tri est effectué dans l'ordre croissant (ASC) ou
décroissant (DESC). Si l'ordre de tri n'est pas spécifié, le tri par défaut
est croissant. La requête suivante retourne des résultats triés par
nom_emp dans l'ordre croissant :
select * from employe
order by nom_emp

La clause distinct :
Le mot clé DISTINCT supprime les doublons de ligne dans les résultats
d'une instruction SELECT. Si DISTINCT n'est pas précisé, toutes les
lignes sont retournées, y compris les lignes dupliquées. Pour le mot clé
DISTINCT, les valeurs NULL sont considérées comme des doublons
entre elles. Lorsque DISTINCT est inclus dans une instruction SELECT,
une seule valeur NULL est retournée dans les résultats, quel que soit le
nombre de valeurs NULL rencontrées.
Exemple: select distinct id_dept from emp

Principes de base des jointures :


Les jointures permettent d'extraire des données de deux ou de plusieurs
tables en fonction des relations logiques existant entre ces tables. Une
jointure permet donc de combiner les colonnes de plusieurs tables. Une
condition de jointure définit la manière dont deux tables sont liées dans
une requête :
• en spécifiant la colonne de chaque table à utiliser pour la
jointure. Une condition de jointure standard spécifie une clé
étrangère d'une table et la clé qui lui est associée dans l'autre
table ;
• en spécifiant un opérateur logique (par exemple = ou <>) à utiliser
pour comparer les valeurs des colonnes.

5
Département d’informatique
2éme année LMD 2014/2015
Base de données SQL & SQL server 2008

Type de jointures :
1. Naturelle : s’il y a au moins une colonne qui porte le même nom
entre les tables.
2. équi-jointure : jointure basée sur l'égalité des valeurs des
colonnes.
3. Non equi-jointure : jointures basée sur un critère différent de
l'égalité.
4. Auto-jointure : joindre une table sur elle-même.
5. jointure interne : permet de retourner les enregistrements quand
la condition est vraie dans les tables. C’est l’une des jointures les
plus communes.
6. Jointure externe : Une jointure externe permet de retourner des
lignes répondant à la condition de jointure mais aussi toutes
celles qui ne vérifient pas cette condition.
Les jointures externes peuvent être des jointures externes
gauches, droites ou complètes. Lorsqu'elles sont spécifiées dans
la clause FROM, les jointures externes sont spécifiées à l'aide
d'un des ensembles de mots clés suivants :
• LEFT JOIN ou LEFT OUTER JOIN
Jointure externe pour retourner tous les enregistrements de la
table de gauche (LEFT = gauche) même si la condition n’est pas
vérifié dans l’autre table.
• RIGHT JOIN ou RIGHT OUTER JOIN
Jointure externe pour retourner tous les enregistrements de la
table de droite (RIGHT = droite) même si la condition n’est pas
vérifié dans l’autre table.
• FULL JOIN ou FULL OUTER JOIN
Une jointure externe complète renvoie toutes les lignes des tables
de gauche et de droite. Chaque fois qu'une ligne n'a pas de
correspondance dans une autre table, les colonnes de la liste de
sélection de l'autre table comportent des valeurs NULL. Lorsqu'il
existe une correspondance entre les tables, la ligne de l'ensemble
de résultats tout entière contient des valeurs de données des
tables de base.
• La syntaxe de la jointure externe est la suivante :
SELECT ...
FROM <table gauche>
LEFT | RIGHT | FULL JOIN <table droite>
where condition

7. Jointure croisée : permet de faire le produit cartésien des tables.


8. Jointure d’union : consiste à ajouter toutes les données des
deux tables à condition qu'elles soient compatibles dans leurs
structures. Les lignes dupliquées ne sont retournées qu’une seule
fois.

6
Département d’informatique
2éme année LMD 2014/2015
Base de données SQL & SQL server 2008

Exemples :

Jointure croisée: La requête suivante fait le produit cartésien entre EMP


et DEPT : select * from emp, dept

Jointure interne (equi-jointure) : la requête suivante donne les noms


des employés et les noms de leur département.
select nom_emp, nom_dept from emp e, dept d
where e.id_dept = d.id_dept

jointure externe gauche: la requéte suivante donne les départements


qui n'ont pas d'employés :
select d.id_dept, nom_dept from dept d
left join emp e on e.id_dept = d.id_dept
where e.id_dept is null
Auto-jointure: la requête suivante donne tous les employés qui ont le
même salaire que « e1 » :
select emp2.code_emp,emp2.nom_emp,emp2.salaire from emp
emp1, emp emp2
where emp1.code_emp = 'e1'
and emp1.salaire = emp2.salaire
and emp2.code_emp <> 'e1'

Principes de base des sous-requêtes :

Une sous-requête est une requête qui est imbriquée dans une
instruction SELECT, INSERT, UPDATE ou DELETE, ou dans une autre
sous-requête. Une sous-requête peut être utilisée partout où une
expression est autorisée.
La requête SELECT d'une sous-requête se place toujours entre
parenthèses.
Il existe trois sous-requêtes de base :
• les sous-requêtes qui opèrent sur des listes, introduites par IN,
EXISTS, ou par un opérateur de comparaison modifié par ANY ou
ALL ;
• les sous-requêtes introduites par un opérateur de comparaison
non modifié (=, <, >) et qui doivent retourner une valeur unique ;
• Les sous-requêtes corrélées. La clause WHERE de la requête
interne fait référence à une des tables de la requête externe. Dans
ce cas, la sous-requête interne est exécutée pour chaque ligne
extraite par la requête externe.

Opérateur EXISTS . : Si la sous-requête renvoie un résultat


quelconque, alors le prédicat vaut vrai. Si le sous-requête ne renvoi
aucune ligne, le prédicat vaut faux.
Une sous-requête introduite par le mot clé EXISTS constitue un test
d'existence. La clause WHERE de la requête externe teste l'existence des

7
Département d’informatique
2éme année LMD 2014/2015
Base de données SQL & SQL server 2008

lignes retournées par la sous-requête. En réalité, la sous-requête ne


génère pas de données, elle retourne la valeur TRUE ou FALSE.
Une sous-requête introduite par EXISTS présente la syntaxe suivante :
WHERE [NOT] EXISTS (subquery)

L’opérateur NOT EXISTS retourne la valeur TRUE si aucun


enregistrement n’est extrait par la sous-interrogation. Cet opérateur
peut être utilisé pour écrire des jointures externes.

Sous-requêtes avec any/all :

Les opérateurs de comparaison qui introduisent une sous-requête


peuvent être modifiés par les mots clés ALL ou ANY.
Les sous-requêtes introduites par un opérateur de comparaison modifié
retournent une liste contenant aucune ou plusieurs valeurs et peuvent
contenir une clause GROUP BY ou HAVING.
> all signifie supérieur à toutes les valeurs ; = all signifie égal à chaque
valeur ;
> any signifie supérieur à au moins une valeur ; = any signifie égal à
une valeur
Prenons par exemple l’opérateur de comparaison > :
• > all signifie supérieur à toutes les autres valeurs ou à une valeur
maximale.
Par exemple, > all (1, 2, 3) signifie supérieur à 3.
• > any signifie supérieur à au moins une valeur, soit supérieur à la
valeur minimale. Par conséquent, > any (1, 2, 3) signifie supérieur à 1.

Syntaxes:

where expression comparison_operator [any | all]


(subquery)

Sous-requêtes avec IN
Les sous-requêtes introduites par le mot-clé in renvoient une liste
contenant zéro ou plusieurs valeurs.

L’opérateur UNION
L’opérateur UNION va nous permettre d’obtenir un ensemble de ligne
provenant de plusieurs requêtes différentes. Toutes les requêtes doivent
fournir le même nombre de colonnes avec les mêmes types de données
pour chaque colonne (correspondance deux à deux). les lignes
dupliquées ne sont retournées qu’une seule fois.

Syntaxe :
SELECT ... UNION SELECT ...

8
Département d’informatique
2éme année LMD 2014/2015
Base de données SQL & SQL server 2008

L’opérateur INTERSECT
Grace à cet opérateur, il va être possible d’identifier en une seule
requête, des lignes d’informations simultanément présentes dans deux
jeux de résultats distincts, mais de mêmes structures.
Syntaxe :
SELECT ... INTERSECT SELECT ...

L’opérateur Except
Il permet de localiser les lignes d’informations présentes dans un jeu de
résultats et qui ne le sont pas dans un autre.
Cette différence ne peut être réalisée qu’entre des jeux de résultats
possédant la même structure, c’est à dire le même nombre de colonnes,
définies dans le même ordre et sur les mêmes types de données pour les
deux jeux de résultats.
Syntaxe :
SELECT ... EXCEPT SELECT ...

Exercice : Soit le schéma relationnel suivant

EMP (Id_emp, nom_emp, profission, date_embauche, salaire,


commission, id_dept, id_responsable).
DEPT (id_dept, nom_dept, directeur, ville)

Questions :
1. Donner tous les n-uplets de DEPT
2. Donner tous les n-uplets de EMP
3. Donner les noms et les salaires des employés
4. Donner les professions des employés (après élimination des
duplicats)
5. Donner les dates d'embauche des techniciens.
6. Faire le produit cartésien entre EMP et DEPT
7. Donner les noms des employés et les noms de leur département.
8. Donner les numéros des employés travaillant à BOSTON.
9. Donner les noms des directeurs des départements 1 et 3.
10. Donner les noms des employés travaillant dans un département
avec au moins un ingénieur.
11. Donner le salaire et le nom des employés gagnant plus qu'un (au
moins un) ingénieur.
12. Donner le salaire et le nom des employés gagnant plus que tous
les ingénieurs.
13. Donner les noms des employés et les noms de leurs directeurs.
14. Trouver les noms des employés ayant le même directeur que JIM
15. Donner le nom et la date d'embauche des employés embauchés
avant leur directeur; donner également le nom et la date
d'embauche de leur directeur.
16. Donner les départements qui n'ont pas d'employés

9
Département d’informatique
2éme année LMD 2014/2015
Base de données SQL & SQL server 2008

17. Donner les noms des employés du département COMMERCIAL


embauchés le même jour qu'un employé du département
PRODUCTION.
18. Donner les noms des employés embauchés avant tous les
employés du département 1.
19. Donner la liste des employés ayant une commission.
20. Donner les noms, emplois et salaires des employés par emploi
croissant et, pour chaque emploi, par salaire décroissant.
21. Donner les noms des employés ayant le même emploi et le même
directeur que JOE.
22. Donner le nombre d'employés du département PRODUCTION.
23. Les numéros de département et leur salaire maximum?
24. Donner les noms des employés ayant le salaire maximum de
chaque département.
25. Les professions et leur salaire moyen?
26. Le salaire moyen le plus bas (par profession)?
27. Donner les emplois ayant le salaire moyen le plus bas; donnez
aussi leur salaire moyen.
28. Trouver tous les employés qui ont le même salaire que « eee1 »
29. Employés gagnant plus que tous les employés du département 10
30. Employés ne travaillant pas dans le même département que leur
directeur ?
31. Noms et prénoms des employés qui gagnent plus que leur
supérieur immédiat.
32. Donner les noms des employés embauchés avant tous les
employés du département 1.

Sauvegarde et restauration :
//En cours de construction

Gestion des utilisateurs, des groupes et des rôles :


//En cours de construction

10

Vous aimerez peut-être aussi